From 9f7a8aa18c7de49c1385b3e3e71df43520e1bff1 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 24 Oct 2023 17:42:03 +0200 Subject: [PATCH 001/205] Update MaD Declarations after Triage --- java/ql/lib/change-notes/2023-10-24-new-models.md | 12 ++++++++++++ .../ext/com.alibaba.druid.sql.repository.model.yml | 6 ++++++ .../lib/ext/jakarta.persistence.criteria.model.yml | 6 ++++++ java/ql/lib/ext/jakarta.persistence.model.yml | 8 ++++++++ java/ql/lib/ext/liquibase.database.jvm.model.yml | 6 ++++++ java/ql/lib/ext/liquibase.statement.core.model.yml | 6 ++++++ java/ql/lib/ext/org.apache.ibatis.mapping.model.yml | 6 ++++++ .../ext/org.keycloak.models.map.storage.model.yml | 6 ++++++ 8 files changed, 56 insertions(+) create mode 100644 java/ql/lib/change-notes/2023-10-24-new-models.md create mode 100644 java/ql/lib/ext/com.alibaba.druid.sql.repository.model.yml create mode 100644 java/ql/lib/ext/jakarta.persistence.criteria.model.yml create mode 100644 java/ql/lib/ext/jakarta.persistence.model.yml create mode 100644 java/ql/lib/ext/liquibase.database.jvm.model.yml create mode 100644 java/ql/lib/ext/liquibase.statement.core.model.yml create mode 100644 java/ql/lib/ext/org.apache.ibatis.mapping.model.yml create mode 100644 java/ql/lib/ext/org.keycloak.models.map.storage.model.yml diff --git a/java/ql/lib/change-notes/2023-10-24-new-models.md b/java/ql/lib/change-notes/2023-10-24-new-models.md new file mode 100644 index 00000000000..b587721af7b --- /dev/null +++ b/java/ql/lib/change-notes/2023-10-24-new-models.md @@ -0,0 +1,12 @@ +--- +category: minorAnalysis +--- +* Added models for the following packages: + + * com.alibaba.druid.sql.repository + * jakarta.persistence + * jakarta.persistence.criteria + * liquibase.database.jvm + * liquibase.statement.core + * org.apache.ibatis.mapping + * org.keycloak.models.map.storage diff --git a/java/ql/lib/ext/com.alibaba.druid.sql.repository.model.yml b/java/ql/lib/ext/com.alibaba.druid.sql.repository.model.yml new file mode 100644 index 00000000000..663479c52ac --- /dev/null +++ b/java/ql/lib/ext/com.alibaba.druid.sql.repository.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["com.alibaba.druid.sql.repository", "SchemaRepository", True, "console", "(String)", "", "Argument[0]", "sql-injection", "ai-manual"] diff --git a/java/ql/lib/ext/jakarta.persistence.criteria.model.yml b/java/ql/lib/ext/jakarta.persistence.criteria.model.yml new file mode 100644 index 00000000000..562f68792df --- /dev/null +++ b/java/ql/lib/ext/jakarta.persistence.criteria.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["jakarta.persistence.criteria", "CriteriaBuilder", True, "concat", "(String,Expression)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/jakarta.persistence.model.yml b/java/ql/lib/ext/jakarta.persistence.model.yml new file mode 100644 index 00000000000..0ee0eee2eec --- /dev/null +++ b/java/ql/lib/ext/jakarta.persistence.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["jakarta.persistence", "EntityManager", True, "createNativeQuery", "(String,Class)", "", "Argument[0]", "sql-injection", "ai-manual"] + - ["jakarta.persistence", "EntityManager", True, "createQuery", "(CriteriaDelete)", "", "Argument[0]", "sql-injection", "ai-manual"] + - ["jakarta.persistence", "Query", True, "setParameter", "(Parameter,Object)", "", "Argument[this]", "sql-injection", "ai-manual"] diff --git a/java/ql/lib/ext/liquibase.database.jvm.model.yml b/java/ql/lib/ext/liquibase.database.jvm.model.yml new file mode 100644 index 00000000000..53289d49e30 --- /dev/null +++ b/java/ql/lib/ext/liquibase.database.jvm.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["liquibase.database.jvm", "JdbcConnection", True, "prepareStatement", "(String)", "", "Argument[0]", "sql-injection", "ai-manual"] diff --git a/java/ql/lib/ext/liquibase.statement.core.model.yml b/java/ql/lib/ext/liquibase.statement.core.model.yml new file mode 100644 index 00000000000..8bbd4fefc51 --- /dev/null +++ b/java/ql/lib/ext/liquibase.statement.core.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["liquibase.statement.core", "RawSqlStatement", True, "RawSqlStatement", "(String)", "", "Argument[0]", "sql-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.ibatis.mapping.model.yml b/java/ql/lib/ext/org.apache.ibatis.mapping.model.yml new file mode 100644 index 00000000000..588c7a73be2 --- /dev/null +++ b/java/ql/lib/ext/org.apache.ibatis.mapping.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.apache.ibatis.mapping", "BoundSql", True, "getSql", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/org.keycloak.models.map.storage.model.yml b/java/ql/lib/ext/org.keycloak.models.map.storage.model.yml new file mode 100644 index 00000000000..0e264592c3f --- /dev/null +++ b/java/ql/lib/ext/org.keycloak.models.map.storage.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.keycloak.models.map.storage", "MapStorage", True, "delete", "(QueryParameters)", "", "Argument[0]", "sql-injection", "ai-manual"] From 107a05af71535737bddc6a425776212be04cee93 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 31 Oct 2023 16:52:02 +0100 Subject: [PATCH 002/205] Update MaD Declarations after Triage --- .../lib/change-notes/2023-10-31-new-models.md | 17 +++++++++++++++++ java/ql/lib/ext/com.google.common.io.model.yml | 2 ++ java/ql/lib/ext/hudson.console.model.yml | 6 ++++++ java/ql/lib/ext/hudson.model.yml | 3 +++ java/ql/lib/ext/java.lang.model.yml | 1 + java/ql/lib/ext/java.net.model.yml | 1 + java/ql/lib/ext/java.util.logging.model.yml | 3 ++- java/ql/lib/ext/javax.imageio.stream.model.yml | 6 +++++- java/ql/lib/ext/org.apache.commons.io.model.yml | 8 ++++++++ .../org.apache.hadoop.hive.ql.exec.model.yml | 11 +++++++++++ ...org.apache.hadoop.hive.ql.metadata.model.yml | 6 ++++++ .../ext/org.apache.tools.ant.taskdefs.model.yml | 1 + 12 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 java/ql/lib/change-notes/2023-10-31-new-models.md create mode 100644 java/ql/lib/ext/hudson.console.model.yml create mode 100644 java/ql/lib/ext/org.apache.hadoop.hive.ql.exec.model.yml create mode 100644 java/ql/lib/ext/org.apache.hadoop.hive.ql.metadata.model.yml diff --git a/java/ql/lib/change-notes/2023-10-31-new-models.md b/java/ql/lib/change-notes/2023-10-31-new-models.md new file mode 100644 index 00000000000..e5155582afd --- /dev/null +++ b/java/ql/lib/change-notes/2023-10-31-new-models.md @@ -0,0 +1,17 @@ +--- +category: minorAnalysis +--- +* Added models for the following packages: + + * com.google.common.io + * hudson + * hudson.console + * java.lang + * java.net + * java.rmi.server + * java.util.logging + * javax.imageio.stream + * org.apache.commons.io + * org.apache.hadoop.hive.ql.exec + * org.apache.hadoop.hive.ql.metadata + * org.apache.tools.ant.taskdefs diff --git a/java/ql/lib/ext/com.google.common.io.model.yml b/java/ql/lib/ext/com.google.common.io.model.yml index 9f3f3307462..8ce06de61b9 100644 --- a/java/ql/lib/ext/com.google.common.io.model.yml +++ b/java/ql/lib/ext/com.google.common.io.model.yml @@ -3,9 +3,11 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["com.google.common.io", "Files", False, "asByteSink", "(File,FileWriteMode[])", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "asCharSink", "(File,Charset,FileWriteMode[])", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "asCharSource", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "copy", "(File,OutputStream)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["com.google.common.io", "Files", False, "newWriter", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "readLines", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "toByteArray", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["com.google.common.io", "Files", False, "toString", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/hudson.console.model.yml b/java/ql/lib/ext/hudson.console.model.yml new file mode 100644 index 00000000000..c3634f8246c --- /dev/null +++ b/java/ql/lib/ext/hudson.console.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["hudson.console", "AnnotatedLargeText", True, "AnnotatedLargeText", "(File,Charset,boolean,Object)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/hudson.model.yml b/java/ql/lib/ext/hudson.model.yml index 4565894f020..590b43ad8d7 100644 --- a/java/ql/lib/ext/hudson.model.yml +++ b/java/ql/lib/ext/hudson.model.yml @@ -3,6 +3,8 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["hudson", "FilePath", False, "tar", "(OutputStream,String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", False, "unzipFrom", "(InputStream)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyFrom", "", "", "Argument[this]", "path-injection", "manual"] - ["hudson", "FilePath", True, "copyFrom", "(FilePath)", "", "Argument[0]", "path-injection", "manual"] - ["hudson", "FilePath", True, "copyFrom", "(URL)", "", "Argument[0]", "path-injection", "manual"] @@ -32,6 +34,7 @@ extensions: - ["hudson", "Launcher$ProcStarter", False, "cmdAsSingleString", "", "", "Argument[0]", "command-injection", "manual"] - ["hudson", "Launcher", True, "launch", "", "", "Argument[0]", "command-injection", "manual"] - ["hudson", "Launcher", True, "launchChannel", "", "", "Argument[0]", "command-injection", "manual"] + - ["hudson", "XmlFile", False, "XmlFile", "(XStream,File)", "", "Argument[1]", "path-injection", "ai-manual"] - addsTo: pack: codeql/java-all extensible: sourceModel diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 2cbea9c3121..4298ec18bff 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -13,6 +13,7 @@ extensions: - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[0]", "command-injection", "ai-manual"] - ["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", "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.model.yml b/java/ql/lib/ext/java.net.model.yml index a3bc92dc7b3..bcb17c0fa54 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -9,6 +9,7 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["java.net", "DatagramPacket", False, "DatagramPacket", "(byte[],int,InetAddress,int)", "", "Argument[2]", "request-forgery", "ai-manual"] - ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "Socket", True, "Socket", "(String,int)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net", "URL", False, "openConnection", "", "", "Argument[this]", "request-forgery", "manual"] diff --git a/java/ql/lib/ext/java.util.logging.model.yml b/java/ql/lib/ext/java.util.logging.model.yml index 330a2d469a8..4bd8c6556c9 100644 --- a/java/ql/lib/ext/java.util.logging.model.yml +++ b/java/ql/lib/ext/java.util.logging.model.yml @@ -3,6 +3,8 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,boolean)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.util.logging", "FileHandler", True, "FileHandler", "(String,int,int)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.util.logging", "Logger", True, "config", "", "", "Argument[0]", "log-injection", "manual"] - ["java.util.logging", "Logger", True, "entering", "(String,String)", "", "Argument[0..1]", "log-injection", "manual"] - ["java.util.logging", "Logger", True, "entering", "(String,String,Object)", "", "Argument[0..2]", "log-injection", "manual"] @@ -44,7 +46,6 @@ extensions: - ["java.util.logging", "Logger", False, "getLogger", "(String)", "", "Argument[0]", "ReturnValue.SyntheticField[java.util.logging.Logger.name]", "value", "manual"] - ["java.util.logging", "Logger", False, "getName", "()", "", "Argument[this].SyntheticField[java.util.logging.Logger.name]", "ReturnValue", "value", "manual"] - ["java.util.logging", "LogRecord", False, "LogRecord", "", "", "Argument[1]", "Argument[this]", "taint", "manual"] - - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/lib/ext/javax.imageio.stream.model.yml b/java/ql/lib/ext/javax.imageio.stream.model.yml index f1296b3bfdc..2c25029e4b0 100644 --- a/java/ql/lib/ext/javax.imageio.stream.model.yml +++ b/java/ql/lib/ext/javax.imageio.stream.model.yml @@ -1,7 +1,11 @@ extensions: - - addsTo: pack: codeql/java-all extensible: summaryModel data: - ["javax.imageio.stream", "FileCacheImageInputStream", True, "FileCacheImageInputStream", "(InputStream,File)", "", "Argument[0]", "Argument[this].Element", "taint", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["javax.imageio.stream", "FileImageOutputStream", True, "FileImageOutputStream", "(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 e80bc525883..20de13c5366 100644 --- a/java/ql/lib/ext/org.apache.commons.io.model.yml +++ b/java/ql/lib/ext/org.apache.commons.io.model.yml @@ -3,6 +3,8 @@ extensions: pack: codeql/java-all extensible: summaryModel data: + - ["org.apache.commons.io", "FileUtils", False, "listFiles", "(File,IOFileFilter,IOFileFilter)", "", "Argument[0]", "ReturnValue.Element", "taint", "ai-manual"] + - ["org.apache.commons.io", "FileUtils", False, "listFiles", "(File,String[],boolean)", "", "Argument[0]", "ReturnValue.Element", "taint", "ai-manual"] # Models that are not yet auto generated or where the generated summaries will # be ignored. # Note that if a callable has any handwritten summary, all generated summaries @@ -16,8 +18,14 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["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, "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"] - ["org.apache.commons.io", "FileUtils", True, "copyInputStreamToFile", "(InputStream,File)", "", "Argument[1]", "path-injection", "manual"] - ["org.apache.commons.io", "FileUtils", True, "copyToFile", "(InputStream,File)", "", "Argument[0]", "file-content-store", "ai-manual"] - ["org.apache.commons.io", "FileUtils", True, "copyToFile", "(InputStream,File)", "", "Argument[1]", "path-injection", "manual"] - ["org.apache.commons.io", "FileUtils", True, "openInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.commons.io", "IOUtils", False, "resourceToString", "(String,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.hive.ql.exec.model.yml b/java/ql/lib/ext/org.apache.hadoop.hive.ql.exec.model.yml new file mode 100644 index 00000000000..e429f111c5b --- /dev/null +++ b/java/ql/lib/ext/org.apache.hadoop.hive.ql.exec.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.hive.ql.exec", "Utilities", False, "renameOrMoveFilesInParallel", "(Configuration,FileSystem,Path,Path)", "", "Argument[2]", "path-injection", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.apache.hadoop.hive.ql.exec", "Utilities", False, "replaceTaskIdFromFilename", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.hive.ql.metadata.model.yml b/java/ql/lib/ext/org.apache.hadoop.hive.ql.metadata.model.yml new file mode 100644 index 00000000000..2915fc3d122 --- /dev/null +++ b/java/ql/lib/ext/org.apache.hadoop.hive.ql.metadata.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.hive.ql.metadata", "Hive", False, "copyFiles", "(HiveConf,Path,Path,FileSystem,boolean,boolean,boolean,List,boolean,boolean,boolean,boolean)", "", "Argument[2]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.tools.ant.taskdefs.model.yml b/java/ql/lib/ext/org.apache.tools.ant.taskdefs.model.yml index aaacf02d58c..4ed020d144f 100644 --- a/java/ql/lib/ext/org.apache.tools.ant.taskdefs.model.yml +++ b/java/ql/lib/ext/org.apache.tools.ant.taskdefs.model.yml @@ -7,5 +7,6 @@ extensions: - ["org.apache.tools.ant.taskdefs", "Copy", True, "setFile", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.tools.ant.taskdefs", "Copy", True, "setTodir", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.tools.ant.taskdefs", "Copy", True, "setTofile", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.tools.ant.taskdefs", "Execute", False, "runCommand", "(Task,String[])", "", "Argument[1]", "command-injection", "ai-manual"] - ["org.apache.tools.ant.taskdefs", "Expand", True, "setDest", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.tools.ant.taskdefs", "Expand", True, "setSrc", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] From fd66f47d82e462488a9fb4b8105f18835eb756df Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Sun, 12 Nov 2023 20:27:49 +0800 Subject: [PATCH 003/205] Added LoadClassNoSignatureCheck.ql --- .../CWE-470/LoadClassNoSignatureCheck.qhelp | 27 +++++++ .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 74 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp create mode 100644 java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp new file mode 100644 index 00000000000..fbf321c4483 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp @@ -0,0 +1,27 @@ + + + + +

+If a vulnerable app obtains the ClassLoader of any app based solely on the package name without checking the package signature +allow attacker to create application with the targeted package name for "package namespace squatting". +If the victim install such malicious app in the same device as the vulnerable app, the vulnerable app would load +classes or code from the malicious app, potentially leading to arbitrary code execution. +

+
+ + +

+Verify that the signature of an app in addition to the package name before loading the classes or code. +

+
+ + +
  • + +Oversecured (Android: arbitrary code execution via third-party package contexts) + +
  • +
    + +
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql new file mode 100644 index 00000000000..8bcada25e88 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -0,0 +1,74 @@ +/** + * @name Load 3rd party classes or code ('unsafe reflection') without signature check + * @description Load classes or code from 3rd party package without checking the + * package signature but only rely on package name. + * This makes it susceptible to package namespace squatting + * potentially leading to arbitrary code execution. + * @kind path-problem + * @problem.severity error + * @precision high + * @id java/unsafe-reflection + * @tags security + * experimental + * external/cwe/cwe-470 + */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.dataflow.TaintTracking + +predicate doesPackageContextLeadToInvokeMethod( + DataFlow::Node sinkPackageContext, MethodAccess maInvoke + +) +{ + exists( + MethodAccess maGetClassLoader, + MethodAccess maLoadClass, + MethodAccess maGetMethod | + maGetClassLoader.getCallee().getName() = "getClassLoader" and + maGetClassLoader.getQualifier() = sinkPackageContext.asExpr() and + maLoadClass.getCallee().getName() = "loadClass" and + maLoadClass.getQualifier() = maGetClassLoader and + // check for arbitray code execution + maGetMethod.getCallee().getName() = "getMethod" and + maGetMethod.getQualifier() = maLoadClass and + maInvoke.getCallee().getName() = "invoke" and + maInvoke.getQualifier() = maGetMethod + ) +} + +predicate isSignaturesChecked(MethodAccess maCreatePackageContext) +{ + exists( + MethodAccess maCheckSignatures | + maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and + maCheckSignatures.getCallee().getName() = "checkSignatures" and + //maCheckSignatures.getArgument(0).toString() = maCreatePackageContext.getArgument(0).toString() + TaintTracking::localTaint( + DataFlow::exprNode(maCheckSignatures.getArgument(0)), + DataFlow::exprNode(maCreatePackageContext.getArgument(0))) + ) +} + +from + MethodAccess maCreatePackageContext, + LocalVariableDeclExpr lvdePackageContext, + DataFlow::Node sinkPackageContext, + MethodAccess maInvoke +where + maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" and + maCreatePackageContext.getCallee().getName() = "createPackageContext" and + + not isSignaturesChecked(maCreatePackageContext) and + + lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and + TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and + + doesPackageContextLeadToInvokeMethod(sinkPackageContext, maInvoke) +select + lvdePackageContext, + sinkPackageContext, + maInvoke, + maCreatePackageContext.getArgument(0) + From 20592352d0391261b2a6b145c4bf0ade955a0946 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Sun, 12 Nov 2023 20:48:49 +0800 Subject: [PATCH 004/205] Updated text in LoadClassNoSignatureCheck.qhelp --- .../Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp index fbf321c4483..93bd37d7375 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp @@ -3,9 +3,10 @@

    -If a vulnerable app obtains the ClassLoader of any app based solely on the package name without checking the package signature -allow attacker to create application with the targeted package name for "package namespace squatting". -If the victim install such malicious app in the same device as the vulnerable app, the vulnerable app would load +If a vulnerable loads classes or code of any app based solely on the package name of the app without +first checking the package signature of the app, this could malicious app with the same package name +to be loaded through "package namespace squatting". +If the victim user install such malicious app in the same device as the vulnerable app, the vulnerable app would load classes or code from the malicious app, potentially leading to arbitrary code execution.

    From 532f6a5b0c536085c0e46d3fadc76136bcc55ab2 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:27:07 +0800 Subject: [PATCH 005/205] Removed @kind path-problem in comment. Added text message in select. --- .../Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 8bcada25e88..3f3aef37aed 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -4,7 +4,6 @@ * package signature but only rely on package name. * This makes it susceptible to package namespace squatting * potentially leading to arbitrary code execution. - * @kind path-problem * @problem.severity error * @precision high * @id java/unsafe-reflection @@ -59,16 +58,13 @@ from where maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" and maCreatePackageContext.getCallee().getName() = "createPackageContext" and - not isSignaturesChecked(maCreatePackageContext) and - lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and - doesPackageContextLeadToInvokeMethod(sinkPackageContext, maInvoke) select lvdePackageContext, sinkPackageContext, maInvoke, - maCreatePackageContext.getArgument(0) + "Potential arbitary code execution due to class loading without package signature checking." From 2952d8f65aec2c46ec63aeed2fc4bde5390d99f5 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Sat, 18 Nov 2023 18:52:47 +0800 Subject: [PATCH 006/205] Updated query to cover broader detection. --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 3f3aef37aed..422389043f4 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -15,28 +15,49 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking + +ControlFlowNode getControlFlowNodeSuccessor(ControlFlowNode node) +{ + result = node.getASuccessor() +} -predicate doesPackageContextLeadToInvokeMethod( - DataFlow::Node sinkPackageContext, MethodAccess maInvoke - -) +MethodAccess getClassLoaderReachableMethodAccess(DataFlow::Node node) { exists( - MethodAccess maGetClassLoader, - MethodAccess maLoadClass, - MethodAccess maGetMethod | + MethodAccess maGetClassLoader, ControlFlowNode cfnGetClassLoader, ControlFlowNode cfnSuccessor | maGetClassLoader.getCallee().getName() = "getClassLoader" and - maGetClassLoader.getQualifier() = sinkPackageContext.asExpr() and - maLoadClass.getCallee().getName() = "loadClass" and - maLoadClass.getQualifier() = maGetClassLoader and - // check for arbitray code execution - maGetMethod.getCallee().getName() = "getMethod" and - maGetMethod.getQualifier() = maLoadClass and - maInvoke.getCallee().getName() = "invoke" and - maInvoke.getQualifier() = maGetMethod + maGetClassLoader.getQualifier() = node.asExpr() and + maGetClassLoader.getControlFlowNode() = cfnGetClassLoader and + //cfnGetClassLoader.getASuccessor+() = cfnSuccessor and + getControlFlowNodeSuccessor+(cfnGetClassLoader) = cfnSuccessor and + cfnSuccessor instanceof MethodAccess and + result = cfnSuccessor.(MethodAccess) ) } +MethodAccess getDangerousReachableMethodAccess(MethodAccess ma) +{ + (ma.getCallee().hasName("getMethod") or + ma.getCallee().hasName("getDeclaredMethod")) and + (( + exists(MethodAccess maInvoke | + //ma.getControlFlowNode().getASuccessor*() = maInvoke and + getControlFlowNodeSuccessor+(ma.getControlFlowNode()) = maInvoke and + maInvoke.getCallee().hasName("invoke") and + result = maInvoke + ) + ) or + ( + exists(AssignExpr ae, VarAccess va1, VarAccess va2, MethodAccess maInvoke | + ae.getSource() = ma and + ae.getDest() = va1 and + maInvoke.getQualifier() = va2 and + va1.getVariable() = va2.getVariable() and + result = maInvoke + ) + )) +} + predicate isSignaturesChecked(MethodAccess maCreatePackageContext) { exists( @@ -49,22 +70,26 @@ predicate isSignaturesChecked(MethodAccess maCreatePackageContext) DataFlow::exprNode(maCreatePackageContext.getArgument(0))) ) } - + from MethodAccess maCreatePackageContext, LocalVariableDeclExpr lvdePackageContext, DataFlow::Node sinkPackageContext, - MethodAccess maInvoke + MethodAccess maGetMethod, + MethodAccess maInvoke where - maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" and + (maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" or + maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.Context") and maCreatePackageContext.getCallee().getName() = "createPackageContext" and not isSignaturesChecked(maCreatePackageContext) and lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and - doesPackageContextLeadToInvokeMethod(sinkPackageContext, maInvoke) + getClassLoaderReachableMethodAccess(sinkPackageContext) = maGetMethod and + getDangerousReachableMethodAccess(maGetMethod) = maInvoke select lvdePackageContext, sinkPackageContext, + maGetMethod, maInvoke, "Potential arbitary code execution due to class loading without package signature checking." - + From 2d33f86d41da26df63ee12404cdc6393e7e39c8a Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:00:00 +0000 Subject: [PATCH 007/205] Initial Push - Sample test (test not compiling) - Stubs not generating --- go/ql/lib/semmle/go/frameworks/XPath.qll | 15 + .../Security/CWE-643/XPathInjection.expected | 266 +++++++++--------- .../test/query-tests/Security/CWE-643/go.mod | 1 + .../test/query-tests/Security/CWE-643/tst.go | 12 + 4 files changed, 161 insertions(+), 133 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/XPath.qll b/go/ql/lib/semmle/go/frameworks/XPath.qll index e3b7282c4e3..0828a1a5067 100644 --- a/go/ql/lib/semmle/go/frameworks/XPath.qll +++ b/go/ql/lib/semmle/go/frameworks/XPath.qll @@ -142,6 +142,21 @@ module XPath { } } + /** + * An XPath expression string used in an API function of the + * [lestrrat-go/libxml2](https://github.com/lestrrat-go/libxml2) package. + */ + private class LestratGoLibxml2XPathExpressionString extends Range { + LestratGoLibxml2XPathExpressionString() { + exists(Function f, string name | name.matches("Parse%") | + f.hasQualifiedName("github.com/lestrrat-go/libxml2/parser.Parser", name) and + //f.hasQualifiedName(package("github.com/lestrrat-go/libxml2/parser.Parser", ""), name) and + this = f.getACall().getArgument(0) + ) + } + } + + /** * An XPath expression string used in an API function of the * [xpathparser](https://github.com/santhosh-tekuri/xpathparser) package. 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 6d69dadf438..dbf177fc5d3 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -1,149 +1,149 @@ 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:32:14:32:19 | selection of Form | tst.go:32:14:32:35 | call to Get | -| tst.go:32:14:32:35 | call to Get | tst.go:35:23:35:85 | ...+... | -| tst.go:32:14:32:35 | call to Get | tst.go:38:24:38:86 | ...+... | -| tst.go:32:14:32:35 | call to Get | tst.go:41:24:41:82 | ...+... | -| tst.go:46:14:46:19 | selection of Form | tst.go:46:14:46:35 | call to Get | -| tst.go:46:14:46:35 | call to Get | tst.go:49:26:49:84 | ...+... | -| tst.go:46:14:46:35 | call to Get | tst.go:52:29:52:87 | ...+... | -| tst.go:46:14:46:35 | call to Get | tst.go:55:33:55:91 | ...+... | -| tst.go:46:14:46:35 | call to Get | tst.go:58:30:58:88 | ...+... | -| tst.go:63:14:63:19 | selection of Form | tst.go:63:14:63:35 | call to Get | -| tst.go:63:14:63:35 | call to Get | tst.go:66:25:66:83 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:69:28:69:86 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:72:25:72:83 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:75:34:75:92 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:78:32:78:90 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:81:29:81:87 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:84:23:84:85 | ...+... | -| tst.go:63:14:63:35 | call to Get | tst.go:87:22:87:84 | ...+... | -| tst.go:92:14:92:19 | selection of Form | tst.go:92:14:92:35 | call to Get | -| tst.go:92:14:92:35 | call to Get | tst.go:95:26:95:84 | ...+... | -| tst.go:92:14:92:35 | call to Get | tst.go:98:29:98:87 | ...+... | -| tst.go:92:14:92:35 | call to Get | tst.go:101:33:101:91 | ...+... | -| tst.go:92:14:92:35 | call to Get | tst.go:104:30:104:88 | ...+... | -| tst.go:109:14:109:19 | selection of Form | tst.go:109:14:109:35 | call to Get | -| tst.go:109:14:109:35 | call to Get | tst.go:112:25:112:87 | ...+... | -| tst.go:109:14:109:35 | call to Get | tst.go:115:26:115:88 | ...+... | -| tst.go:120:14:120:19 | selection of Form | tst.go:120:14:120:35 | call to Get | -| tst.go:120:14:120:35 | call to Get | tst.go:124:23:124:126 | ...+... | -| tst.go:120:14:120:35 | call to Get | tst.go:127:24:127:127 | ...+... | -| tst.go:120:14:120:35 | call to Get | tst.go:130:27:130:122 | ...+... | +| tst.go:33:14:33:19 | selection of Form | tst.go:33:14:33:35 | call to Get | +| tst.go:33:14:33:35 | call to Get | tst.go:36:23:36:85 | ...+... | +| tst.go:33:14:33:35 | call to Get | tst.go:39:24:39:86 | ...+... | +| tst.go:33:14:33:35 | call to Get | tst.go:42:24:42:82 | ...+... | +| tst.go:47:14:47:19 | selection of Form | tst.go:47:14:47:35 | call to Get | +| tst.go:47:14:47:35 | call to Get | tst.go:50:26:50:84 | ...+... | +| tst.go:47:14:47:35 | call to Get | tst.go:53:29:53:87 | ...+... | +| tst.go:47:14:47:35 | call to Get | tst.go:56:33:56:91 | ...+... | +| tst.go:47:14:47:35 | call to Get | tst.go:59:30:59:88 | ...+... | +| tst.go:64:14:64:19 | selection of Form | tst.go:64:14:64:35 | call to Get | +| tst.go:64:14:64:35 | call to Get | tst.go:67:25:67:83 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:70:28:70:86 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:73:25:73:83 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:76:34:76:92 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:79:32:79:90 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:82:29:82:87 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:85:23:85:85 | ...+... | +| tst.go:64:14:64:35 | call to Get | tst.go:88:22:88:84 | ...+... | +| tst.go:93:14:93:19 | selection of Form | tst.go:93:14:93:35 | call to Get | +| tst.go:93:14:93:35 | call to Get | tst.go:96:26:96:84 | ...+... | +| tst.go:93:14:93:35 | call to Get | tst.go:99:29:99:87 | ...+... | +| tst.go:93:14:93:35 | call to Get | tst.go:102:33:102:91 | ...+... | +| tst.go:93:14:93:35 | call to Get | tst.go:105:30:105:88 | ...+... | +| tst.go:110:14:110:19 | selection of Form | tst.go:110:14:110:35 | call to Get | +| tst.go:110:14:110:35 | call to Get | tst.go:113:25:113:87 | ...+... | +| tst.go:110:14:110:35 | call to Get | tst.go:116:26:116:88 | ...+... | | tst.go:121:14:121:19 | selection of Form | tst.go:121:14:121:35 | call to Get | -| tst.go:121:14:121:35 | call to Get | tst.go:124:23:124:126 | ...+... | -| tst.go:121:14:121:35 | call to Get | tst.go:127:24:127:127 | ...+... | -| tst.go:121:14:121:35 | call to Get | tst.go:130:27:130:122 | ...+... | -| tst.go:138:14:138:19 | selection of Form | tst.go:138:14:138:35 | call to Get | -| tst.go:138:14:138:35 | call to Get | tst.go:141:27:141:89 | ...+... | -| tst.go:138:14:138:35 | call to Get | tst.go:144:28:144:90 | ...+... | -| tst.go:149:14:149:19 | selection of Form | tst.go:149:14:149:35 | call to Get | -| tst.go:149:14:149:35 | call to Get | tst.go:153:33:153:136 | ...+... | -| tst.go:149:14:149:35 | call to Get | tst.go:156:18:156:121 | ...+... | -| tst.go:149:14:149:35 | call to Get | tst.go:162:31:162:126 | ...+... | -| tst.go:149:14:149:35 | call to Get | tst.go:171:21:171:116 | ...+... | -| tst.go:149:14:149:35 | call to Get | tst.go:180:27:180:122 | ...+... | +| tst.go:121:14:121:35 | call to Get | tst.go:125:23:125:126 | ...+... | +| tst.go:121:14:121:35 | call to Get | tst.go:128:24:128:127 | ...+... | +| tst.go:121:14:121:35 | call to Get | tst.go:131:27:131:122 | ...+... | +| 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:125:23:125:126 | ...+... | +| tst.go:122:14:122:35 | call to Get | tst.go:128:24:128:127 | ...+... | +| tst.go:122:14:122:35 | call to Get | tst.go:131:27:131:122 | ...+... | +| tst.go:139:14:139:19 | selection of Form | tst.go:139:14:139:35 | call to Get | +| tst.go:139:14:139:35 | call to Get | tst.go:142:27:142:89 | ...+... | +| tst.go:139:14:139:35 | call to Get | tst.go:145:28:145:90 | ...+... | | tst.go:150:14:150:19 | selection of Form | tst.go:150:14:150:35 | call to Get | -| tst.go:150:14:150:35 | call to Get | tst.go:153:33:153:136 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:156:18:156:121 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:162:31:162:126 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:171:21:171:116 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:180:27:180:122 | ...+... | +| tst.go:150:14:150:35 | call to Get | tst.go:154:33:154:136 | ...+... | +| tst.go:150:14:150:35 | call to Get | tst.go:157:18:157:121 | ...+... | +| tst.go:150:14:150:35 | call to Get | tst.go:163:31:163:126 | ...+... | +| tst.go:150:14:150:35 | call to Get | tst.go:172:21:172:116 | ...+... | +| tst.go:150:14:150:35 | call to Get | tst.go:181:27:181:122 | ...+... | +| 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:154:33:154:136 | ...+... | +| tst.go:151:14:151:35 | call to Get | tst.go:157:18:157:121 | ...+... | +| tst.go:151:14:151:35 | call to Get | tst.go:163:31:163:126 | ...+... | +| tst.go:151:14:151:35 | call to Get | tst.go:172:21:172:116 | ...+... | +| tst.go:151:14:151:35 | call to Get | tst.go:181:27:181:122 | ...+... | 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 | | XPathInjection.go:16:29:16:91 | ...+... | semmle.label | ...+... | -| tst.go:32:14:32:19 | selection of Form | semmle.label | selection of Form | -| tst.go:32:14:32:35 | call to Get | semmle.label | call to Get | -| tst.go:35:23:35:85 | ...+... | semmle.label | ...+... | -| tst.go:38:24:38:86 | ...+... | semmle.label | ...+... | -| tst.go:41:24:41:82 | ...+... | semmle.label | ...+... | -| tst.go:46:14:46:19 | selection of Form | semmle.label | selection of Form | -| tst.go:46:14:46:35 | call to Get | semmle.label | call to Get | -| tst.go:49:26:49:84 | ...+... | semmle.label | ...+... | -| tst.go:52:29:52:87 | ...+... | semmle.label | ...+... | -| tst.go:55:33:55:91 | ...+... | semmle.label | ...+... | -| tst.go:58:30:58:88 | ...+... | semmle.label | ...+... | -| tst.go:63:14:63:19 | selection of Form | semmle.label | selection of Form | -| tst.go:63:14:63:35 | call to Get | semmle.label | call to Get | -| tst.go:66:25:66:83 | ...+... | semmle.label | ...+... | -| tst.go:69:28:69:86 | ...+... | semmle.label | ...+... | -| tst.go:72:25:72:83 | ...+... | semmle.label | ...+... | -| tst.go:75:34:75:92 | ...+... | semmle.label | ...+... | -| tst.go:78:32:78:90 | ...+... | semmle.label | ...+... | -| tst.go:81:29:81:87 | ...+... | semmle.label | ...+... | -| tst.go:84:23:84:85 | ...+... | semmle.label | ...+... | -| tst.go:87:22:87:84 | ...+... | semmle.label | ...+... | -| tst.go:92:14:92:19 | selection of Form | semmle.label | selection of Form | -| tst.go:92:14:92:35 | call to Get | semmle.label | call to Get | -| tst.go:95:26:95:84 | ...+... | semmle.label | ...+... | -| tst.go:98:29:98:87 | ...+... | semmle.label | ...+... | -| tst.go:101:33:101:91 | ...+... | semmle.label | ...+... | -| tst.go:104:30:104:88 | ...+... | semmle.label | ...+... | -| tst.go:109:14:109:19 | selection of Form | semmle.label | selection of Form | -| tst.go:109:14:109:35 | call to Get | semmle.label | call to Get | -| tst.go:112:25:112:87 | ...+... | semmle.label | ...+... | -| tst.go:115:26:115:88 | ...+... | semmle.label | ...+... | -| tst.go:120:14:120:19 | selection of Form | semmle.label | selection of Form | -| tst.go:120:14:120:35 | call to Get | semmle.label | call to Get | +| tst.go:33:14:33:19 | selection of Form | semmle.label | selection of Form | +| tst.go:33:14:33:35 | call to Get | semmle.label | call to Get | +| tst.go:36:23:36:85 | ...+... | semmle.label | ...+... | +| tst.go:39:24:39:86 | ...+... | semmle.label | ...+... | +| tst.go:42:24:42:82 | ...+... | semmle.label | ...+... | +| tst.go:47:14:47:19 | selection of Form | semmle.label | selection of Form | +| tst.go:47:14:47:35 | call to Get | semmle.label | call to Get | +| tst.go:50:26:50:84 | ...+... | semmle.label | ...+... | +| tst.go:53:29:53:87 | ...+... | semmle.label | ...+... | +| tst.go:56:33:56:91 | ...+... | semmle.label | ...+... | +| tst.go:59:30:59:88 | ...+... | semmle.label | ...+... | +| tst.go:64:14:64:19 | selection of Form | semmle.label | selection of Form | +| tst.go:64:14:64:35 | call to Get | semmle.label | call to Get | +| tst.go:67:25:67:83 | ...+... | semmle.label | ...+... | +| tst.go:70:28:70:86 | ...+... | semmle.label | ...+... | +| tst.go:73:25:73:83 | ...+... | semmle.label | ...+... | +| tst.go:76:34:76:92 | ...+... | semmle.label | ...+... | +| tst.go:79:32:79:90 | ...+... | semmle.label | ...+... | +| tst.go:82:29:82:87 | ...+... | semmle.label | ...+... | +| tst.go:85:23:85:85 | ...+... | semmle.label | ...+... | +| tst.go:88:22:88:84 | ...+... | semmle.label | ...+... | +| tst.go:93:14:93:19 | selection of Form | semmle.label | selection of Form | +| tst.go:93:14:93:35 | call to Get | semmle.label | call to Get | +| tst.go:96:26:96:84 | ...+... | semmle.label | ...+... | +| tst.go:99:29:99:87 | ...+... | semmle.label | ...+... | +| tst.go:102:33:102:91 | ...+... | semmle.label | ...+... | +| tst.go:105:30:105:88 | ...+... | semmle.label | ...+... | +| tst.go:110:14:110:19 | selection of Form | semmle.label | selection of Form | +| tst.go:110:14:110:35 | call to Get | semmle.label | call to Get | +| tst.go:113:25:113:87 | ...+... | semmle.label | ...+... | +| tst.go:116:26:116:88 | ...+... | semmle.label | ...+... | | tst.go:121:14:121:19 | selection of Form | semmle.label | selection of Form | | tst.go:121:14:121:35 | call to Get | semmle.label | call to Get | -| tst.go:124:23:124:126 | ...+... | semmle.label | ...+... | -| tst.go:127:24:127:127 | ...+... | semmle.label | ...+... | -| tst.go:130:27:130:122 | ...+... | semmle.label | ...+... | -| tst.go:138:14:138:19 | selection of Form | semmle.label | selection of Form | -| tst.go:138:14:138:35 | call to Get | semmle.label | call to Get | -| tst.go:141:27:141:89 | ...+... | semmle.label | ...+... | -| tst.go:144:28:144:90 | ...+... | semmle.label | ...+... | -| tst.go:149:14:149:19 | selection of Form | semmle.label | selection of Form | -| tst.go:149:14:149:35 | call to Get | semmle.label | call to Get | +| tst.go:122:14:122:19 | selection of Form | semmle.label | selection of Form | +| tst.go:122:14:122:35 | call to Get | semmle.label | call to Get | +| tst.go:125:23:125:126 | ...+... | semmle.label | ...+... | +| tst.go:128:24:128:127 | ...+... | semmle.label | ...+... | +| tst.go:131:27:131:122 | ...+... | semmle.label | ...+... | +| tst.go:139:14:139:19 | selection of Form | semmle.label | selection of Form | +| tst.go:139:14:139:35 | call to Get | semmle.label | call to Get | +| tst.go:142:27:142:89 | ...+... | semmle.label | ...+... | +| tst.go:145:28:145:90 | ...+... | semmle.label | ...+... | | tst.go:150:14:150:19 | selection of Form | semmle.label | selection of Form | | tst.go:150:14:150:35 | call to Get | semmle.label | call to Get | -| tst.go:153:33:153:136 | ...+... | semmle.label | ...+... | -| tst.go:156:18:156:121 | ...+... | semmle.label | ...+... | -| tst.go:162:31:162:126 | ...+... | semmle.label | ...+... | -| tst.go:171:21:171:116 | ...+... | semmle.label | ...+... | -| tst.go:180:27:180:122 | ...+... | semmle.label | ...+... | +| tst.go:151:14:151:19 | selection of Form | semmle.label | selection of Form | +| tst.go:151:14:151:35 | call to Get | semmle.label | call to Get | +| tst.go:154:33:154:136 | ...+... | semmle.label | ...+... | +| tst.go:157:18:157:121 | ...+... | semmle.label | ...+... | +| tst.go:163:31:163:126 | ...+... | semmle.label | ...+... | +| tst.go:172:21:172:116 | ...+... | semmle.label | ...+... | +| tst.go:181:27:181:122 | ...+... | semmle.label | ...+... | subpaths #select | XPathInjection.go:16:29:16:91 | ...+... | XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:16:29:16:91 | ...+... | XPath expression depends on a $@. | XPathInjection.go:13:14:13:19 | selection of Form | user-provided value | -| tst.go:35:23:35:85 | ...+... | tst.go:32:14:32:19 | selection of Form | tst.go:35:23:35:85 | ...+... | XPath expression depends on a $@. | tst.go:32:14:32:19 | selection of Form | user-provided value | -| tst.go:38:24:38:86 | ...+... | tst.go:32:14:32:19 | selection of Form | tst.go:38:24:38:86 | ...+... | XPath expression depends on a $@. | tst.go:32:14:32:19 | selection of Form | user-provided value | -| tst.go:41:24:41:82 | ...+... | tst.go:32:14:32:19 | selection of Form | tst.go:41:24:41:82 | ...+... | XPath expression depends on a $@. | tst.go:32:14:32:19 | selection of Form | user-provided value | -| tst.go:49:26:49:84 | ...+... | tst.go:46:14:46:19 | selection of Form | tst.go:49:26:49:84 | ...+... | XPath expression depends on a $@. | tst.go:46:14:46:19 | selection of Form | user-provided value | -| tst.go:52:29:52:87 | ...+... | tst.go:46:14:46:19 | selection of Form | tst.go:52:29:52:87 | ...+... | XPath expression depends on a $@. | tst.go:46:14:46:19 | selection of Form | user-provided value | -| tst.go:55:33:55:91 | ...+... | tst.go:46:14:46:19 | selection of Form | tst.go:55:33:55:91 | ...+... | XPath expression depends on a $@. | tst.go:46:14:46:19 | selection of Form | user-provided value | -| tst.go:58:30:58:88 | ...+... | tst.go:46:14:46:19 | selection of Form | tst.go:58:30:58:88 | ...+... | XPath expression depends on a $@. | tst.go:46:14:46:19 | selection of Form | user-provided value | -| tst.go:66:25:66:83 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:66:25:66:83 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:69:28:69:86 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:69:28:69:86 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:72:25:72:83 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:72:25:72:83 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:75:34:75:92 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:75:34:75:92 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:78:32:78:90 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:78:32:78:90 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:81:29:81:87 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:81:29:81:87 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:84:23:84:85 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:84:23:84:85 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:87:22:87:84 | ...+... | tst.go:63:14:63:19 | selection of Form | tst.go:87:22:87:84 | ...+... | XPath expression depends on a $@. | tst.go:63:14:63:19 | selection of Form | user-provided value | -| tst.go:95:26:95:84 | ...+... | tst.go:92:14:92:19 | selection of Form | tst.go:95:26:95:84 | ...+... | XPath expression depends on a $@. | tst.go:92:14:92:19 | selection of Form | user-provided value | -| tst.go:98:29:98:87 | ...+... | tst.go:92:14:92:19 | selection of Form | tst.go:98:29:98:87 | ...+... | XPath expression depends on a $@. | tst.go:92:14:92:19 | selection of Form | user-provided value | -| tst.go:101:33:101:91 | ...+... | tst.go:92:14:92:19 | selection of Form | tst.go:101:33:101:91 | ...+... | XPath expression depends on a $@. | tst.go:92:14:92:19 | selection of Form | user-provided value | -| tst.go:104:30:104:88 | ...+... | tst.go:92:14:92:19 | selection of Form | tst.go:104:30:104:88 | ...+... | XPath expression depends on a $@. | tst.go:92:14:92:19 | selection of Form | user-provided value | -| tst.go:112:25:112:87 | ...+... | tst.go:109:14:109:19 | selection of Form | tst.go:112:25:112:87 | ...+... | XPath expression depends on a $@. | tst.go:109:14:109:19 | selection of Form | user-provided value | -| tst.go:115:26:115:88 | ...+... | tst.go:109:14:109:19 | selection of Form | tst.go:115:26:115:88 | ...+... | XPath expression depends on a $@. | tst.go:109:14:109:19 | selection of Form | user-provided value | -| tst.go:124:23:124:126 | ...+... | tst.go:120:14:120:19 | selection of Form | tst.go:124:23:124:126 | ...+... | XPath expression depends on a $@. | tst.go:120:14:120:19 | selection of Form | user-provided value | -| tst.go:124:23:124:126 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:124:23:124:126 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:127:24:127:127 | ...+... | tst.go:120:14:120:19 | selection of Form | tst.go:127:24:127:127 | ...+... | XPath expression depends on a $@. | tst.go:120:14:120:19 | selection of Form | user-provided value | -| tst.go:127:24:127:127 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:127:24:127:127 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:130:27:130:122 | ...+... | tst.go:120:14:120:19 | selection of Form | tst.go:130:27:130:122 | ...+... | XPath expression depends on a $@. | tst.go:120:14:120:19 | selection of Form | user-provided value | -| tst.go:130:27:130:122 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:130:27:130:122 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:141:27:141:89 | ...+... | tst.go:138:14:138:19 | selection of Form | tst.go:141:27:141:89 | ...+... | XPath expression depends on a $@. | tst.go:138:14:138:19 | selection of Form | user-provided value | -| tst.go:144:28:144:90 | ...+... | tst.go:138:14:138:19 | selection of Form | tst.go:144:28:144:90 | ...+... | XPath expression depends on a $@. | tst.go:138:14:138:19 | selection of Form | user-provided value | -| tst.go:153:33:153:136 | ...+... | tst.go:149:14:149:19 | selection of Form | tst.go:153:33:153:136 | ...+... | XPath expression depends on a $@. | tst.go:149:14:149:19 | selection of Form | user-provided value | -| tst.go:153:33:153:136 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:153:33:153:136 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:156:18:156:121 | ...+... | tst.go:149:14:149:19 | selection of Form | tst.go:156:18:156:121 | ...+... | XPath expression depends on a $@. | tst.go:149:14:149:19 | selection of Form | user-provided value | -| tst.go:156:18:156:121 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:156:18:156:121 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:162:31:162:126 | ...+... | tst.go:149:14:149:19 | selection of Form | tst.go:162:31:162:126 | ...+... | XPath expression depends on a $@. | tst.go:149:14:149:19 | selection of Form | user-provided value | -| tst.go:162:31:162:126 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:162:31:162:126 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:171:21:171:116 | ...+... | tst.go:149:14:149:19 | selection of Form | tst.go:171:21:171:116 | ...+... | XPath expression depends on a $@. | tst.go:149:14:149:19 | selection of Form | user-provided value | -| tst.go:171:21:171:116 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:171:21:171:116 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:180:27:180:122 | ...+... | tst.go:149:14:149:19 | selection of Form | tst.go:180:27:180:122 | ...+... | XPath expression depends on a $@. | tst.go:149:14:149:19 | selection of Form | user-provided value | -| tst.go:180:27:180:122 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:180:27:180:122 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:36:23:36:85 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:36:23:36:85 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | +| tst.go:39:24:39:86 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:39:24:39:86 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | +| tst.go:42:24:42:82 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:42:24:42:82 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | +| tst.go:50:26:50:84 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:50:26:50:84 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | +| tst.go:53:29:53:87 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:53:29:53:87 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | +| tst.go:56:33:56:91 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:56:33:56:91 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | +| tst.go:59:30:59:88 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:59:30:59:88 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | +| tst.go:67:25:67:83 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:67:25:67:83 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:70:28:70:86 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:70:28:70:86 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:73:25:73:83 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:73:25:73:83 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:76:34:76:92 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:76:34:76:92 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:79:32:79:90 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:79:32:79:90 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:82:29:82:87 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:82:29:82:87 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:85:23:85:85 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:85:23:85:85 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:88:22:88:84 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:88:22:88:84 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | +| tst.go:96:26:96:84 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:96:26:96:84 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | +| tst.go:99:29:99:87 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:99:29:99:87 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | +| tst.go:102:33:102:91 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:102:33:102:91 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | +| tst.go:105:30:105:88 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:105:30:105:88 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | +| tst.go:113:25:113:87 | ...+... | tst.go:110:14:110:19 | selection of Form | tst.go:113:25:113:87 | ...+... | XPath expression depends on a $@. | tst.go:110:14:110:19 | selection of Form | user-provided value | +| tst.go:116:26:116:88 | ...+... | tst.go:110:14:110:19 | selection of Form | tst.go:116:26:116:88 | ...+... | XPath expression depends on a $@. | tst.go:110:14:110:19 | selection of Form | user-provided value | +| tst.go:125:23:125:126 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:125:23:125:126 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | +| tst.go:125:23:125:126 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:125:23:125:126 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:128:24:128:127 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:128:24:128:127 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | +| tst.go:128:24:128:127 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:128:24:128:127 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:131:27:131:122 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:131:27:131:122 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | +| tst.go:131:27:131:122 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:131:27:131:122 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:142:27:142:89 | ...+... | tst.go:139:14:139:19 | selection of Form | tst.go:142:27:142:89 | ...+... | XPath expression depends on a $@. | tst.go:139:14:139:19 | selection of Form | user-provided value | +| tst.go:145:28:145:90 | ...+... | tst.go:139:14:139:19 | selection of Form | tst.go:145:28:145:90 | ...+... | XPath expression depends on a $@. | tst.go:139:14:139:19 | selection of Form | user-provided value | +| tst.go:154:33:154:136 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:154:33:154:136 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:154:33:154:136 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:154:33:154:136 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:157:18:157:121 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:157:18:157:121 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:157:18:157:121 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:157:18:157:121 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:163:31:163:126 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:163:31:163:126 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:163:31:163:126 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:163:31:163:126 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:172:21:172:116 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:172:21:172:116 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:172:21:172:116 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:172:21:172:116 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:181:27:181:122 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:181:27:181:122 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | +| tst.go:181:27:181:122 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:181:27:181:122 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | diff --git a/go/ql/test/query-tests/Security/CWE-643/go.mod b/go/ql/test/query-tests/Security/CWE-643/go.mod index fc7016cc9f6..e33641a6fba 100644 --- a/go/ql/test/query-tests/Security/CWE-643/go.mod +++ b/go/ql/test/query-tests/Security/CWE-643/go.mod @@ -10,5 +10,6 @@ require ( github.com/antchfx/xpath v1.1.5 github.com/go-xmlpath/xmlpath v0.0.0-20150820204837-860cbeca3ebc github.com/jbowtie/gokogiri v0.0.0-20190301021639-37f655d3078f + github.com/lestrrat-go/libxml2 v0.0.0-20231124114421-99c71026c2f5 github.com/santhosh-tekuri/xpathparser v1.0.0 ) diff --git a/go/ql/test/query-tests/Security/CWE-643/tst.go b/go/ql/test/query-tests/Security/CWE-643/tst.go index 0b2336d6eda..d0d0a604a74 100644 --- a/go/ql/test/query-tests/Security/CWE-643/tst.go +++ b/go/ql/test/query-tests/Security/CWE-643/tst.go @@ -10,6 +10,7 @@ package main //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xml Node //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xpath "" Compile //go:generate depstubber -vendor github.com/santhosh-tekuri/xpathparser "" Parse,MustParse +//go:generate depstubber -vendor github.com/lestrrat-go/libxml2/parser "" ParseString import ( "net/http" @@ -22,6 +23,7 @@ import ( "github.com/go-xmlpath/xmlpath" gokogiriXml "github.com/jbowtie/gokogiri/xml" gokogiriXpath "github.com/jbowtie/gokogiri/xpath" + "github.com/lestrrat-go/libxml2/parser" "github.com/santhosh-tekuri/xpathparser" ) @@ -185,3 +187,13 @@ func testJbowtieGokogiri(r *http.Request, n gokogiriXml.Node) { // OK: This is not flagged, since the creation of `xpath` is already flagged. _ = n.EvalXPathAsBoolean(xpath, nil) } + +func testLestratGoLibxml2(r *http.Request) { + r.ParseForm() + username := r.Form.Get("username") + + p := parser.New(parser.XMLParseNoEnt) + + // BAD: User input used directly in an XPath expression + _, _ = p.ParseString("//users/user[login/text()='" + username + "']/home_dir/text()") +} From 7a48152ea97d2dc977bc24c6e4b34398443e9d98 Mon Sep 17 00:00:00 2001 From: Mathew Payne Date: Tue, 12 Dec 2023 15:10:08 +0000 Subject: [PATCH 008/205] Add Go Stubs for LibXML2 --- .../test/query-tests/Security/CWE-643/go.mod | 15 ++++++++- .../github.com/lestrrat-go/libxml2/stub.go | 12 +++++++ .../Security/CWE-643/vendor/modules.txt | 33 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go diff --git a/go/ql/test/query-tests/Security/CWE-643/go.mod b/go/ql/test/query-tests/Security/CWE-643/go.mod index e33641a6fba..8f574e90cf5 100644 --- a/go/ql/test/query-tests/Security/CWE-643/go.mod +++ b/go/ql/test/query-tests/Security/CWE-643/go.mod @@ -1,6 +1,6 @@ module main -go 1.14 +go 1.21 require ( github.com/ChrisTrenkamp/goxpath v0.0.0-20190607011252-c5096ec8773d @@ -13,3 +13,16 @@ require ( github.com/lestrrat-go/libxml2 v0.0.0-20231124114421-99c71026c2f5 github.com/santhosh-tekuri/xpathparser v1.0.0 ) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 // indirect + gopkg.in/xmlpath.v1 v1.0.0-20140413065638-a146725ea6e7 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect + launchpad.net/xmlpath v0.0.0-20130614043138-000000000004 // indirect +) diff --git a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go new file mode 100644 index 00000000000..cd99cc3cebd --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go @@ -0,0 +1,12 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/lestrrat-go/libxml2, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/lestrrat-go/libxml2 (exports: ; functions: ParseString) + +// Package libxml2 is a stub of github.com/lestrrat-go/libxml2, generated by depstubber. +package libxml2 + +func ParseString(_ string, _ ...interface{}) (interface{}, error) { + return nil, nil +} diff --git a/go/ql/test/query-tests/Security/CWE-643/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-643/vendor/modules.txt index ce1e1188bf6..3f70fcb344d 100644 --- a/go/ql/test/query-tests/Security/CWE-643/vendor/modules.txt +++ b/go/ql/test/query-tests/Security/CWE-643/vendor/modules.txt @@ -19,6 +19,39 @@ github.com/go-xmlpath/xmlpath # github.com/jbowtie/gokogiri v0.0.0-20190301021639-37f655d3078f ## explicit github.com/jbowtie/gokogiri +# github.com/lestrrat-go/libxml2 v0.0.0-20231124114421-99c71026c2f5 +## explicit +github.com/lestrrat-go/libxml2 # github.com/santhosh-tekuri/xpathparser v1.0.0 ## explicit github.com/santhosh-tekuri/xpathparser +# github.com/davecgh/go-spew v1.1.1 +## explicit +github.com/davecgh/go-spew +# github.com/pkg/errors v0.9.1 +## explicit +github.com/pkg/errors +# github.com/pmezard/go-difflib v1.0.0 +## explicit +github.com/pmezard/go-difflib +# github.com/stretchr/objx v0.5.0 +## explicit +github.com/stretchr/objx +# github.com/stretchr/testify v1.8.4 +## explicit +github.com/stretchr/testify +# gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 +## explicit +gopkg.in/check.v1 +# gopkg.in/xmlpath.v1 v1.0.0-20140413065638-a146725ea6e7 +## explicit +gopkg.in/xmlpath.v1 +# gopkg.in/yaml.v3 v3.0.1 +## explicit +gopkg.in/yaml.v3 +# launchpad.net/gocheck v0.0.0-20140225173054-000000000087 +## explicit +launchpad.net/gocheck +# launchpad.net/xmlpath v0.0.0-20130614043138-000000000004 +## explicit +launchpad.net/xmlpath From e9bc5a54ea7152e82eb3b99a0579166eb26daa1a Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Tue, 12 Dec 2023 15:41:26 +0000 Subject: [PATCH 009/205] CPP: Add query for detecting invalid uses of temporary unique pointers. --- .../src/Security/CWE/CWE-416/Temporaries.qll | 90 ++++++++ .../CWE-416/UseOfStringAfterLifetimeEnds.ql | 76 +------ .../UseOfUniquePointerAfterLifetimeEnds.qhelp | 44 ++++ .../UseOfUniquePointerAfterLifetimeEnds.ql | 36 ++++ ...UseOfUniquePointerAfterLifetimeEndsBad.cpp | 10 + ...seOfUniquePointerAfterLifetimeEndsGood.cpp | 10 + ...eOfUniquePointerAfterLifetimeEnds.expected | 9 + .../UseOfUniquePointerAfterLifetimeEnds.qlref | 1 + .../UseOfUniquePtrAfterLifetimeEnds/test.cpp | 203 ++++++++++++++++++ 9 files changed, 404 insertions(+), 75 deletions(-) create mode 100644 cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll create mode 100644 cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.qhelp create mode 100644 cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql create mode 100644 cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsBad.cpp create mode 100644 cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsGood.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp diff --git a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll new file mode 100644 index 00000000000..56d742b31d7 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll @@ -0,0 +1,90 @@ +import cpp +import semmle.code.cpp.models.implementations.StdContainer + +/** + * Holds if `e` will be consumed by its parent as a glvalue and does not have + * an lvalue-to-rvalue conversion. This means that it will be materialized into + * a temporary object. + */ +predicate isTemporary(Expr e) { + e instanceof TemporaryObjectExpr + or + e.isPRValueCategory() and + e.getUnspecifiedType() instanceof Class and + not e.hasLValueToRValueConversion() +} + +/** Holds if `e` is written to a container. */ +predicate isStoredInContainer(Expr e) { + exists(StdSequenceContainerInsert insert, Call call, int index | + call = insert.getACallToThisFunction() and + index = insert.getAValueTypeParameterIndex() and + call.getArgument(index) = e + ) + or + exists(StdSequenceContainerPush push, Call call, int index | + call = push.getACallToThisFunction() and + index = push.getAValueTypeParameterIndex() and + call.getArgument(index) = e + ) + or + exists(StdSequenceEmplace emplace, Call call, int index | + call = emplace.getACallToThisFunction() and + index = emplace.getAValueTypeParameterIndex() and + call.getArgument(index) = e + ) + or + exists(StdSequenceEmplaceBack emplaceBack, Call call, int index | + call = emplaceBack.getACallToThisFunction() and + index = emplaceBack.getAValueTypeParameterIndex() and + call.getArgument(index) = e + ) +} + +/** + * Holds if the value of `e` outlives the enclosing full expression. For + * example, because the value is stored in a local variable. + */ +predicate outlivesFullExpr(Expr e) { + not e.getConversion*().hasLValueToRValueConversion() and + ( + any(Assignment assign).getRValue() = e + or + any(Variable v).getInitializer().getExpr() = e + or + any(ReturnStmt ret).getExpr() = e + or + exists(ConditionalExpr cond | + outlivesFullExpr(cond) and + [cond.getThen(), cond.getElse()] = e + ) + or + exists(BinaryOperation bin | + outlivesFullExpr(bin) and + bin.getAnOperand() = e and + not bin instanceof ComparisonOperation + ) + or + exists(PointerFieldAccess fa | + outlivesFullExpr(fa) and + fa.getQualifier() = e + ) + or + exists(AddressOfExpr ao | + outlivesFullExpr(ao) and + ao.getOperand() = e + ) + or + exists(ClassAggregateLiteral aggr | + outlivesFullExpr(aggr) and + aggr.getAFieldExpr(_) = e + ) + or + exists(ArrayAggregateLiteral aggr | + outlivesFullExpr(aggr) and + aggr.getAnElementExpr(_) = e + ) + or + isStoredInContainer(e) + ) +} diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql b/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql index 5fd75150167..7d776280f91 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql @@ -14,81 +14,7 @@ import cpp import semmle.code.cpp.models.implementations.StdString -import semmle.code.cpp.models.implementations.StdContainer - -/** - * Holds if `e` will be consumed by its parent as a glvalue and does not have - * an lvalue-to-rvalue conversion. This means that it will be materialized into - * a temporary object. - */ -predicate isTemporary(Expr e) { - e instanceof TemporaryObjectExpr - or - e.isPRValueCategory() and - e.getUnspecifiedType() instanceof Class and - not e.hasLValueToRValueConversion() -} - -/** Holds if `e` is written to a container. */ -predicate isStoredInContainer(Expr e) { - exists(StdSequenceContainerInsert insert, Call call, int index | - call = insert.getACallToThisFunction() and - index = insert.getAValueTypeParameterIndex() and - call.getArgument(index) = e - ) - or - exists(StdSequenceContainerPush push, Call call, int index | - call = push.getACallToThisFunction() and - index = push.getAValueTypeParameterIndex() and - call.getArgument(index) = e - ) - or - exists(StdSequenceEmplace emplace, Call call, int index | - call = emplace.getACallToThisFunction() and - index = emplace.getAValueTypeParameterIndex() and - call.getArgument(index) = e - ) - or - exists(StdSequenceEmplaceBack emplaceBack, Call call, int index | - call = emplaceBack.getACallToThisFunction() and - index = emplaceBack.getAValueTypeParameterIndex() and - call.getArgument(index) = e - ) -} - -/** - * Holds if the value of `e` outlives the enclosing full expression. For - * example, because the value is stored in a local variable. - */ -predicate outlivesFullExpr(Expr e) { - any(Assignment assign).getRValue() = e - or - any(Variable v).getInitializer().getExpr() = e - or - any(ReturnStmt ret).getExpr() = e - or - exists(ConditionalExpr cond | - outlivesFullExpr(cond) and - [cond.getThen(), cond.getElse()] = e - ) - or - exists(BinaryOperation bin | - outlivesFullExpr(bin) and - bin.getAnOperand() = e - ) - or - exists(ClassAggregateLiteral aggr | - outlivesFullExpr(aggr) and - aggr.getAFieldExpr(_) = e - ) - or - exists(ArrayAggregateLiteral aggr | - outlivesFullExpr(aggr) and - aggr.getAnElementExpr(_) = e - ) - or - isStoredInContainer(e) -} +import Temporaries from Call c where diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.qhelp b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.qhelp new file mode 100644 index 00000000000..675defdfc67 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.qhelp @@ -0,0 +1,44 @@ + + + + +

    Calling get on a std::unique_ptr object returns a pointer to the underlying allocations. +When the std::unique_ptr object is destroyed, the pointer returned by get is no +longer valid. If the pointer is used after the std::unique_ptr object is destroyed, then the behavior is undefined. +

    +
    + + +

    +Ensure that the pointer returned by get does not outlive the underlying std::unique_ptr object. +

    +
    + + +

    +The following example gets a std::unique_ptr object, and then converts the resulting unique pointer to a +pointer using get so that it can be passed to the work function. + +However, the std::unique_ptr object is destroyed as soon as the call +to get returns. This means that work is given a pointer to invalid memory. +

    + + + +

    +The following example fixes the above code by ensuring that the pointer returned by the call to get does +not outlive the underlying std::unique_ptr objects. This ensures that the pointer passed to work +points to valid memory. +

    + + + +
    + + +
  • MEM50-CPP. Do not access freed memory.
  • + +
    +
    diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql new file mode 100644 index 00000000000..4edb9b027d3 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql @@ -0,0 +1,36 @@ +/** + * @name Use of unique pointer after lifetime ends + * @description If a reference to the contents of a unique pointer outlives the underlying object it may lead to unexpected behavior. + * @kind problem + * @precision high + * @id cpp/use-of-uniwue-pointer-after-lifetime-ends + * @problem.severity warning + * @security-severity 8.8 + * @tags reliability + * security + * external/cwe/cwe-416 + * external/cwe/cwe-664 + */ + +import cpp +import semmle.code.cpp.models.interfaces.PointerWrapper +import Temporaries + +predicate isUniquePointerDerefFunction(Function f) { + exists(PointerWrapper wrapper | + f = wrapper.getAnUnwrapperFunction() and + // We only want unique pointers as the memory behind share pointers may still be + // alive after the shared pointer is destroyed. + wrapper.(Class).hasQualifiedName(["std", "bsl"], "unique_ptr") + ) +} + +from Call c +where + outlivesFullExpr(c) and + not c.isFromUninstantiatedTemplate(_) and + isUniquePointerDerefFunction(c.getTarget()) and + isTemporary(c.getQualifier().getFullyConverted()) +select c, + "The underlying unique pointer object is destroyed after the call to '" + c.getTarget() + + "' returns." diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsBad.cpp b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsBad.cpp new file mode 100644 index 00000000000..b706f1fbb5f --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsBad.cpp @@ -0,0 +1,10 @@ +#include +std::unique_ptr getUniquePointer(); +void work(const T*); + +// BAD: the unique pointer is deallocated when `get` returns. So `work` +// is given a pointer to invalid memory. +void work_with_unique_ptr_bad() { + const T* combined_string = getUniquePointer().get(); + work(combined_string); +} \ No newline at end of file diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsGood.cpp b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsGood.cpp new file mode 100644 index 00000000000..eee39bd3582 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEndsGood.cpp @@ -0,0 +1,10 @@ +#include +std::unique_ptr getUniquePointer(); +void work(const T*); + +// GOOD: the unique pointer outlives the call to `work`. So the pointer +// obtainted from `get` is valid. +void work_with_unique_ptr_good() { + auto combined_string = getUniquePointer(); + work(combined_string.get()); +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected new file mode 100644 index 00000000000..8bd30062b57 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected @@ -0,0 +1,9 @@ +| test.cpp:156:15:156:15 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | +| test.cpp:157:31:157:33 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:159:32:159:32 | call to operator-> | The underlying unique pointer object is destroyed after the call to 'operator->' returns. | +| test.cpp:160:35:160:37 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:161:44:161:46 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:163:25:163:27 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:172:33:172:35 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:174:32:174:34 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | +| test.cpp:176:11:176:11 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.qlref new file mode 100644 index 00000000000..4c613e5c5ac --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp new file mode 100644 index 00000000000..c1d55a28c17 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp @@ -0,0 +1,203 @@ +typedef unsigned long size_t; + +namespace std { + template struct remove_reference { typedef T type; }; + + template struct remove_reference { typedef T type; }; + + template struct remove_reference { typedef T type; }; + + template using remove_reference_t = typename remove_reference::type; + + template< class T > std::remove_reference_t&& move( T&& t ); + + template< class T > struct default_delete; + + template struct add_lvalue_reference { typedef T& type; }; +} + +// --- iterator --- + +namespace std { + template struct remove_const { typedef T type; }; + + template struct remove_const { typedef T type; }; + + // `remove_const_t` removes any `const` specifier from `T` + template using remove_const_t = typename remove_const::type; + + struct ptrdiff_t; + + template struct iterator_traits; + + template + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator > const &other); // non-const -> const conversion constructor + + iterator &operator++(); + iterator operator++(int); + iterator &operator--(); + iterator operator--(int); + bool operator==(iterator other) const; + bool operator!=(iterator other) const; + reference_type operator*() const; + pointer_type operator->() const; + iterator operator+(int); + iterator operator-(int); + iterator &operator+=(int); + iterator &operator-=(int); + int operator-(iterator); + reference_type operator[](int); + }; + + struct input_iterator_tag {}; + struct forward_iterator_tag : public input_iterator_tag {}; + struct bidirectional_iterator_tag : public forward_iterator_tag {}; + struct random_access_iterator_tag : public bidirectional_iterator_tag {}; +} + +// --- string --- + +namespace std +{ + + using nullptr_t = decltype(nullptr); + + template> class unique_ptr { + public: + using pointer = T*; + using element_type = T; + using deleter_type = Deleter; + + constexpr unique_ptr() noexcept; + constexpr unique_ptr(nullptr_t) noexcept; + explicit unique_ptr(pointer p) noexcept; + unique_ptr(unique_ptr&& u) noexcept; + template unique_ptr(unique_ptr&& u) noexcept; + unique_ptr(const unique_ptr&) = delete; + + unique_ptr& operator=(unique_ptr&& u) noexcept; + unique_ptr& operator=(std::nullptr_t) noexcept; + template unique_ptr& operator=(unique_ptr&& u) noexcept; + + ~unique_ptr(); + + pointer get() const noexcept; + deleter_type& get_deleter() noexcept; + const deleter_type& get_deleter() const noexcept; + explicit operator bool() const noexcept; + typename std::add_lvalue_reference::type operator*() const; + pointer operator->() const noexcept; + pointer release() noexcept; + void reset(pointer p = pointer()) noexcept; + void swap(unique_ptr& u) noexcept; + }; +} + +// --- vector --- + +namespace std { + template class allocator { + public: + allocator() throw(); + typedef size_t size_type; + }; + + template> + class vector { + public: + using value_type = T; + using reference = value_type&; + using const_reference = const value_type&; + using size_type = unsigned int; + using iterator = std::iterator; + using const_iterator = std::iterator; + + vector() noexcept(noexcept(Allocator())); + explicit vector(const Allocator&) noexcept; + explicit vector(size_type n, const Allocator& = Allocator()); + vector(size_type n, const T& value, const Allocator& = Allocator()); + template vector(InputIterator first, InputIterator last, const Allocator& = Allocator()); + ~vector(); + + void push_back(const T& x); + void push_back(T&& x); + + iterator insert(const_iterator position, const T& x); + iterator insert(const_iterator position, T&& x); + iterator insert(const_iterator position, size_type n, const T& x); + template iterator insert(const_iterator position, InputIterator first, InputIterator last); + + template iterator emplace (const_iterator position, Args&&... args); + template void emplace_back (Args&&... args); + }; +} + +struct S { + const char* s; +}; + +void call(S*); + +void call_by_value(S); +void call_by_ref(S&); + +std::unique_ptr get_unique_ptr(); + +const S* test1(bool b1, bool b2) { + auto s1 = *get_unique_ptr(); // GOOD + auto s1a = &*get_unique_ptr(); // BAD + auto s1b = get_unique_ptr().get(); // BAD + auto s1c = get_unique_ptr()->s; // GOOD + auto s1d = &(get_unique_ptr()->s); // BAD + auto s2 = b1 ? get_unique_ptr().get() : nullptr; // BAD + auto s3 = b2 ? nullptr :get_unique_ptr().get(); // BAD + const S* s4; + s4 = get_unique_ptr().get(); // BAD + + call(get_unique_ptr().get()); // GOOD + call(b1 ? get_unique_ptr().get() : nullptr); // GOOD + call(b1 ? (b2 ? nullptr : get_unique_ptr().get()) : nullptr); // GOOD + call_by_value(*get_unique_ptr()); // GOOD + call_by_ref(*get_unique_ptr()); // GOOD + + std::vector v1; + v1.push_back(get_unique_ptr().get()); // BAD + + S* s5[] = { get_unique_ptr().get() }; // BAD + + return &*get_unique_ptr(); // BAD +} + +void test2(bool b1, bool b2) { + + std::unique_ptr s = get_unique_ptr(); + auto s1 = s.get(); // GOOD + auto s2 = b1 ? s.get() : nullptr; // GOOD + auto s3 = b2 ? nullptr : s.get(); // GOOD + const S* s4; + s4 = s.get(); // GOOD + + std::unique_ptr& sRef = s; + + auto s5 = sRef.get(); // GOOD + auto s6 = b1 ? sRef.get() : nullptr; // GOOD + auto s7 = b2 ? nullptr : sRef.get(); // GOOD + const S* s8; + s8 = sRef.get(); // GOOD + + std::unique_ptr&& sRefRef = get_unique_ptr(); + + auto s9 = sRefRef.get(); // GOOD + auto s10 = b1 ? sRefRef.get() : nullptr; // GOOD + auto s11 = b2 ? nullptr : sRefRef.get(); // GOOD + const S* s12; + s12 = sRefRef.get(); // GOOD +} \ No newline at end of file From 136a77b86efc9a630dee7903fd7a0c193ffc40db Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Tue, 12 Dec 2023 16:47:55 +0000 Subject: [PATCH 010/205] CPP: Add change note for cpp/use-of-uniwue-pointer-after-lifetime-ends --- .../2023-12-12-use-of-unique-pointer-after-lifetime-ends.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md diff --git a/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md b/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md new file mode 100644 index 00000000000..0c60592b44a --- /dev/null +++ b/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `cpp/use-of-uniwue-pointer-after-lifetime-ends`, to detect uses of the contents unique pointers that will be destroyed immediately. \ No newline at end of file From bd8f35bef7020510abd26d28df4816843613dece Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 5 Dec 2023 16:49:36 +0100 Subject: [PATCH 011/205] Java: Fix FPs in Missing certificate pinning Local URIs should never require pinning --- .../AndroidCertificatePinningQuery.qll | 14 +++------- ...2-android-certificate-pinning-precision.md | 4 +++ .../Test1/Test.java | 16 ++++++++++-- .../Test2/Test.java | 16 ++++++++++-- .../Test3/Test.java | 25 +++++++++++------- .../Test4/Test.java | 9 ++++--- .../Test5/Test.java | 26 +++++++++++++++---- 7 files changed, 77 insertions(+), 33 deletions(-) create mode 100644 java/ql/src/change-notes/2023-12-12-android-certificate-pinning-precision.md diff --git a/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll index 4c42e5a3903..423df068544 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidCertificatePinningQuery.qll @@ -108,9 +108,9 @@ private class MissingPinningSink extends DataFlow::Node { /** Configuration for finding uses of non trusted URLs. */ private module UntrustedUrlConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { - trustedDomain(_) and exists(string lit | lit = node.asExpr().(CompileTimeConstantExpr).getStringValue() | lit.matches("%://%") and // it's a URL + not lit.regexpMatch("^(classpath|file|jar):.*") and // discard non-network URIs not exists(string dom | trustedDomain(dom) and lit.matches("%" + dom + "%")) ) } @@ -121,16 +121,10 @@ private module UntrustedUrlConfig implements DataFlow::ConfigSig { private module UntrustedUrlFlow = TaintTracking::Global; /** Holds if `node` is a network communication call for which certificate pinning is not implemented. */ -predicate missingPinning(DataFlow::Node node, string domain) { +predicate missingPinning(MissingPinningSink node, string domain) { isAndroid() and - node instanceof MissingPinningSink and - ( - not trustedDomain(_) and domain = "" - or - exists(DataFlow::Node src | - UntrustedUrlFlow::flow(src, node) and - domain = getDomain(src.asExpr()) - ) + exists(DataFlow::Node src | UntrustedUrlFlow::flow(src, node) | + if trustedDomain(_) then domain = getDomain(src.asExpr()) else domain = "" ) } diff --git a/java/ql/src/change-notes/2023-12-12-android-certificate-pinning-precision.md b/java/ql/src/change-notes/2023-12-12-android-certificate-pinning-precision.md new file mode 100644 index 00000000000..ae3742e9f83 --- /dev/null +++ b/java/ql/src/change-notes/2023-12-12-android-certificate-pinning-precision.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `java/android/missing-certificate-pinning` should no longer alert about requests pointing to the local filesystem. diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/Test.java b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/Test.java index ed141d80521..ac40be7fb39 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/Test.java +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/Test.java @@ -1,7 +1,7 @@ import java.net.URL; import java.net.URLConnection; -class Test{ +class Test { URLConnection test1() throws Exception { return new URL("https://good.example.com").openConnection(); } @@ -9,4 +9,16 @@ class Test{ URLConnection test2() throws Exception { return new URL("https://bad.example.com").openConnection(); // $hasUntrustedResult } -} \ No newline at end of file + + URLConnection test3() throws Exception { + return new URL("classpath:example/directory/test.class").openConnection(); + } + + URLConnection test4() throws Exception { + return new URL("file:///example/file").openConnection(); + } + + URLConnection test5() throws Exception { + return new URL("jar:file:///C:/example/test.jar!/test.xml").openConnection(); + } +} diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/Test.java b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/Test.java index 9f68c503b46..05d58137b9a 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/Test.java +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/Test.java @@ -1,8 +1,20 @@ import java.net.URL; import java.net.URLConnection; -class Test{ +class Test { URLConnection test2() throws Exception { return new URL("https://example.com").openConnection(); // $hasNoTrustedResult } -} \ No newline at end of file + + URLConnection test3() throws Exception { + return new URL("classpath:example/directory/test.class").openConnection(); + } + + URLConnection test4() throws Exception { + return new URL("file:///example/file").openConnection(); + } + + URLConnection test5() throws Exception { + return new URL("jar:file:///C:/example/test.jar!/test.xml").openConnection(); + } +} diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/Test.java b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/Test.java index 6a8ff8ed9d8..22f8d68919e 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/Test.java +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/Test.java @@ -2,16 +2,21 @@ import okhttp3.OkHttpClient; import okhttp3.CertificatePinner; import okhttp3.Request; -class Test{ +class Test { void test1() throws Exception { - CertificatePinner certificatePinner = new CertificatePinner.Builder() - .add("good.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") - .build(); - OkHttpClient client = new OkHttpClient.Builder() - .certificatePinner(certificatePinner) - .build(); + CertificatePinner certificatePinner = new CertificatePinner.Builder() + .add("good.example.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") + .build(); + OkHttpClient client = + new OkHttpClient.Builder().certificatePinner(certificatePinner).build(); - client.newCall(new Request.Builder().url("https://good.example.com").build()).execute(); - client.newCall(new Request.Builder().url("https://bad.example.com").build()).execute(); // $hasUntrustedResult + client.newCall(new Request.Builder().url("https://good.example.com").build()).execute(); + client.newCall(new Request.Builder().url("https://bad.example.com").build()).execute(); // $hasUntrustedResult + client.newCall(new Request.Builder().url("classpath:example/directory/test.class").build()) + .execute(); + client.newCall(new Request.Builder().url("file:///example/file").build()).execute(); + client.newCall( + new Request.Builder().url("jar:file:///C:/example/test.jar!/test.xml").build()) + .execute(); } -} \ No newline at end of file +} diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/Test.java b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/Test.java index fd745a0ca1c..b3c6ef44786 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/Test.java +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/Test.java @@ -8,19 +8,20 @@ import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import android.content.res.Resources; -class Test{ +class Test { void test1(Resources resources) throws Exception { KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(resources.openRawResource(R.raw.cert), null); - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + TrustManagerFactory tmf = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); URL url = new URL("http://www.example.com/"); - HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); + HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(sslContext.getSocketFactory()); } @@ -29,4 +30,4 @@ class Test{ URL url = new URL("http://www.example.com/"); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); // $hasNoTrustedResult } -} \ No newline at end of file +} diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/Test.java b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/Test.java index 00aa99775c1..159296e3196 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/Test.java +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/Test.java @@ -9,12 +9,13 @@ import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import android.content.res.Resources; -class Test{ +class Test { void init(Resources resources) throws Exception { KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(resources.openRawResource(R.raw.cert), null); - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + TrustManagerFactory tmf = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); @@ -25,11 +26,26 @@ class Test{ URLConnection test1() throws Exception { URL url = new URL("http://www.example.com/"); - return url.openConnection(); + return url.openConnection(); } InputStream test2() throws Exception { URL url = new URL("http://www.example.com/"); - return url.openStream(); + return url.openStream(); } -} \ No newline at end of file + + InputStream test3() throws Exception { + URL url = new URL("classpath:example/directory/test.class"); + return url.openStream(); + } + + InputStream test4() throws Exception { + URL url = new URL("file:///example/file"); + return url.openStream(); + } + + InputStream test5() throws Exception { + URL url = new URL("jar:file:///C:/example/test.jar!/test.xml"); + return url.openStream(); + } +} From 236a6a1bceb63aab6fa2335817d535ee66a49aac Mon Sep 17 00:00:00 2001 From: Alexander Eyers-Taylor Date: Tue, 12 Dec 2023 17:22:46 +0000 Subject: [PATCH 012/205] CPP: Apply suggestions from code review Fix spelling in query id Co-authored-by: Mathias Vorreiter Pedersen --- .../Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql | 2 +- .../2023-12-12-use-of-unique-pointer-after-lifetime-ends.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql index 4edb9b027d3..645d69c1398 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql @@ -3,7 +3,7 @@ * @description If a reference to the contents of a unique pointer outlives the underlying object it may lead to unexpected behavior. * @kind problem * @precision high - * @id cpp/use-of-uniwue-pointer-after-lifetime-ends + * @id cpp/use-of-unique-pointer-after-lifetime-ends * @problem.severity warning * @security-severity 8.8 * @tags reliability diff --git a/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md b/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md index 0c60592b44a..a74017aa6a1 100644 --- a/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md +++ b/cpp/ql/src/change-notes/2023-12-12-use-of-unique-pointer-after-lifetime-ends.md @@ -1,4 +1,4 @@ --- category: newQuery --- -* Added a new query, `cpp/use-of-uniwue-pointer-after-lifetime-ends`, to detect uses of the contents unique pointers that will be destroyed immediately. \ No newline at end of file +* Added a new query, `cpp/use-of-unique-pointer-after-lifetime-ends`, to detect uses of the contents unique pointers that will be destroyed immediately. \ No newline at end of file From e1b8fabf7fcee8f35c72bd08e5d70205322c00f1 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Wed, 13 Dec 2023 13:50:34 +0800 Subject: [PATCH 013/205] Use global instead of local taint tracking. --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 422389043f4..30fbe5bbce9 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -15,7 +15,7 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking - + ControlFlowNode getControlFlowNodeSuccessor(ControlFlowNode node) { result = node.getASuccessor() @@ -57,18 +57,34 @@ MethodAccess getDangerousReachableMethodAccess(MethodAccess ma) ) )) } - + +module SignaturePackageConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + exists(MethodAccess maCheckSignatures | + maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and + maCheckSignatures.getCallee().getName() = "checkSignatures" and + source.asExpr() = maCheckSignatures.getArgument(0) + ) + } + + predicate isSink(DataFlow::Node sink) { + exists (MethodAccess maCreatePackageContext | + (maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" or + maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.Context") and + maCreatePackageContext.getCallee().getName() = "createPackageContext" and + sink.asExpr() = maCreatePackageContext.getArgument(0) + ) + } +} + +module SigPkgCfg = TaintTracking::Global; + predicate isSignaturesChecked(MethodAccess maCreatePackageContext) { - exists( - MethodAccess maCheckSignatures | - maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and - maCheckSignatures.getCallee().getName() = "checkSignatures" and - //maCheckSignatures.getArgument(0).toString() = maCreatePackageContext.getArgument(0).toString() - TaintTracking::localTaint( - DataFlow::exprNode(maCheckSignatures.getArgument(0)), - DataFlow::exprNode(maCreatePackageContext.getArgument(0))) - ) + exists(DataFlow::Node source, DataFlow::Node sink | + SigPkgCfg::flow(source, sink) and + sink.asExpr() = maCreatePackageContext.getArgument(0) + ) } from From 6db55cd12f57d2c6b76190193a1d3d46473f4ccc Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 27 Nov 2023 21:02:12 +0100 Subject: [PATCH 014/205] Python: add missing annotation --- python/ql/test/experimental/dataflow/variable-capture/in.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/test/experimental/dataflow/variable-capture/in.py b/python/ql/test/experimental/dataflow/variable-capture/in.py index fffedfb1e77..3d2266a8fb1 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/in.py +++ b/python/ql/test/experimental/dataflow/variable-capture/in.py @@ -78,7 +78,7 @@ def inLocal(): m() captureIn2() - captureIn3 = lambda arg: SINK(tainted) + captureIn3 = lambda arg: SINK(tainted) #$ MISSING:captured captureIn3("") def captureIn1NotCalled(): From c054ba6a97f3ea109f8302fbf268b80fd5774be4 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 11 Oct 2023 16:28:57 +0200 Subject: [PATCH 015/205] python: instantiate module for variable capture This provides variable capture in standard situations: - nested functions - lambdas There are some deficiencies: - we do not yet handle objects capturing variables. - we do not handle variables captured via the `nonlocal` keyword. This should be solved at the AST level, though, and then it should "just work". There are still inconsistencies in the case where a `SynthesizedCaptureNode` has a comprehensions as its enclosing callable. In this case, `TFunction(cn.getEnclosingCallable())` is not defined and so getEnclosingCallable does not exist for the `CaptureNode`. --- .../new/internal/DataFlowDispatch.qll | 69 ++++++ .../dataflow/new/internal/DataFlowPrivate.qll | 207 +++++++++++++++++- .../dataflow/new/internal/DataFlowPublic.qll | 45 +++- .../dataflow/variable-capture/by_value.py | 4 +- .../dataflow-capture-consistency.expected | 17 ++ .../dataflow-capture-consistency.ql | 2 + .../dataflow/variable-capture/dict.py | 8 +- .../dataflow/variable-capture/global.py | 4 +- .../dataflow/variable-capture/in.py | 12 +- 9 files changed, 352 insertions(+), 16 deletions(-) create mode 100644 python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected create mode 100644 python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 6e2a462cc5a..d74926cf7ff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -43,6 +43,7 @@ private import semmle.python.dataflow.new.internal.TypeTracker::CallGraphConstru newtype TParameterPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfParameterPosition() or + TLambdaSelfParameterPosition() or TPositionalParameterPosition(int index) { index = any(Parameter p).getPosition() or @@ -79,6 +80,9 @@ class ParameterPosition extends TParameterPosition { /** Holds if this position represents a `self`/`cls` parameter. */ predicate isSelf() { this = TSelfParameterPosition() } + /** Holds if this position represents a reference to a lambda itself. Only used for tracking flow through captured variables. */ + predicate isLambdaSelf() { this = TLambdaSelfParameterPosition() } + /** Holds if this position represents a positional parameter at (0-based) `index`. */ predicate isPositional(int index) { this = TPositionalParameterPosition(index) } @@ -110,6 +114,8 @@ class ParameterPosition extends TParameterPosition { string toString() { this.isSelf() and result = "self" or + this.isLambdaSelf() and result = "lambda self" + or exists(int index | this.isPositional(index) and result = "position " + index) or exists(string name | this.isKeyword(name) and result = "keyword " + name) @@ -130,6 +136,7 @@ class ParameterPosition extends TParameterPosition { newtype TArgumentPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfArgumentPosition() or + TLambdaSelfArgumentPosition() or TPositionalArgumentPosition(int index) { exists(any(CallNode c).getArg(index)) or @@ -154,6 +161,9 @@ class ArgumentPosition extends TArgumentPosition { /** Holds if this position represents a `self`/`cls` argument. */ predicate isSelf() { this = TSelfArgumentPosition() } + /** Holds if this position represents a lambda `self` argument. Only used for tracking flow through captured variables. */ + predicate isLambdaSelf() { this = TLambdaSelfArgumentPosition() } + /** Holds if this position represents a positional argument at (0-based) `index`. */ predicate isPositional(int index) { this = TPositionalArgumentPosition(index) } @@ -184,6 +194,8 @@ class ArgumentPosition extends TArgumentPosition { predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos.isSelf() and apos.isSelf() or + ppos.isLambdaSelf() and apos.isLambdaSelf() + or exists(int index | ppos.isPositional(index) and apos.isPositional(index)) or exists(string name | ppos.isKeyword(name) and apos.isKeyword(name)) @@ -1507,6 +1519,36 @@ abstract class ParameterNodeImpl extends Node { } } +/** + * The value of a lambda itself at function entry, viewed as a node in a data + * flow graph. + * + * This is used for tracking flow through captured variables, and we use a + * separate node and parameter/argument positions in order to distinguish + * "lambda self" from "normal self", as lambdas may also access outer `self` + * variables (through variable capture). + */ +class LambdaSelfReferenceNode extends ParameterNodeImpl, TLambdaSelfReferenceNode { + private Function callable; + + LambdaSelfReferenceNode() { this = TLambdaSelfReferenceNode(callable) } + + final Function getCallable() { result = callable } + + override Parameter getParameter() { none() } + + override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { + c = TFunction(callable) and + pos.isLambdaSelf() + } + + override Scope getScope() { result = callable } + + override Location getLocation() { result = callable.getLocation() } + + override string toString() { result = "lambda self in " + callable } +} + /** A parameter for a library callable with a flow summary. */ class SummaryParameterNode extends ParameterNodeImpl, FlowSummaryNode { SummaryParameterNode() { @@ -1578,6 +1620,33 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl override Node getPreUpdateNode() { result = pre } } +private class CapturePostUpdateNode extends PostUpdateNodeImpl, CaptureNode { + private CaptureNode pre; + + CapturePostUpdateNode() { + VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), + pre.getSynthesizedCaptureNode()) + } + + override Node getPreUpdateNode() { result = pre } +} + +class CaptureArgumentNode extends CfgNode, ArgumentNode { + CallNode callNode; + + CaptureArgumentNode() { + this.getNode() = callNode.getFunction() and + exists(Function target | resolveCall(callNode, target, _) | + target = any(VariableCapture::CapturedVariable v).getACapturingScope() + ) + } + + override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { + callNode = call.getNode() and + pos.isLambdaSelf() + } +} + /** Gets a viable run-time target for the call `call`. */ DataFlowCallable viableCallable(DataFlowCall call) { call instanceof ExtractedDataFlowCall and 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 839f147411e..cbc40219050 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -378,6 +378,193 @@ module LocalFlow { } } +/** Provides logic related to captured variables. */ +module VariableCapture { + private import codeql.dataflow.VariableCapture as Shared + + class ExprCfgNode extends ControlFlowNode { + ExprCfgNode() { isExpressionNode(this) } + } + + private predicate closureFlowStep(ExprCfgNode e1, ExprCfgNode e2) { + // simpleAstFlowStep(e1, e2) + // or + exists(SsaVariable def | + def.getAUse() = e2 and + def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = e1 + ) + } + + private module CaptureInput implements Shared::InputSig { + private import python as P + + class BasicBlock extends P::BasicBlock { + Callable getEnclosingCallable() { result = this.getScope() } + + // TODO: check that this gives useful results + Location getLocation() { result = super.getNode(0).getLocation() } + } + + BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { + result = bb.getImmediateDominator() + } + + BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } + + class CapturedVariable extends LocalVariable { + Function f; + + CapturedVariable() { + this.getScope() = f and + this.getAnAccess().getScope() != f + } + + Callable getCallable() { result = f } + + Location getLocation() { result = f.getLocation() } + + /** Gets a scope that captures this variable. */ + Scope getACapturingScope() { + result = this.getAnAccess().getScope().getScope*() and + result.getScope+() = f + } + } + + class CapturedParameter extends CapturedVariable { + CapturedParameter() { this.isParameter() } + + ControlFlowNode getCfgNode() { result.getNode().(Parameter) = this.getAnAccess() } + } + + class Expr extends ExprCfgNode { + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + } + + class VariableWrite extends ControlFlowNode { + CapturedVariable v; + + VariableWrite() { this = v.getAStore().getAFlowNode() } + + CapturedVariable getVariable() { result = v } + + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + } + + class VariableRead extends Expr { + CapturedVariable v; + + VariableRead() { this = v.getALoad().getAFlowNode() } + + CapturedVariable getVariable() { result = v } + } + + class ClosureExpr extends Expr { + ClosureExpr() { + this.getNode() instanceof CallableExpr + or + this.getNode() instanceof Comp + } + + predicate hasBody(Callable body) { + body = this.getNode().(CallableExpr).getInnerScope() + or + body = this.getNode().(Comp).getFunction() + } + + predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } + } + + class Callable extends Scope { + predicate isConstructor() { none() } + } + } + + class CapturedVariable = CaptureInput::CapturedVariable; + + class ClosureExpr = CaptureInput::ClosureExpr; + + module Flow = Shared::Flow; + + private Flow::ClosureNode asClosureNode(Node n) { + result = n.(CaptureNode).getSynthesizedCaptureNode() + or + result.(Flow::ExprNode).getExpr() = n.(CfgNode).getNode() + or + result.(Flow::VariableWriteSourceNode).getVariableWrite() = n.(CfgNode).getNode() + or + result.(Flow::ExprPostUpdateNode).getExpr() = + n.(PostUpdateNode).getPreUpdateNode().(CfgNode).getNode() + or + result.(Flow::ParameterNode).getParameter().getCfgNode() = n.(CfgNode).getNode() + or + result.(Flow::ThisParameterNode).getCallable() = n.(LambdaSelfReferenceNode).getCallable() + } + + predicate storeStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { + Flow::storeStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) + } + + predicate readStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { + Flow::readStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) + } + + predicate valueStep(Node nodeFrom, Node nodeTo) { + Flow::localFlowStep(asClosureNode(nodeFrom), asClosureNode(nodeTo)) + } + + // Note: Learn from JS, https://github.com/github/codeql/pull/14412 + // - JS: Capture flow + // - JS: Disallow consecutive captured contents + private module Debug { + predicate flowStoreStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, + Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::storeStep(closureNodeFrom, v, closureNodeTo) + } + + predicate unmappedFlowStoreStep( + Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo + ) { + Flow::storeStep(closureNodeFrom, v, closureNodeTo) and + not flowStoreStep(_, closureNodeFrom, v, closureNodeTo, _) + } + + predicate flowReadStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, + Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::readStep(closureNodeFrom, v, closureNodeTo) + } + + predicate unmappedFlowReadStep( + Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo + ) { + Flow::readStep(closureNodeFrom, v, closureNodeTo) and + not flowReadStep(_, closureNodeFrom, v, closureNodeTo, _) + } + + predicate flowValueStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::localFlowStep(closureNodeFrom, closureNodeTo) + } + + predicate unmappedFlowValueStep( + Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo + ) { + Flow::localFlowStep(closureNodeFrom, closureNodeTo) and + not flowValueStep(_, closureNodeFrom, closureNodeTo, _) + } + } +} + //-------- // Local flow //-------- @@ -471,6 +658,8 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { simpleLocalFlowStepForTypetracking(nodeFrom, nodeTo) or summaryFlowSteps(nodeFrom, nodeTo) + or + variableCaptureFlowStep(nodeFrom, nodeTo) } /** @@ -494,6 +683,11 @@ predicate summaryFlowSteps(Node nodeFrom, Node nodeTo) { IncludePostUpdateFlow::step/2>::step(nodeFrom, nodeTo) } +predicate variableCaptureFlowStep(Node nodeFrom, Node nodeTo) { + IncludePostUpdateFlow::step/2>::step(nodeFrom, + nodeTo) +} + /** `ModuleVariable`s are accessed via jump steps at runtime. */ predicate runtimeJumpStep(Node nodeFrom, Node nodeTo) { // Module variable read @@ -557,7 +751,7 @@ predicate compatibleTypes(DataFlowType t1, DataFlowType t2) { any() } predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { none() } -predicate localMustFlowStep(Node node1, Node node2) { none() } +predicate localMustFlowStep(Node nodeFrom, Node nodeTo) { none() } /** * Gets the type of `node`. @@ -661,6 +855,8 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { synthStarArgsElementParameterNodeStoreStep(nodeFrom, c, nodeTo) or synthDictSplatArgumentNodeStoreStep(nodeFrom, c, nodeTo) + or + VariableCapture::storeStep(nodeFrom, c, nodeTo) } /** @@ -864,6 +1060,8 @@ predicate readStep(Node nodeFrom, ContentSet c, Node nodeTo) { nodeTo.(FlowSummaryNode).getSummaryNode()) or synthDictSplatParameterNodeReadStep(nodeFrom, c, nodeTo) + or + VariableCapture::readStep(nodeFrom, c, nodeTo) } /** Data flows from a sequence to a subscript of the sequence. */ @@ -993,6 +1191,8 @@ predicate nodeIsHidden(Node n) { n instanceof SynthDictSplatArgumentNode or n instanceof SynthDictSplatParameterNode + // or + // n instanceof CaptureNode } class LambdaCallKind = Unit; @@ -1029,6 +1229,11 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves */ predicate allowParameterReturnInSelf(ParameterNode p) { FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(p) + or + exists(Function f | + VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(f) and + p = TLambdaSelfReferenceNode(f) + ) } /** An approximated `Content`. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 4ba70f3bbf6..dfe20a408cc 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -114,6 +114,12 @@ newtype TNode = /** A synthetic node to allow flow to keyword parameters from a `**kwargs` argument. */ TSynthDictSplatParameterNode(DataFlowCallable callable) { exists(ParameterPosition ppos | ppos.isKeyword(_) | exists(callable.getParameter(ppos))) + } or + /** A synthetic node representing a captured variable. */ + TCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or + /** A synthetic node representing the heap of a function. Used for variable capture. */ + TLambdaSelfReferenceNode(Function f) { + f = any(VariableCapture::CapturedVariable v).getACapturingScope() } private import semmle.python.internal.CachedStages @@ -471,6 +477,29 @@ class StarPatternElementNode extends Node, TStarPatternElementNode { override Location getLocation() { result = consumer.getLocation() } } +/** + * A synthesized data flow node representing a closure object that tracks + * captured variables. + */ +class CaptureNode extends Node, TCaptureNode { + private VariableCapture::Flow::SynthesizedCaptureNode cn; + + CaptureNode() { this = TCaptureNode(cn) } + + /** Gets the `SynthesizedCaptureNode` that this node represents. */ + VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } + + override DataFlowCallable getEnclosingCallable() { + result = TFunction(cn.getEnclosingCallable()) + or + result = TModule(cn.getEnclosingCallable()) + } + + override Location getLocation() { result = cn.getLocation() } + + override string toString() { result = cn.toString() } +} + /** * Gets a node that controls whether other nodes are evaluated. * @@ -602,7 +631,9 @@ newtype TContent = exists(string input, string output | ModelOutput::relevantSummaryModel(_, _, input, output, _) | attr = [input, output].regexpFind("(?<=(^|\\.)Attribute\\[)[^\\]]+(?=\\])", _, _).trim() ) - } + } or + /** A captured variable. */ + TCapturedVariableContent(VariableCapture::CapturedVariable v) /** * A data-flow value can have associated content. @@ -665,6 +696,18 @@ class AttributeContent extends TAttributeContent, Content { override string toString() { result = "Attribute " + attr } } +/** A captured variable. */ +class CapturedVariableContent extends Content, TCapturedVariableContent { + private VariableCapture::CapturedVariable v; + + CapturedVariableContent() { this = TCapturedVariableContent(v) } + + /** Gets the captured variable. */ + VariableCapture::CapturedVariable getVariable() { result = v } + + override string toString() { result = "captured " + v } +} + /** * An entity that represents a set of `Content`s. * diff --git a/python/ql/test/experimental/dataflow/variable-capture/by_value.py b/python/ql/test/experimental/dataflow/variable-capture/by_value.py index f43b1c6b120..fa7546b8f2b 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/by_value.py +++ b/python/ql/test/experimental/dataflow/variable-capture/by_value.py @@ -34,14 +34,14 @@ def by_value1(): a = SOURCE def inner(a_val=a): SINK(a_val) #$ captured - SINK_F(a) + SINK_F(a) #$ SPURIOUS: captured a = NONSOURCE inner() def by_value2(): a = NONSOURCE def inner(a_val=a): - SINK(a) #$ MISSING:captured + SINK(a) #$ captured SINK_F(a_val) a = SOURCE inner() diff --git a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected new file mode 100644 index 00000000000..35f4edcf1fb --- /dev/null +++ b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected @@ -0,0 +1,17 @@ +uniqueToString +uniqueEnclosingCallable +uniqueDominator +localDominator +localSuccessor +uniqueDefiningScope +variableIsCaptured +uniqueLocation +uniqueCfgNode +uniqueWriteTarget +uniqueWriteCfgNode +uniqueReadVariable +closureMustHaveBody +closureAliasMustBeInSameScope +variableAccessAstNesting +uniqueCallableLocation +consistencyOverview diff --git a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql new file mode 100644 index 00000000000..653d00b7039 --- /dev/null +++ b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql @@ -0,0 +1,2 @@ +import python +import semmle.python.dataflow.new.internal.DataFlowPrivate::VariableCapture::Flow::ConsistencyChecks diff --git a/python/ql/test/experimental/dataflow/variable-capture/dict.py b/python/ql/test/experimental/dataflow/variable-capture/dict.py index 3cfdfea7a1c..8a8165d6674 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/dict.py +++ b/python/ql/test/experimental/dataflow/variable-capture/dict.py @@ -37,7 +37,7 @@ def out(): def captureOut1(): sinkO1["x"] = SOURCE captureOut1() - SINK(sinkO1["x"]) #$ MISSING:captured + SINK(sinkO1["x"]) #$ captured sinkO2 = { "x": "" } def captureOut2(): @@ -45,7 +45,7 @@ def out(): sinkO2["x"] = SOURCE m() captureOut2() - SINK(sinkO2["x"]) #$ MISSING:captured + SINK(sinkO2["x"]) #$ captured nonSink0 = { "x": "" } def captureOut1NotCalled(): @@ -67,7 +67,7 @@ def through(tainted): def captureOut1(): sinkO1["x"] = tainted captureOut1() - SINK(sinkO1["x"]) #$ MISSING:captured + SINK(sinkO1["x"]) #$ captured sinkO2 = { "x": "" } def captureOut2(): @@ -75,7 +75,7 @@ def through(tainted): sinkO2["x"] = tainted m() captureOut2() - SINK(sinkO2["x"]) #$ MISSING:captured + SINK(sinkO2["x"]) #$ captured nonSink1 = { "x": "" } def captureOut1NotCalled(): diff --git a/python/ql/test/experimental/dataflow/variable-capture/global.py b/python/ql/test/experimental/dataflow/variable-capture/global.py index ef36b4a4d57..92d273592b8 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/global.py +++ b/python/ql/test/experimental/dataflow/variable-capture/global.py @@ -78,7 +78,7 @@ def through(tainted): global sinkT1 sinkT1 = tainted captureOut1() - SINK(sinkT1) #$ MISSING:captured + SINK(sinkT1) #$ captured def captureOut2(): def m(): @@ -86,7 +86,7 @@ def through(tainted): sinkT2 = tainted m() captureOut2() - SINK(sinkT2) #$ MISSING:captured + SINK(sinkT2) #$ captured def captureOut1NotCalled(): global nonSinkT1 diff --git a/python/ql/test/experimental/dataflow/variable-capture/in.py b/python/ql/test/experimental/dataflow/variable-capture/in.py index 3d2266a8fb1..35fad035355 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/in.py +++ b/python/ql/test/experimental/dataflow/variable-capture/in.py @@ -34,17 +34,17 @@ def SINK_F(x): def inParam(tainted): def captureIn1(): sinkI1 = tainted - SINK(sinkI1) #$ MISSING:captured + SINK(sinkI1) #$ captured captureIn1() def captureIn2(): def m(): sinkI2 = tainted - SINK(sinkI2) #$ MISSING:captured + SINK(sinkI2) #$ captured m() captureIn2() - captureIn3 = lambda arg: SINK(tainted) + captureIn3 = lambda arg: SINK(tainted) #$ captured captureIn3("") def captureIn1NotCalled(): @@ -68,17 +68,17 @@ def inLocal(): def captureIn1(): sinkI1 = tainted - SINK(sinkI1) #$ MISSING:captured + SINK(sinkI1) #$ captured captureIn1() def captureIn2(): def m(): sinkI2 = tainted - SINK(sinkI2) #$ MISSING:captured + SINK(sinkI2) #$ captured m() captureIn2() - captureIn3 = lambda arg: SINK(tainted) #$ MISSING:captured + captureIn3 = lambda arg: SINK(tainted) #$ captured captureIn3("") def captureIn1NotCalled(): From b513871b9b640702873e2fb130661da4070fd103 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 29 Nov 2023 20:58:20 +0100 Subject: [PATCH 016/205] Python: add consistency exclusions --- .../consistency-queries/DataFlowConsistency.ql | 18 ++++++++++++++++++ .../new/internal/DataFlowImplConsistency.qll | 14 ++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 0afc4f4884d..2d0cdb6d6f3 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -44,6 +44,24 @@ private module Input implements InputSig { ) } + predicate uniqueEnclosingCallableExclude(Node n) { + // `CaptureNode`s miss enclosing calables in some cases. + exists(Function func | + func = n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() + | + // This can happen if `func` is a comprehension. + // In that case, there is no associated DataFlowCallable. + not exists(func.getDefinition()) + or + func.getADecorator().(Name).getId() = "property" + ) + or + // We only have a selection of valid callables. + // For instance, we do not have classes as `DataFlowCallable`s. + not n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Function and + not n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Module + } + predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { not exists(call.getLocation().getFile().getRelativePath()) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll index 0595cbf7d3f..aac3c30cc2c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll @@ -40,6 +40,20 @@ private module Input implements InputSig { ) } + predicate uniqueEnclosingCallableExclude(Node n) { + // `CaptureNode`s miss enclosing calables in some cases. + exists(Function func | + func = n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() + | + // This can happen if `func` is a comprehension. + // In that case, there is no associated DataFlowCallable. + not exists(func.getDefinition()) + ) + or + // We do not have classes as `DataFlowCallable`s. + n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Class + } + predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { not exists(call.getLocation().getFile().getRelativePath()) } From 797deebcddc5b84a0a7a0f5d5ed08d8ed3c285d7 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 29 Nov 2023 22:26:27 +0100 Subject: [PATCH 017/205] Python: exclude `CaptureNode`s --- python/ql/test/experimental/dataflow/typetracking/tracked.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index d6adbf5d7ab..9416701de0f 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -27,6 +27,8 @@ module TrackedTest implements TestSig { // We do not wish to annotate scope entry definitions, // as they do not appear in the source code. not e.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() and + // ...same for CaptureNodes + not e instanceof DataFlow::CaptureNode and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and From 7565873e83ba7f3bbf2a68746d84c7c0a1edac25 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 5 Dec 2023 22:24:22 +0100 Subject: [PATCH 018/205] Python: test callbacks to library calls --- .../test/experimental/dataflow/validTest.py | 1 + .../variable-capture/test_library_calls.py | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py diff --git a/python/ql/test/experimental/dataflow/validTest.py b/python/ql/test/experimental/dataflow/validTest.py index 5e12e7cccc7..0c6dc259d51 100644 --- a/python/ql/test/experimental/dataflow/validTest.py +++ b/python/ql/test/experimental/dataflow/validTest.py @@ -74,6 +74,7 @@ if __name__ == "__main__": check_tests_valid("variable-capture.dict") check_tests_valid("variable-capture.test_collections") check_tests_valid("variable-capture.by_value") + check_tests_valid("variable-capture.test_library_calls") check_tests_valid("module-initialization.multiphase") check_tests_valid("fieldflow.test") check_tests_valid("fieldflow.test_dict") diff --git a/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py new file mode 100644 index 00000000000..7de6e409339 --- /dev/null +++ b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py @@ -0,0 +1,48 @@ +# Here we test the case where a captured variable is being written inside a library call. + +# All functions starting with "test_" should run and execute `print("OK")` exactly once. +# This can be checked by running validTest.py. + +import sys +import os + +sys.path.append(os.path.dirname(os.path.dirname((__file__)))) +from testlib import expects + +# These are defined so that we can evaluate the test code. +NONSOURCE = "not a source" +SOURCE = "source" + +def is_source(x): + return x == "source" or x == b"source" or x == 42 or x == 42.0 or x == 42j + + +def SINK(x): + if is_source(x): + print("OK") + else: + print("Unexpected flow", x) + + +def SINK_F(x): + if is_source(x): + print("Unexpected flow", x) + else: + print("OK") + +# Actual tests start here + +@expects(2) +def test_library_call(): + captured = {"x": NONSOURCE} + + def set(x): + captured["x"] = SOURCE + return x + + SINK_F(captured["x"]) + + for x in map(set, [1]): + pass + + SINK(captured["x"]) #$ MISSING:captured From 17a00295858daa51eb9decb5019f64e7544a3f1d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 5 Dec 2023 22:50:01 +0100 Subject: [PATCH 019/205] Python: support callbacks to library calls TODO: The member predicate `LibraryLambdaMethod::getACall` is currently too permissive. Ideally, we would have `libraryCallHasLambdaArg` as in Ruby. But even a more precise `libraryCall` predicate might be fine. --- .../python/dataflow/new/FlowSummary.qll | 23 +++++++++++++++++++ .../new/internal/FlowSummaryImplSpecific.qll | 12 ++++++++++ .../variable-capture/test_library_calls.py | 2 +- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index 8b80e13d06d..95a5233810e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -91,6 +91,29 @@ abstract class SummarizedCallable extends LibraryCallable, Impl::Public::Summari class RequiredSummaryComponentStack = Impl::Public::RequiredSummaryComponentStack; +private module LibraryCallbackSummaries { + private class LibraryLambdaMethod extends SummarizedCallable { + LibraryLambdaMethod() { this = "" } + + final override CallCfgNode getACall() { + exists(ExtractedDataFlowCall call | result.getNode() = call.getNode() | + not exists(call.getCallable()) + ) + } + + final override ArgumentNode getACallback() { none() } + + override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { + exists(int i | + i in [0 .. 10] and + input = "Argument[" + i + "]" and + output = "Argument[" + i + "].Parameter[lambda-self]" + ) and + preservesValue = true + } + } +} + private class SummarizedCallableFromModel extends SummarizedCallable { string type; string path; diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImplSpecific.qll index a29b97b72c2..e30510e34af 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImplSpecific.qll @@ -166,6 +166,9 @@ string getMadRepresentationSpecific(SummaryComponent sc) { string getParameterPosition(ParameterPosition pos) { pos.isSelf() and result = "self" or + pos.isLambdaSelf() and + result = "lambda-self" + or exists(int i | pos.isPositional(i) and result = i.toString() @@ -181,6 +184,9 @@ string getParameterPosition(ParameterPosition pos) { string getArgumentPosition(ArgumentPosition pos) { pos.isSelf() and result = "self" or + pos.isLambdaSelf() and + result = "lambda-self" + or exists(int i | pos.isPositional(i) and result = i.toString() @@ -305,6 +311,9 @@ ArgumentPosition parseParamBody(string s) { or s = "self" and result.isSelf() + or + s = "lambda-self" and + result.isLambdaSelf() } /** Gets the parameter position obtained by parsing `X` in `Argument[X]`. */ @@ -321,4 +330,7 @@ ParameterPosition parseArgBody(string s) { or s = "self" and result.isSelf() + or + s = "lambda-self" and + result.isLambdaSelf() } diff --git a/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py index 7de6e409339..5db25fc8348 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py +++ b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py @@ -45,4 +45,4 @@ def test_library_call(): for x in map(set, [1]): pass - SINK(captured["x"]) #$ MISSING:captured + SINK(captured["x"]) #$ captured From 453ab9ca7b2948c83ed05a5a50fcdd252854f2f0 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 09:00:11 +0100 Subject: [PATCH 020/205] Python: restrict `LibraryLambdaMethod` --- python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index 95a5233810e..a55880a72b4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -96,9 +96,7 @@ private module LibraryCallbackSummaries { LibraryLambdaMethod() { this = "" } final override CallCfgNode getACall() { - exists(ExtractedDataFlowCall call | result.getNode() = call.getNode() | - not exists(call.getCallable()) - ) + not exists(NormalCall call | result.getNode() = call.getNode()) } final override ArgumentNode getACallback() { none() } From 061fd014a6689dc1d0dd61a064aa46a9fe001268 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 09:24:49 +0100 Subject: [PATCH 021/205] Python: further restrict `LibraryLambdaMethod` On the small test project, this reduces the number of instances from 285 to 22. --- .../python/dataflow/new/FlowSummary.qll | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index a55880a72b4..ae3e5c8ade2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -92,12 +92,30 @@ abstract class SummarizedCallable extends LibraryCallable, Impl::Public::Summari class RequiredSummaryComponentStack = Impl::Public::RequiredSummaryComponentStack; private module LibraryCallbackSummaries { + private predicate libraryCall(CallCfgNode call) { + not exists(NormalCall normalCall | call.getNode() = normalCall.getNode()) + } + + private DataFlow::LocalSourceNode trackLambdaCreation(TypeTracker t) { + t.start() and + lambdaCreation(result, _, _) + or + exists(TypeTracker t2 | result = trackLambdaCreation(t2).track(t2, t)) and + not result.(ParameterNode).getParameter().isSelf() + } + + private predicate libraryCallHasLambdaArg(CallCfgNode call, int i) { + exists(CfgNode arg | + arg = call.getArg(i) and + arg.getALocalSource() = trackLambdaCreation(TypeTracker::end()) and + libraryCall(call) + ) + } + private class LibraryLambdaMethod extends SummarizedCallable { LibraryLambdaMethod() { this = "" } - final override CallCfgNode getACall() { - not exists(NormalCall call | result.getNode() = call.getNode()) - } + final override CallCfgNode getACall() { libraryCallHasLambdaArg(result, _) } final override ArgumentNode getACallback() { none() } From 5471c92e9fb9d5289068ccd1412d3493c5e13fc7 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 09:59:27 +0100 Subject: [PATCH 022/205] Python: exclusion for summary nodes as in Ruby --- python/ql/consistency-queries/DataFlowConsistency.ql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 2d0cdb6d6f3..27f5890a6b5 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -14,6 +14,8 @@ private module Input implements InputSig { private import Private private import Public + predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode } + predicate argHasPostUpdateExclude(ArgumentNode n) { // TODO: Implement post-updates for *args, see tests added in https://github.com/github/codeql/pull/14936 exists(ArgumentPosition apos | n.argumentOf(_, apos) and apos.isStarArgs(_)) From efcdb3e67ebd0c34e6de99d9a8fb2ad2669ae0ec Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 20:57:17 +0100 Subject: [PATCH 023/205] Python: filter local flow from a node to itself --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 cbc40219050..d521ace7fd2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -684,8 +684,13 @@ predicate summaryFlowSteps(Node nodeFrom, Node nodeTo) { } predicate variableCaptureFlowStep(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 + // that. However, we do want to allow `[post] n` to `n` (to handle while loops), so + // we should only do the filtering after `IncludePostUpdateFlow` has ben applied. IncludePostUpdateFlow::step/2>::step(nodeFrom, - nodeTo) + nodeTo) and + nodeFrom != nodeTo } /** `ModuleVariable`s are accessed via jump steps at runtime. */ From f32d5e422d68274565a282ed1349c049be11642d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 21:25:18 +0100 Subject: [PATCH 024/205] Python: typo --- python/ql/consistency-queries/DataFlowConsistency.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 27f5890a6b5..575b5fbede0 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -73,7 +73,7 @@ private module Input implements InputSig { } predicate multipleArgumentCallExclude(ArgumentNode arg, DataFlowCall call) { - // since we can have multiple DataFlowCall for a CallNode (for example if can + // since we can have multiple DataFlowCall for a CallNode (for example if it can // resolve to multiple functions), but we only make _one_ ArgumentNode for each // argument in the CallNode, we end up violating this consistency check in those // cases. (see `getCallArg` in DataFlowDispatch.qll) From 38e03216f66c5373baa61590e8432123e5463146 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 6 Dec 2023 21:42:45 +0100 Subject: [PATCH 025/205] Python: allow `CaptureArgumentNode`s as multiple arguemnts These are the labmda self references. This is similar to how `BlockParameterArgumentNode` is excluded for Ruby. It is important that we restrict `call` in this logic. Otherwise, we get a cartesian product and the consistency check runs for a very long time... --- python/ql/consistency-queries/DataFlowConsistency.ql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 575b5fbede0..7ac0a3b4983 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -140,6 +140,9 @@ private module Input implements InputSig { arg = other.getArgument(any(ArgumentPosition p | p.isSelf())) and other.getNode().getScope() = f ) + or + arg = call.getArgument(_) and + arg instanceof CaptureArgumentNode } } From 479d81fb75d889a73c8043bc8046bdc9a452afd4 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 12 Dec 2023 21:51:53 +0100 Subject: [PATCH 026/205] Python: fix nonlocal captured variables This depends on the extractor fix --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 6 ++++++ .../experimental/dataflow/variable-capture/nonlocal.py | 8 ++++---- 2 files changed, 10 insertions(+), 4 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 d521ace7fd2..1c17ceeb85d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -299,6 +299,12 @@ module LocalFlow { nodeTo.(CfgNode).getNode() = def.getDefiningNode() ) or + // General definition + // TODO: remove other cases that are now redundant + nodeFrom.(CfgNode).getNode() = nodeTo.(CfgNode).getNode().(DefinitionNode).getValue() and + // remove jump steps (such as assignment of parameter default values) + nodeFrom.getEnclosingCallable() = nodeTo.getEnclosingCallable() + or // With definition // `with f(42) as x:` // nodeFrom is `f(42)` diff --git a/python/ql/test/experimental/dataflow/variable-capture/nonlocal.py b/python/ql/test/experimental/dataflow/variable-capture/nonlocal.py index 0e8233532af..91a06aae639 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/nonlocal.py +++ b/python/ql/test/experimental/dataflow/variable-capture/nonlocal.py @@ -38,7 +38,7 @@ def out(): nonlocal sinkO1 sinkO1 = SOURCE captureOut1() - SINK(sinkO1) #$ MISSING:captured + SINK(sinkO1) #$ captured sinkO2 = "" def captureOut2(): @@ -47,7 +47,7 @@ def out(): sinkO2 = SOURCE m() captureOut2() - SINK(sinkO2) #$ MISSING:captured + SINK(sinkO2) #$ captured nonSink1 = "" def captureOut1NotCalled(): @@ -74,7 +74,7 @@ def through(tainted): nonlocal sinkO1 sinkO1 = tainted captureOut1() - SINK(sinkO1) #$ MISSING:captured + SINK(sinkO1) #$ captured sinkO2 = "" def captureOut2(): @@ -83,7 +83,7 @@ def through(tainted): sinkO2 = tainted m() captureOut2() - SINK(sinkO2) #$ MISSING:captured + SINK(sinkO2) #$ captured nonSink1 = "" def captureOut1NotCalled(): From 2a5736e73dde558da26e4ebec509692f86b5ccf9 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 14 Dec 2023 11:50:09 +0100 Subject: [PATCH 027/205] Python: add consistency exception this must have been lost in my clean-up rebase. --- .../comparisons/CONSISTENCY/DataFlowConsistency.expected | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected diff --git a/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected b/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected new file mode 100644 index 00000000000..0eb7f3b9a40 --- /dev/null +++ b/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected @@ -0,0 +1,2 @@ +postWithInFlow +| test.py:16:1:16:14 | ControlFlowNode for len() | PostUpdateNode should not be the target of local flow. | \ No newline at end of file From 0b6d47b8bcbf02ecd6ae40396e9417046fd41042 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 14 Dec 2023 11:56:05 +0100 Subject: [PATCH 028/205] Python: update to new API update is in a comment, so compilation never failed in CI. --- python/ql/test/experimental/meta/debug/InlineTaintTestPaths.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/test/experimental/meta/debug/InlineTaintTestPaths.ql b/python/ql/test/experimental/meta/debug/InlineTaintTestPaths.ql index 3f082f21fa4..caade9040b7 100644 --- a/python/ql/test/experimental/meta/debug/InlineTaintTestPaths.ql +++ b/python/ql/test/experimental/meta/debug/InlineTaintTestPaths.ql @@ -23,7 +23,7 @@ module Flows = TaintTracking::Global; import Flows::PathGraph // int explorationLimit() { result = 5 } -// module FlowsPartial = Flows::FlowExploration; +// module FlowsPartial = Flows::FlowExplorationFwd; // import FlowsPartial::PartialPathGraph from Flows::PathNode source, Flows::PathNode sink where Flows::flowPath(source, sink) From 4776e9ccd24984dd166ec0499aa48b179e151ca2 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 6 Dec 2023 21:30:07 +0100 Subject: [PATCH 029/205] Type tracking: Allow for a non-standard `flowsTo` predicate --- .../codeql/typetracking/TypeTracking.qll | 6 ++++++ .../internal/TypeTrackingImpl.qll | 19 +++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/shared/typetracking/codeql/typetracking/TypeTracking.qll b/shared/typetracking/codeql/typetracking/TypeTracking.qll index 19a00a0c53c..044b672fe85 100644 --- a/shared/typetracking/codeql/typetracking/TypeTracking.qll +++ b/shared/typetracking/codeql/typetracking/TypeTracking.qll @@ -113,6 +113,12 @@ signature module TypeTrackingInput { * themselves. */ predicate hasFeatureBacktrackStoreTarget(); + + /** + * Holds if a non-standard `flowsTo` predicate is needed, i.e., one that is not + * simply `simpleLocalSmallStep*(localSource, dst)`. + */ + default predicate nonStandardFlowsTo(LocalSourceNode localSource, Node dst) { none() } } private import internal.TypeTrackingImpl as Impl diff --git a/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll b/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll index e8b60d08ae8..563813aab92 100644 --- a/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll +++ b/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll @@ -249,18 +249,15 @@ module TypeTracking { pragma[inline] private predicate isLocalSourceNode(LocalSourceNode n) { any() } - /** - * Holds if there is flow from `localSource` to `dst` using zero or more - * `simpleLocalSmallStep`s. - */ cached - predicate flowsTo(Node localSource, Node dst) { + predicate standardFlowsTo(Node localSource, Node dst) { + not nonStandardFlowsTo(_, _) and // explicit type check in base case to avoid repeated type tests in recursive case isLocalSourceNode(localSource) and dst = localSource or exists(Node mid | - flowsTo(localSource, mid) and + standardFlowsTo(localSource, mid) and simpleLocalSmallStep(mid, dst) ) } @@ -278,6 +275,16 @@ module TypeTracking { import Cached + /** + * Holds if there is flow from `localSource` to `dst` using zero or more + * `simpleLocalSmallStep`s. + */ + predicate flowsTo(LocalSourceNode localSource, Node dst) { + nonStandardFlowsTo(localSource, dst) + or + standardFlowsTo(localSource, dst) + } + /** * A description of a step on an inter-procedural data flow path. */ From 3b1146bf98466a154d647b638d6be301bfe27834 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 20 Nov 2023 13:16:57 +0100 Subject: [PATCH 030/205] Python: Adopt shared type tracking library --- .../utils/CallCfgNodeWithTarget.qll | 4 +- .../python/dataflow/new/TypeTracker.qll | 20 +- .../python/dataflow/new/TypeTracking.qll | 56 ++++ .../new/internal/DataFlowDispatch.qll | 2 +- .../dataflow/new/internal/DataFlowPublic.qll | 2 +- .../new/internal/ImportResolution.qll | 2 +- .../dataflow/new/internal/LocalSources.qll | 6 +- .../dataflow/new/internal/TypeTracker.qll | 108 ++++--- .../new/internal/TypeTrackerSpecific.qll | 220 ++------------ .../new/internal/TypeTrackingImpl.qll | 274 ++++++++++++++++++ .../semmle/python/internal/CachedStages.qll | 3 +- ...ShellCommandConstructionCustomizations.qll | 2 +- .../dataflow/summaries/TestSummaries.qll | 2 +- .../typetracking-summaries/TestSummaries.qll | 2 +- .../typetracking-summaries/tracked.ql | 2 +- .../dataflow/typetracking/moduleattr.ql | 2 +- .../dataflow/typetracking/tracked.ql | 2 +- 17 files changed, 446 insertions(+), 263 deletions(-) create mode 100644 python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll create mode 100644 python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll diff --git a/python/ql/lib/experimental/cryptography/utils/CallCfgNodeWithTarget.qll b/python/ql/lib/experimental/cryptography/utils/CallCfgNodeWithTarget.qll index 4d5ecd8f6bd..c475d83d547 100644 --- a/python/ql/lib/experimental/cryptography/utils/CallCfgNodeWithTarget.qll +++ b/python/ql/lib/experimental/cryptography/utils/CallCfgNodeWithTarget.qll @@ -4,9 +4,9 @@ */ import python -private import semmle.python.dataflow.new.internal.TypeTrackerSpecific +private import semmle.python.dataflow.new.internal.TypeTrackingImpl private import semmle.python.ApiGraphs class CallCfgNodeWithTarget extends DataFlow::Node instanceof DataFlow::CallCfgNode { - DataFlow::Node getTarget() { returnStep(result, this) } + DataFlow::Node getTarget() { TypeTrackingInput::returnStep(result, this) } } diff --git a/python/ql/lib/semmle/python/dataflow/new/TypeTracker.qll b/python/ql/lib/semmle/python/dataflow/new/TypeTracker.qll index c038e93770d..6def6b0b523 100644 --- a/python/ql/lib/semmle/python/dataflow/new/TypeTracker.qll +++ b/python/ql/lib/semmle/python/dataflow/new/TypeTracker.qll @@ -1,4 +1,6 @@ /** + * DEPRECATED: Use `semmle.python.dataflow.new.TypeTracking` instead. + * * This file acts as a wrapper for `internal.TypeTracker`, exposing some of the functionality with * names that are more appropriate for Python. */ @@ -8,12 +10,14 @@ private import internal.TypeTracker as Internal private import internal.TypeTrackerSpecific as InternalSpecific /** A string that may appear as the name of an attribute or access path. */ -class AttributeName = InternalSpecific::TypeTrackerContent; +deprecated class AttributeName = InternalSpecific::TypeTrackerContent; /** An attribute name, or the empty string (representing no attribute). */ -class OptionalAttributeName = InternalSpecific::OptionalTypeTrackerContent; +deprecated class OptionalAttributeName = InternalSpecific::OptionalTypeTrackerContent; /** + * DEPRECATED: Use `semmle.python.dataflow.new.TypeTracking` instead. + * * The summary of the steps needed to track a value to a given dataflow node. * * This can be used to track objects that implement a certain API in order to @@ -40,7 +44,7 @@ class OptionalAttributeName = InternalSpecific::OptionalTypeTrackerContent; * `t = t2.step(myType(t2), result)`. If you additionally want to track individual * intra-procedural steps, use `t = t2.smallstep(myCallback(t2), result)`. */ -class TypeTracker extends Internal::TypeTracker { +deprecated class TypeTracker extends Internal::TypeTracker { /** * Holds if this is the starting point of type tracking, and the value starts in the attribute named `attrName`. * The type tracking only ends after the attribute has been loaded. @@ -55,12 +59,12 @@ class TypeTracker extends Internal::TypeTracker { string getAttr() { result = this.getContent() } } -module TypeTracker = Internal::TypeTracker; +deprecated module TypeTracker = Internal::TypeTracker; -class StepSummary = Internal::StepSummary; +deprecated class StepSummary = Internal::StepSummary; -module StepSummary = Internal::StepSummary; +deprecated module StepSummary = Internal::StepSummary; -class TypeBackTracker = Internal::TypeBackTracker; +deprecated class TypeBackTracker = Internal::TypeBackTracker; -module TypeBackTracker = Internal::TypeBackTracker; +deprecated module TypeBackTracker = Internal::TypeBackTracker; diff --git a/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll new file mode 100644 index 00000000000..4f1810f059e --- /dev/null +++ b/python/ql/lib/semmle/python/dataflow/new/TypeTracking.qll @@ -0,0 +1,56 @@ +/** + * Provides classes and predicates for simple data-flow reachability suitable + * for tracking types. + */ + +private import internal.TypeTrackingImpl as Impl +import Impl::Shared::TypeTracking + +/** A string that may appear as the name of an attribute or access path. */ +class AttributeName = Impl::TypeTrackingInput::Content; + +/** + * A summary of the steps needed to track a value to a given dataflow node. + * + * This can be used to track objects that implement a certain API in order to + * recognize calls to that API. Note that type-tracking does not by itself provide a + * source/sink relation, that is, it may determine that a node has a given type, + * but it won't determine where that type came from. + * + * It is recommended that all uses of this type are written in the following form, + * for tracking some type `myType`: + * ```ql + * Node myType(TypeTracker tt) { + * tt.start() and + * result = < source of myType > + * or + * exists(TypeTracker tt2 | + * tt = tt2.step(myType(tt2), result) + * ) + * } + * + * Node myType() { myType(TypeTracker::end()).flowsTo(result) } + * ``` + * + * If you want to track individual intra-procedural steps, use `tt2.smallstep` + * instead of `tt2.step`. + */ +class TypeTracker extends Impl::TypeTracker { + /** + * Holds if this is the starting point of type tracking, and the value starts in the attribute named `attrName`. + * The type tracking only ends after the attribute has been loaded. + */ + predicate startInAttr(string attrName) { this.startInContent(attrName) } + + /** + * INTERNAL. DO NOT USE. + * + * Gets the attribute associated with this type tracker. + */ + string getAttr() { + result = this.getContent().asSome() + or + this.getContent().isNone() and + result = "" + } +} diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 16410288800..df932905895 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -37,7 +37,7 @@ private import DataFlowPublic private import DataFlowPrivate private import FlowSummaryImpl as FlowSummaryImpl private import semmle.python.internal.CachedStages -private import semmle.python.dataflow.new.internal.TypeTracker::CallGraphConstruction as CallGraphConstruction +private import semmle.python.dataflow.new.internal.TypeTrackingImpl::CallGraphConstruction as CallGraphConstruction newtype TParameterPosition = /** Used for `self` in methods, and `cls` in classmethods. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 4ba70f3bbf6..f5731f44ab0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -4,7 +4,7 @@ private import python private import DataFlowPrivate -import semmle.python.dataflow.new.TypeTracker +import semmle.python.dataflow.new.TypeTracking import Attributes import LocalSources private import semmle.python.essa.SsaCompute diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll b/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll index ebbe2f2d0cb..40d9463e546 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/ImportResolution.qll @@ -7,7 +7,7 @@ private import python private import semmle.python.dataflow.new.DataFlow private import semmle.python.dataflow.new.internal.ImportStar -private import semmle.python.dataflow.new.TypeTracker +private import semmle.python.dataflow.new.TypeTracking private import semmle.python.dataflow.new.internal.DataFlowPrivate /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index d03ea0a877c..ac45700bf47 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -72,6 +72,8 @@ class LocalSourceNode extends Node { // We include all scope entry definitions, as these act as the local source within the scope they // enter. this.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() + or + this instanceof ParameterNode } /** Holds if this `LocalSourceNode` can flow to `nodeTo` in one or more local flow steps. */ @@ -151,7 +153,7 @@ class LocalSourceNode extends Node { * See `TypeBackTracker` for more details about how to use this. */ pragma[inline] - LocalSourceNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t2 = t.step(result, this) } + LocalSourceNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t = t2.step(result, this) } } /** @@ -238,7 +240,7 @@ private module Cached { * Helper predicate for `hasLocalSource`. Removes any steps go to module variable reads, as these * are already local source nodes in their own right. */ - cached + pragma[nomagic] private predicate localSourceFlowStep(Node nodeFrom, Node nodeTo) { simpleLocalFlowStep(nodeFrom, nodeTo) and not nodeTo = any(ModuleVariableNode v).getARead() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll index 001375b4dc5..8e0feb50c70 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTracker.qll @@ -8,22 +8,22 @@ private module Cached { * A description of a step on an inter-procedural data flow path. */ cached - newtype TStepSummary = + deprecated newtype TStepSummary = LevelStep() or CallStep() or ReturnStep() or - StoreStep(TypeTrackerContent content) { basicStoreStep(_, _, content) } or - LoadStep(TypeTrackerContent content) { basicLoadStep(_, _, content) } or - LoadStoreStep(TypeTrackerContent load, TypeTrackerContent store) { + deprecated StoreStep(TypeTrackerContent content) { basicStoreStep(_, _, content) } or + deprecated LoadStep(TypeTrackerContent content) { basicLoadStep(_, _, content) } or + deprecated LoadStoreStep(TypeTrackerContent load, TypeTrackerContent store) { basicLoadStoreStep(_, _, load, store) } or - WithContent(ContentFilter filter) { basicWithContentStep(_, _, filter) } or - WithoutContent(ContentFilter filter) { basicWithoutContentStep(_, _, filter) } or + deprecated WithContent(ContentFilter filter) { basicWithContentStep(_, _, filter) } or + deprecated WithoutContent(ContentFilter filter) { basicWithoutContentStep(_, _, filter) } or JumpStep() cached - newtype TTypeTracker = - MkTypeTracker(Boolean hasCall, OptionalTypeTrackerContent content) { + deprecated newtype TTypeTracker = + deprecated MkTypeTracker(Boolean hasCall, OptionalTypeTrackerContent content) { content = noContent() or // Restrict `content` to those that might eventually match a load. @@ -40,8 +40,8 @@ private module Cached { } cached - newtype TTypeBackTracker = - MkTypeBackTracker(Boolean hasReturn, OptionalTypeTrackerContent content) { + deprecated newtype TTypeBackTracker = + deprecated MkTypeBackTracker(Boolean hasReturn, OptionalTypeTrackerContent content) { content = noContent() or // As in MkTypeTracker, restrict `content` to those that might eventually match a store. @@ -57,11 +57,13 @@ private module Cached { /** Gets a type tracker with no content and the call bit set to the given value. */ cached - TypeTracker noContentTypeTracker(boolean hasCall) { result = MkTypeTracker(hasCall, noContent()) } + deprecated TypeTracker noContentTypeTracker(boolean hasCall) { + result = MkTypeTracker(hasCall, noContent()) + } /** Gets the summary resulting from appending `step` to type-tracking summary `tt`. */ cached - TypeTracker append(TypeTracker tt, StepSummary step) { + deprecated TypeTracker append(TypeTracker tt, StepSummary step) { exists(Boolean hasCall, OptionalTypeTrackerContent currentContents | tt = MkTypeTracker(hasCall, currentContents) | @@ -108,13 +110,13 @@ private module Cached { } pragma[nomagic] - private TypeBackTracker noContentTypeBackTracker(boolean hasReturn) { + deprecated private TypeBackTracker noContentTypeBackTracker(boolean hasReturn) { result = MkTypeBackTracker(hasReturn, noContent()) } /** Gets the summary resulting from prepending `step` to this type-tracking summary. */ cached - TypeBackTracker prepend(TypeBackTracker tbt, StepSummary step) { + deprecated TypeBackTracker prepend(TypeBackTracker tbt, StepSummary step) { exists(Boolean hasReturn, OptionalTypeTrackerContent content | tbt = MkTypeBackTracker(hasReturn, content) | @@ -167,7 +169,9 @@ private module Cached { * Steps contained in this predicate should _not_ depend on the call graph. */ cached - predicate stepNoCall(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { + deprecated predicate stepNoCall( + TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary + ) { exists(Node mid | nodeFrom.flowsTo(mid) and smallstepNoCall(mid, nodeTo, summary)) } @@ -176,12 +180,14 @@ private module Cached { * inter-procedural step from `nodeFrom` to `nodeTo`. */ cached - predicate stepCall(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { + deprecated predicate stepCall( + TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary + ) { exists(Node mid | nodeFrom.flowsTo(mid) and smallstepCall(mid, nodeTo, summary)) } cached - predicate smallstepNoCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { + deprecated predicate smallstepNoCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { jumpStep(nodeFrom, nodeTo) and summary = JumpStep() or @@ -210,7 +216,7 @@ private module Cached { } cached - predicate smallstepCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { + deprecated predicate smallstepCall(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { callStep(nodeFrom, nodeTo) and summary = CallStep() or returnStep(nodeFrom, nodeTo) and @@ -223,25 +229,27 @@ private module Cached { private import Cached -private predicate step(TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { +deprecated private predicate step( + TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo, StepSummary summary +) { stepNoCall(nodeFrom, nodeTo, summary) or stepCall(nodeFrom, nodeTo, summary) } pragma[nomagic] -private predicate stepProj(TypeTrackingNode nodeFrom, StepSummary summary) { +deprecated private predicate stepProj(TypeTrackingNode nodeFrom, StepSummary summary) { step(nodeFrom, _, summary) } -private predicate smallstep(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { +deprecated private predicate smallstep(Node nodeFrom, TypeTrackingNode nodeTo, StepSummary summary) { smallstepNoCall(nodeFrom, nodeTo, summary) or smallstepCall(nodeFrom, nodeTo, summary) } pragma[nomagic] -private predicate smallstepProj(Node nodeFrom, StepSummary summary) { +deprecated private predicate smallstepProj(Node nodeFrom, StepSummary summary) { smallstep(nodeFrom, _, summary) } @@ -270,7 +278,7 @@ private predicate smallstepProj(Node nodeFrom, StepSummary summary) { * function. This means we will track the fact that `x.attr` can have the type of `y` into the * assignment to `z` inside `bar`, even though this attribute write happens _after_ `bar` is called. */ -private predicate flowsToStoreStep( +deprecated private predicate flowsToStoreStep( Node nodeFrom, TypeTrackingNode nodeTo, TypeTrackerContent content ) { exists(Node obj | nodeTo.flowsTo(obj) and basicStoreStep(nodeFrom, obj, content)) @@ -279,7 +287,7 @@ private predicate flowsToStoreStep( /** * Holds if `loadContent` is loaded from `nodeFrom` and written to `storeContent` of `nodeTo`. */ -private predicate flowsToLoadStoreStep( +deprecated private predicate flowsToLoadStoreStep( Node nodeFrom, TypeTrackingNode nodeTo, TypeTrackerContent loadContent, TypeTrackerContent storeContent ) { @@ -293,7 +301,7 @@ private predicate flowsToLoadStoreStep( * * A description of a step on an inter-procedural data flow path. */ -class StepSummary extends TStepSummary { +deprecated class StepSummary extends TStepSummary { /** Gets a textual representation of this step summary. */ string toString() { this instanceof LevelStep and result = "level" @@ -316,7 +324,7 @@ class StepSummary extends TStepSummary { } /** Provides predicates for updating step summaries (`StepSummary`s). */ -module StepSummary { +deprecated module StepSummary { predicate append = Cached::append/2; /** @@ -411,6 +419,8 @@ module StepSummary { } /** + * DEPRECATED: Use `semmle.python.dataflow.new.TypeTracking` instead. + * * A summary of the steps needed to track a value to a given dataflow node. * * This can be used to track objects that implement a certain API in order to @@ -437,7 +447,7 @@ module StepSummary { * `t = t2.step(myType(t2), result)`. If you additionally want to track individual * intra-procedural steps, use `t = t2.smallstep(myCallback(t2), result)`. */ -class TypeTracker extends TTypeTracker { +deprecated class TypeTracker extends TTypeTracker { Boolean hasCall; OptionalTypeTrackerContent content; @@ -565,7 +575,7 @@ class TypeTracker extends TTypeTracker { } /** Provides predicates for implementing custom `TypeTracker`s. */ -module TypeTracker { +deprecated module TypeTracker { /** * Gets a valid end point of type tracking. */ @@ -580,15 +590,17 @@ module TypeTracker { } pragma[nomagic] -private predicate backStepProj(TypeTrackingNode nodeTo, StepSummary summary) { +deprecated private predicate backStepProj(TypeTrackingNode nodeTo, StepSummary summary) { step(_, nodeTo, summary) } -private predicate backSmallstepProj(TypeTrackingNode nodeTo, StepSummary summary) { +deprecated private predicate backSmallstepProj(TypeTrackingNode nodeTo, StepSummary summary) { smallstep(_, nodeTo, summary) } /** + * DEPRECATED: Use `semmle.python.dataflow.new.TypeTracking` instead. + * * A summary of the steps needed to back-track a use of a value to a given dataflow node. * * This can for example be used to track callbacks that are passed to a certain API, @@ -618,7 +630,7 @@ private predicate backSmallstepProj(TypeTrackingNode nodeTo, StepSummary summary * `t2 = t.step(result, myCallback(t2))`. If you additionally want to track individual * intra-procedural steps, use `t2 = t.smallstep(result, myCallback(t2))`. */ -class TypeBackTracker extends TTypeBackTracker { +deprecated class TypeBackTracker extends TTypeBackTracker { Boolean hasReturn; OptionalTypeTrackerContent content; @@ -747,7 +759,7 @@ class TypeBackTracker extends TTypeBackTracker { } /** Provides predicates for implementing custom `TypeBackTracker`s. */ -module TypeBackTracker { +deprecated module TypeBackTracker { /** * Gets a valid end point of type back-tracking. */ @@ -768,14 +780,14 @@ module TypeBackTracker { * `stepCall` relation (`stepNoCall` not being recursive, can be join-ordered in the * same way as in `stepInlineLate`). */ -module CallGraphConstruction { +deprecated module CallGraphConstruction { /** The input to call graph construction. */ signature module InputSig { /** A state to track during type tracking. */ class State; /** Holds if type tracking should start at `start` in state `state`. */ - predicate start(Node start, State state); + deprecated predicate start(Node start, State state); /** * Holds if type tracking should use the step from `nodeFrom` to `nodeTo`, @@ -784,7 +796,7 @@ module CallGraphConstruction { * Implementing this predicate using `StepSummary::[small]stepNoCall` yields * standard type tracking. */ - predicate stepNoCall(Node nodeFrom, Node nodeTo, StepSummary summary); + deprecated predicate stepNoCall(Node nodeFrom, Node nodeTo, StepSummary summary); /** * Holds if type tracking should use the step from `nodeFrom` to `nodeTo`, @@ -793,7 +805,7 @@ module CallGraphConstruction { * Implementing this predicate using `StepSummary::[small]stepCall` yields * standard type tracking. */ - predicate stepCall(Node nodeFrom, Node nodeTo, StepSummary summary); + deprecated predicate stepCall(Node nodeFrom, Node nodeTo, StepSummary summary); /** A projection of an element from the state space. */ class StateProj; @@ -802,25 +814,25 @@ module CallGraphConstruction { StateProj stateProj(State state); /** Holds if type tracking should stop at `n` when we are tracking projected state `stateProj`. */ - predicate filter(Node n, StateProj stateProj); + deprecated predicate filter(Node n, StateProj stateProj); } /** Provides the `track` predicate for use in call graph construction. */ module Make { pragma[nomagic] - private predicate stepNoCallProj(Node nodeFrom, StepSummary summary) { + deprecated private predicate stepNoCallProj(Node nodeFrom, StepSummary summary) { Input::stepNoCall(nodeFrom, _, summary) } pragma[nomagic] - private predicate stepCallProj(Node nodeFrom, StepSummary summary) { + deprecated private predicate stepCallProj(Node nodeFrom, StepSummary summary) { Input::stepCall(nodeFrom, _, summary) } bindingset[nodeFrom, t] pragma[inline_late] pragma[noopt] - private TypeTracker stepNoCallInlineLate( + deprecated private TypeTracker stepNoCallInlineLate( TypeTracker t, TypeTrackingNode nodeFrom, TypeTrackingNode nodeTo ) { exists(StepSummary summary | @@ -837,7 +849,7 @@ module CallGraphConstruction { } pragma[nomagic] - private Node track(Input::State state, TypeTracker t) { + deprecated private Node track(Input::State state, TypeTracker t) { t.start() and Input::start(result, state) or exists(Input::StateProj stateProj | @@ -855,12 +867,12 @@ module CallGraphConstruction { bindingset[t, summary] pragma[inline_late] - private TypeTracker appendInlineLate(TypeTracker t, StepSummary summary) { + deprecated private TypeTracker appendInlineLate(TypeTracker t, StepSummary summary) { result = t.append(summary) } pragma[nomagic] - private Node trackCall(Input::State state, TypeTracker t, StepSummary summary) { + deprecated private Node trackCall(Input::State state, TypeTracker t, StepSummary summary) { exists(TypeTracker t2 | // non-linear recursion result = track(state, t2) and @@ -871,7 +883,7 @@ module CallGraphConstruction { /** Gets a node that can be reached from _some_ start node in state `state`. */ pragma[nomagic] - Node track(Input::State state) { result = track(state, TypeTracker::end()) } + deprecated Node track(Input::State state) { result = track(state, TypeTracker::end()) } } /** A simple version of `CallGraphConstruction` that uses standard type tracking. */ @@ -882,15 +894,15 @@ module CallGraphConstruction { class State; /** Holds if type tracking should start at `start` in state `state`. */ - predicate start(Node start, State state); + deprecated predicate start(Node start, State state); /** Holds if type tracking should stop at `n`. */ - predicate filter(Node n); + deprecated predicate filter(Node n); } /** Provides the `track` predicate for use in call graph construction. */ module Make { - private module I implements CallGraphConstruction::InputSig { + deprecated private module I implements CallGraphConstruction::InputSig { private import codeql.util.Unit class State = Input::State; @@ -915,7 +927,7 @@ module CallGraphConstruction { } } - import CallGraphConstruction::Make + deprecated import CallGraphConstruction::Make } } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll index 5fe6dc154a8..298153490b2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll @@ -5,86 +5,54 @@ private import python private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate +private import TypeTrackingImpl as TypeTrackingImpl import semmle.python.internal.CachedStages -class Node = DataFlowPublic::Node; +deprecated class Node = DataFlowPublic::Node; -class TypeTrackingNode = DataFlowPublic::TypeTrackingNode; +deprecated class TypeTrackingNode = DataFlowPublic::TypeTrackingNode; /** A content name for use by type trackers, or the empty string. */ -class OptionalTypeTrackerContent extends string { +deprecated class OptionalTypeTrackerContent extends string { OptionalTypeTrackerContent() { this = "" or - this = getPossibleContentName() + this instanceof TypeTrackingImpl::TypeTrackingInput::Content } } /** A content name for use by type trackers. */ -class TypeTrackerContent extends OptionalTypeTrackerContent { +deprecated class TypeTrackerContent extends OptionalTypeTrackerContent { TypeTrackerContent() { this != "" } } /** Gets the content string representing no value. */ -OptionalTypeTrackerContent noContent() { result = "" } +deprecated OptionalTypeTrackerContent noContent() { result = "" } /** * A label to use for `WithContent` and `WithoutContent` steps, restricting * which `ContentSet` may pass through. Not currently used in Python. */ -class ContentFilter extends Unit { +deprecated class ContentFilter extends Unit { TypeTrackerContent getAMatchingContent() { none() } } pragma[inline] -predicate compatibleContents(TypeTrackerContent storeContent, TypeTrackerContent loadContent) { +deprecated predicate compatibleContents( + TypeTrackerContent storeContent, TypeTrackerContent loadContent +) { storeContent = loadContent } -predicate simpleLocalFlowStep = DataFlowPrivate::simpleLocalFlowStepForTypetracking/2; +predicate simpleLocalFlowStep = TypeTrackingImpl::TypeTrackingInput::simpleLocalSmallStep/2; -predicate jumpStep(Node nodeFrom, Node nodeTo) { - DataFlowPrivate::jumpStepSharedWithTypeTracker(nodeFrom, nodeTo) - or - capturedJumpStep(nodeFrom, nodeTo) -} - -predicate capturedJumpStep(Node nodeFrom, Node nodeTo) { - // Jump into a capturing scope. - // - // var = expr - // ... - // def f(): - // ..var is used.. - // - // nodeFrom is `expr` - // nodeTo is entry node for `f` - exists(ScopeEntryDefinition e, SsaSourceVariable var, DefinitionNode def | - e.getSourceVariable() = var and - var.hasDefiningNode(def) - | - nodeTo.asCfgNode() = e.getDefiningNode() and - nodeFrom.asCfgNode() = def.getValue() and - var.getScope().getScope*() = nodeFrom.getScope() - ) -} +predicate jumpStep = TypeTrackingImpl::TypeTrackingInput::jumpStep/2; /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which may depend on the call graph. */ -predicate levelStepCall(Node nodeFrom, Node nodeTo) { none() } +deprecated predicate levelStepCall(Node nodeFrom, Node nodeTo) { none() } /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. */ -predicate levelStepNoCall(Node nodeFrom, Node nodeTo) { - TypeTrackerSummaryFlow::levelStepNoCall(nodeFrom, nodeTo) -} - -/** - * Gets the name of a possible piece of content. For Python, this is currently only attribute names, - * using the name of the attribute for the corresponding content. - */ -string getPossibleContentName() { - Stages::TypeTracking::ref() and // the TypeTracking::append() etc. predicates that we want to cache depend on this predicate, so we can place the `ref()` call here to get around identical files. - result = any(DataFlowPublic::AttrRef a).getAttributeName() -} +predicate levelStepNoCall = TypeTrackingImpl::TypeTrackingInput::levelStepNoCall/2; /** * Holds if `nodeFrom` steps to `nodeTo` by being passed as a parameter in a call. @@ -93,177 +61,43 @@ string getPossibleContentName() { * recursion (or, at best, terrible performance), since identifying calls to library * methods is done using API graphs (which uses type tracking). */ -predicate callStep(DataFlowPublic::ArgumentNode nodeFrom, DataFlowPublic::ParameterNode nodeTo) { - exists( - DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCallable callable, - DataFlowPrivate::ArgumentPosition apos, DataFlowPrivate::ParameterPosition ppos - | - nodeFrom = call.getArgument(apos) and - nodeTo = callable.getParameter(ppos) and - DataFlowPrivate::parameterMatch(ppos, apos) and - callable = call.getCallable() - ) -} +predicate callStep = TypeTrackingImpl::TypeTrackingInput::callStep/2; /** Holds if `nodeFrom` steps to `nodeTo` by being returned from a call. */ -predicate returnStep(DataFlowPrivate::ReturnNode nodeFrom, Node nodeTo) { - exists(DataFlowPrivate::ExtractedDataFlowCall call | - nodeFrom.getEnclosingCallable() = call.getCallable() and - nodeTo.(DataFlowPublic::CfgNode).getNode() = call.getNode() - ) -} +predicate returnStep = TypeTrackingImpl::TypeTrackingInput::returnStep/2; /** * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ -predicate basicStoreStep(Node nodeFrom, Node nodeTo, string content) { - exists(DataFlowPublic::AttrWrite a | - a.mayHaveAttributeName(content) and - nodeFrom = a.getValue() and - nodeTo = a.getObject() - ) - or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content - | - TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, contents) - ) -} +predicate basicStoreStep = TypeTrackingImpl::TypeTrackingInput::storeStep/3; /** * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. */ -predicate basicLoadStep(Node nodeFrom, Node nodeTo, string content) { - exists(DataFlowPublic::AttrRead a | - a.mayHaveAttributeName(content) and - nodeFrom = a.getObject() and - nodeTo = a - ) - or - exists(DataFlowPublic::ContentSet contents | - contents.(DataFlowPublic::AttributeContent).getAttribute() = content - | - TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, contents) - ) -} +predicate basicLoadStep = TypeTrackingImpl::TypeTrackingInput::loadStep/3; /** * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. */ -predicate basicLoadStoreStep(Node nodeFrom, Node nodeTo, string loadContent, string storeContent) { - exists(DataFlowPublic::ContentSet loadContents, DataFlowPublic::ContentSet storeContents | - loadContents.(DataFlowPublic::AttributeContent).getAttribute() = loadContent and - storeContents.(DataFlowPublic::AttributeContent).getAttribute() = storeContent - | - TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContents, storeContents) - ) -} +predicate basicLoadStoreStep = TypeTrackingImpl::TypeTrackingInput::loadStoreStep/4; /** * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. */ -predicate basicWithoutContentStep(Node nodeFrom, Node nodeTo, ContentFilter filter) { none() } +deprecated predicate basicWithoutContentStep(Node nodeFrom, Node nodeTo, ContentFilter filter) { + none() +} /** * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. */ -predicate basicWithContentStep(Node nodeFrom, Node nodeTo, ContentFilter filter) { none() } +deprecated predicate basicWithContentStep(Node nodeFrom, Node nodeTo, ContentFilter filter) { + none() +} /** * A utility class that is equivalent to `boolean` but does not require type joining. */ -class Boolean extends boolean { +deprecated class Boolean extends boolean { Boolean() { this = true or this = false } } - -private import SummaryTypeTracker as SummaryTypeTracker -private import semmle.python.dataflow.new.internal.FlowSummaryImpl as FlowSummaryImpl -private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch - -pragma[noinline] -private predicate argumentPositionMatch( - DataFlowPublic::CallCfgNode call, DataFlowPublic::Node arg, - DataFlowDispatch::ParameterPosition ppos -) { - exists(DataFlowDispatch::ArgumentPosition apos | - DataFlowDispatch::parameterMatch(ppos, apos) and - DataFlowDispatch::normalCallArg(call.getNode(), arg, apos) - ) -} - -private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { - // Dataflow nodes - class Node = DataFlowPublic::Node; - - // Content - class TypeTrackerContent = DataFlowPublic::ContentSet; - - class TypeTrackerContentFilter = ContentFilter; - - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content) { none() } - - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content) { none() } - - // Callables - class SummarizedCallable = FlowSummaryImpl::Private::SummarizedCallableImpl; - - // Summaries and their stacks - class SummaryComponent = FlowSummaryImpl::Private::SummaryComponent; - - class SummaryComponentStack = FlowSummaryImpl::Private::SummaryComponentStack; - - predicate singleton = FlowSummaryImpl::Private::SummaryComponentStack::singleton/1; - - predicate push = FlowSummaryImpl::Private::SummaryComponentStack::push/2; - - // Relating content to summaries - predicate content = FlowSummaryImpl::Private::SummaryComponent::content/1; - - SummaryComponent withoutContent(TypeTrackerContent contents) { none() } - - SummaryComponent withContent(TypeTrackerContent contents) { none() } - - predicate return = FlowSummaryImpl::Private::SummaryComponent::return/0; - - // Relating nodes to summaries - Node argumentOf(Node call, SummaryComponent arg, boolean isPostUpdate) { - exists(DataFlowDispatch::ParameterPosition pos | - arg = FlowSummaryImpl::Private::SummaryComponent::argument(pos) and - argumentPositionMatch(call, result, pos) and - isPostUpdate = [false, true] // todo: implement when/if Python uses post-update nodes in type tracking - ) - } - - Node parameterOf(Node callable, SummaryComponent param) { - exists( - DataFlowDispatch::ArgumentPosition apos, DataFlowDispatch::ParameterPosition ppos, Parameter p - | - param = FlowSummaryImpl::Private::SummaryComponent::parameter(apos) and - DataFlowDispatch::parameterMatch(ppos, apos) and - result.asCfgNode().getNode() = p and - ( - exists(int i | ppos.isPositional(i) | - p = callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getArg(i) - ) - or - exists(string name | ppos.isKeyword(name) | - p = callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getArgByName(name) - ) - ) - ) - } - - Node returnOf(Node callable, SummaryComponent return) { - return = FlowSummaryImpl::Private::SummaryComponent::return() and - // `result` should be the return value of a callable expression (lambda or function) referenced by `callable` - result.asCfgNode() = - callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getAReturnValueFlowNode() - } - - // Relating callables to nodes - Node callTo(SummarizedCallable callable) { - result = callable.(DataFlowDispatch::LibraryCallable).getACallSimple() - } -} - -private module TypeTrackerSummaryFlow = SummaryTypeTracker::SummaryFlow; diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll new file mode 100644 index 00000000000..6e1482ae74c --- /dev/null +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -0,0 +1,274 @@ +import codeql.util.Unit +import codeql.typetracking.TypeTracking as Shared +import codeql.typetracking.internal.TypeTrackingImpl as SharedImpl +private import python +private import semmle.python.internal.CachedStages +private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic +private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate +private import SummaryTypeTracker as SummaryTypeTracker +private import semmle.python.dataflow.new.internal.FlowSummaryImpl as FlowSummaryImpl +private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch + +private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { + // Dataflow nodes + class Node = DataFlowPublic::Node; + + // Content + class TypeTrackerContent = DataFlowPublic::ContentSet; + + class TypeTrackerContentFilter = TypeTrackingInput::ContentFilter; + + TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content) { none() } + + TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content) { none() } + + // Callables + class SummarizedCallable = FlowSummaryImpl::Private::SummarizedCallableImpl; + + // Summaries and their stacks + class SummaryComponent = FlowSummaryImpl::Private::SummaryComponent; + + class SummaryComponentStack = FlowSummaryImpl::Private::SummaryComponentStack; + + predicate singleton = FlowSummaryImpl::Private::SummaryComponentStack::singleton/1; + + predicate push = FlowSummaryImpl::Private::SummaryComponentStack::push/2; + + // Relating content to summaries + predicate content = FlowSummaryImpl::Private::SummaryComponent::content/1; + + SummaryComponent withoutContent(TypeTrackerContent contents) { none() } + + SummaryComponent withContent(TypeTrackerContent contents) { none() } + + predicate return = FlowSummaryImpl::Private::SummaryComponent::return/0; + + pragma[noinline] + private predicate argumentPositionMatch( + DataFlowPublic::CallCfgNode call, DataFlowPublic::Node arg, + DataFlowDispatch::ParameterPosition ppos + ) { + exists(DataFlowDispatch::ArgumentPosition apos | + DataFlowDispatch::parameterMatch(ppos, apos) and + DataFlowDispatch::normalCallArg(call.getNode(), arg, apos) + ) + } + + // Relating nodes to summaries + Node argumentOf(Node call, SummaryComponent arg, boolean isPostUpdate) { + exists(DataFlowDispatch::ParameterPosition pos | + arg = FlowSummaryImpl::Private::SummaryComponent::argument(pos) and + argumentPositionMatch(call, result, pos) and + isPostUpdate = [false, true] // todo: implement when/if Python uses post-update nodes in type tracking + ) + } + + Node parameterOf(Node callable, SummaryComponent param) { + exists( + DataFlowDispatch::ArgumentPosition apos, DataFlowDispatch::ParameterPosition ppos, Parameter p + | + param = FlowSummaryImpl::Private::SummaryComponent::parameter(apos) and + DataFlowDispatch::parameterMatch(ppos, apos) and + result.asCfgNode().getNode() = p and + ( + exists(int i | ppos.isPositional(i) | + p = callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getArg(i) + ) + or + exists(string name | ppos.isKeyword(name) | + p = callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getArgByName(name) + ) + ) + ) + } + + Node returnOf(Node callable, SummaryComponent return) { + return = FlowSummaryImpl::Private::SummaryComponent::return() and + // `result` should be the return value of a callable expression (lambda or function) referenced by `callable` + result.asCfgNode() = + callable.getALocalSource().asExpr().(CallableExpr).getInnerScope().getAReturnValueFlowNode() + } + + // Relating callables to nodes + Node callTo(SummarizedCallable callable) { + result = callable.(DataFlowDispatch::LibraryCallable).getACallSimple() + } +} + +private module TypeTrackerSummaryFlow = SummaryTypeTracker::SummaryFlow; + +/** + * Gets the name of a possible piece of content. For Python, this is currently only attribute names, + * using the name of the attribute for the corresponding content. + */ +private string getPossibleContentName() { + Stages::TypeTracking::ref() and // the TypeTracking::append() etc. predicates that we want to cache depend on this predicate, so we can place the `ref()` call here to get around identical files. + result = any(DataFlowPublic::AttrRef a).getAttributeName() +} + +module TypeTrackingInput implements Shared::TypeTrackingInput { + class Node = DataFlowPublic::Node; + + class LocalSourceNode = DataFlowPublic::LocalSourceNode; + + class Content instanceof string { + Content() { this = getPossibleContentName() } + + string toString() { result = this } + } + + /** + * A label to use for `WithContent` and `WithoutContent` steps, restricting + * which `ContentSet` may pass through. + */ + class ContentFilter extends Unit { + Content getAMatchingContent() { none() } + } + + /** + * Holds if a value stored with `storeContents` can be read back with `loadContents`. + */ + pragma[inline] + predicate compatibleContents(Content storeContents, Content loadContents) { + storeContents = loadContents + } + + /** Holds if there is a simple local flow step from `nodeFrom` to `nodeTo` */ + predicate simpleLocalSmallStep = DataFlowPrivate::simpleLocalFlowStepForTypetracking/2; + + /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which may depend on the call graph. */ + predicate levelStepCall(Node nodeFrom, LocalSourceNode nodeTo) { none() } + + /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. */ + predicate levelStepNoCall(Node nodeFrom, LocalSourceNode nodeTo) { + TypeTrackerSummaryFlow::levelStepNoCall(nodeFrom, nodeTo) + } + + /** + * Holds if `nodeFrom` steps to `nodeTo` by being passed as a parameter in a call. + * + * Flow into summarized library methods is not included, as that will lead to negative + * recursion (or, at best, terrible performance), since identifying calls to library + * methods is done using API graphs (which uses type tracking). + */ + predicate callStep(Node nodeFrom, LocalSourceNode nodeTo) { + exists( + DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCallable callable, + DataFlowPrivate::ArgumentPosition apos, DataFlowPrivate::ParameterPosition ppos + | + nodeFrom = call.getArgument(apos) and + nodeTo = callable.getParameter(ppos) and + DataFlowPrivate::parameterMatch(ppos, apos) and + callable = call.getCallable() + ) + } + + /** + * Holds if `nodeFrom` steps to `nodeTo` by being returned from a call. + * + * Flow out of summarized library methods is not included, as that will lead to negative + * recursion (or, at best, terrible performance), since identifying calls to library + * methods is done using API graphs (which uses type tracking). + */ + predicate returnStep(Node nodeFrom, LocalSourceNode nodeTo) { + exists(DataFlowPrivate::ExtractedDataFlowCall call | + nodeFrom.(DataFlowPrivate::ReturnNode).getEnclosingCallable() = call.getCallable() and + nodeTo.(DataFlowPublic::CfgNode).getNode() = call.getNode() + ) + } + + /** + * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. + */ + predicate storeStep(Node nodeFrom, Node nodeTo, Content content) { + exists(DataFlowPublic::AttrWrite a | + a.mayHaveAttributeName(content) and + nodeFrom = a.getValue() and + nodeTo = a.getObject() + ) + or + exists(DataFlowPublic::ContentSet contents | + contents.(DataFlowPublic::AttributeContent).getAttribute() = content + | + TypeTrackerSummaryFlow::basicStoreStep(nodeFrom, nodeTo, contents) + ) + } + + /** + * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. + */ + predicate loadStep(Node nodeFrom, LocalSourceNode nodeTo, Content content) { + exists(DataFlowPublic::AttrRead a | + a.mayHaveAttributeName(content) and + nodeFrom = a.getObject() and + nodeTo = a + ) + or + exists(DataFlowPublic::ContentSet contents | + contents.(DataFlowPublic::AttributeContent).getAttribute() = content + | + TypeTrackerSummaryFlow::basicLoadStep(nodeFrom, nodeTo, contents) + ) + } + + /** + * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. + */ + predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content loadContent, Content storeContent) { + exists(DataFlowPublic::ContentSet loadContents, DataFlowPublic::ContentSet storeContents | + loadContents.(DataFlowPublic::AttributeContent).getAttribute() = loadContent and + storeContents.(DataFlowPublic::AttributeContent).getAttribute() = storeContent + | + TypeTrackerSummaryFlow::basicLoadStoreStep(nodeFrom, nodeTo, loadContents, storeContents) + ) + } + + /** + * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. + */ + predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter filter) { + TypeTrackerSummaryFlow::basicWithContentStep(nodeFrom, nodeTo, filter) + } + + /** + * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. + */ + predicate withoutContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter filter) { + TypeTrackerSummaryFlow::basicWithoutContentStep(nodeFrom, nodeTo, filter) + } + + private predicate capturedJumpStep(Node nodeFrom, Node nodeTo) { + // Jump into a capturing scope. + // + // var = expr + // ... + // def f(): + // ..var is used.. + // + // nodeFrom is `expr` + // nodeTo is entry node for `f` + exists(ScopeEntryDefinition e, SsaSourceVariable var, DefinitionNode def | + e.getSourceVariable() = var and + var.hasDefiningNode(def) + | + nodeTo.asCfgNode() = e.getDefiningNode() and + nodeFrom.asCfgNode() = def.getValue() and + var.getScope().getScope*() = nodeFrom.getScope() + ) + } + + /** + * Holds if data can flow from `node1` to `node2` in a way that discards call contexts. + */ + predicate jumpStep(Node nodeFrom, LocalSourceNode nodeTo) { + DataFlowPrivate::jumpStepSharedWithTypeTracker(nodeFrom, nodeTo) + or + capturedJumpStep(nodeFrom, nodeTo) + } + + predicate hasFeatureBacktrackStoreTarget() { any() } + + predicate nonStandardFlowsTo(LocalSourceNode localSource, Node dst) { localSource.flowsTo(dst) } +} + +import SharedImpl::TypeTracking diff --git a/python/ql/lib/semmle/python/internal/CachedStages.qll b/python/ql/lib/semmle/python/internal/CachedStages.qll index 40dda556caa..da32b4c071e 100644 --- a/python/ql/lib/semmle/python/internal/CachedStages.qll +++ b/python/ql/lib/semmle/python/internal/CachedStages.qll @@ -111,6 +111,7 @@ module Stages { predicate ref() { 1 = 1 } private import semmle.python.dataflow.new.DataFlow::DataFlow as NewDataFlow + private import semmle.python.dataflow.new.internal.TypeTrackingImpl as TypeTrackingImpl private import semmle.python.ApiGraphs::API as API /** @@ -121,7 +122,7 @@ module Stages { predicate backref() { 1 = 1 or - exists(any(NewDataFlow::TypeTracker t).append(_)) + exists(TypeTrackingImpl::append(_, _)) or exists(any(API::Node n).getAMember().getAValueReachableFromSource()) } diff --git a/python/ql/lib/semmle/python/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll index a39ffc27e87..6d245f472de 100644 --- a/python/ql/lib/semmle/python/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll @@ -50,7 +50,7 @@ module UnsafeShellCommandConstruction { source = backtrackShellExec(TypeTracker::TypeBackTracker::end(), shellExec) } - import semmle.python.dataflow.new.TypeTracker as TypeTracker + import semmle.python.dataflow.new.TypeTracking as TypeTracker private DataFlow::LocalSourceNode backtrackShellExec( TypeTracker::TypeBackTracker t, Concepts::SystemCommandExecution shellExec diff --git a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll index acd9c2136c7..b2e29e9999e 100644 --- a/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/experimental/dataflow/summaries/TestSummaries.qll @@ -8,7 +8,7 @@ private import semmle.python.ApiGraphs * `getACall` predicate on `SummarizedCallable`. */ module RecursionGuard { - private import semmle.python.dataflow.new.internal.TypeTrackerSpecific as TT + private import semmle.python.dataflow.new.internal.TypeTrackingImpl::TypeTrackingInput as TT private class RecursionGuard extends SummarizedCallable { RecursionGuard() { this = "RecursionGuard" } diff --git a/python/ql/test/experimental/dataflow/typetracking-summaries/TestSummaries.qll b/python/ql/test/experimental/dataflow/typetracking-summaries/TestSummaries.qll index fa98b6f84a0..47e0fda7c0b 100644 --- a/python/ql/test/experimental/dataflow/typetracking-summaries/TestSummaries.qll +++ b/python/ql/test/experimental/dataflow/typetracking-summaries/TestSummaries.qll @@ -8,7 +8,7 @@ private import semmle.python.ApiGraphs * `getACall` predicate on `SummarizedCallable`. */ module RecursionGuard { - private import semmle.python.dataflow.new.internal.TypeTrackerSpecific as TT + private import semmle.python.dataflow.new.internal.TypeTrackingImpl::TypeTrackingInput as TT private class RecursionGuard extends SummarizedCallable { RecursionGuard() { this = "TypeTrackingSummariesRecursionGuard" } diff --git a/python/ql/test/experimental/dataflow/typetracking-summaries/tracked.ql b/python/ql/test/experimental/dataflow/typetracking-summaries/tracked.ql index 6ce1afa8d60..b4b626ff97e 100644 --- a/python/ql/test/experimental/dataflow/typetracking-summaries/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking-summaries/tracked.ql @@ -1,6 +1,6 @@ import python import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TypeTracker +import semmle.python.dataflow.new.TypeTracking import TestUtilities.InlineExpectationsTest import semmle.python.ApiGraphs import TestSummaries diff --git a/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql b/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql index 74f5f259319..5c8414f40fa 100644 --- a/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql +++ b/python/ql/test/experimental/dataflow/typetracking/moduleattr.ql @@ -1,6 +1,6 @@ import python import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TypeTracker +import semmle.python.dataflow.new.TypeTracking import semmle.python.ApiGraphs private DataFlow::TypeTrackingNode module_tracker(TypeTracker t) { diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index d6adbf5d7ab..e1e70761221 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -1,6 +1,6 @@ import python import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TypeTracker +import semmle.python.dataflow.new.TypeTracking import TestUtilities.InlineExpectationsTest import semmle.python.ApiGraphs From 1e24de7e832cf00b1cecf2ded682b21f3feb3ee7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 20 Nov 2023 13:35:06 +0100 Subject: [PATCH 031/205] Copy `SummaryTypeTracker.qll` to `typetracking` pack --- .../internal/SummaryTypeTracker.qll | 412 ++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll diff --git a/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll new file mode 100644 index 00000000000..efe7629fffc --- /dev/null +++ b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll @@ -0,0 +1,412 @@ +/** + * Provides the implementation of type tracking steps through flow summaries. + * To use this, you must implement the `Input` signature. You can then use the predicates in the `Output` + * signature to implement the predicates of the same names inside `TypeTrackerSpecific.qll`. + */ + +/** The classes and predicates needed to generate type-tracking steps from summaries. */ +signature module Input { + // Dataflow nodes + class Node; + + // Content + class TypeTrackerContent; + + class TypeTrackerContentFilter; + + // Relating content and filters + /** + * Gets a content filter to use for a `WithoutContent[content]` step, (data is not allowed to be stored in `content`) + * or has no result if + * the step should be treated as ordinary flow. + * + * `WithoutContent` is often used to perform strong updates on individual collection elements, but for + * type-tracking this is rarely beneficial and quite expensive. However, `WithoutContent` can be quite useful + * for restricting the type of an object, and in these cases we translate it to a filter. + */ + TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content); + + /** + * Gets a content filter to use for a `WithContent[content]` step, (data must be stored in `content`) + * or has no result if + * the step cannot be handled by type-tracking. + * + * `WithContent` is often used to perform strong updates on individual collection elements (or rather + * to preserve those that didn't get updated). But for type-tracking this is rarely beneficial and quite expensive. + * However, `WithContent` can be quite useful for restricting the type of an object, and in these cases we translate it to a filter. + */ + TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content); + + // Summaries and their stacks + class SummaryComponent; + + class SummaryComponentStack { + SummaryComponent head(); + } + + /** Gets a singleton stack containing `component`. */ + SummaryComponentStack singleton(SummaryComponent component); + + /** + * Gets the stack obtained by pushing `head` onto `tail`. + */ + SummaryComponentStack push(SummaryComponent head, SummaryComponentStack tail); + + /** Gets a singleton stack representing a return. */ + SummaryComponent return(); + + // Relating content to summaries + /** Gets a summary component for content `c`. */ + SummaryComponent content(TypeTrackerContent contents); + + /** Gets a summary component where data is not allowed to be stored in `contents`. */ + SummaryComponent withoutContent(TypeTrackerContent contents); + + /** Gets a summary component where data must be stored in `contents`. */ + SummaryComponent withContent(TypeTrackerContent contents); + + // Callables + class SummarizedCallable { + predicate propagatesFlow( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ); + } + + // Relating nodes to summaries + /** + * Gets a dataflow node respresenting the argument of `call` indicated by `arg`. + * + * Returns the post-update node of the argument when `isPostUpdate` is true. + */ + Node argumentOf(Node call, SummaryComponent arg, boolean isPostUpdate); + + /** Gets a dataflow node respresenting the parameter of `callable` indicated by `param`. */ + Node parameterOf(Node callable, SummaryComponent param); + + /** Gets a dataflow node respresenting the return of `callable` indicated by `return`. */ + Node returnOf(Node callable, SummaryComponent return); + + // Relating callables to nodes + /** Gets a dataflow node respresenting a call to `callable`. */ + Node callTo(SummarizedCallable callable); +} + +/** + * The predicates provided by a summary type tracker. + * These are meant to be used in `TypeTrackerSpecific.qll` + * inside the predicates of the same names. + */ +signature module Output { + /** + * Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. + */ + predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo); + + /** + * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. + */ + predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); + + /** + * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. + */ + predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); + + /** + * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. + */ + predicate basicLoadStoreStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, + I::TypeTrackerContent storeContent + ); + + /** + * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. + */ + predicate basicWithoutContentStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter + ); + + /** + * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. + */ + predicate basicWithContentStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter + ); +} + +/** + * Implementation of the summary type tracker, that is type tracking through flow summaries. + */ +module SummaryFlow implements Output { + pragma[nomagic] + private predicate isNonLocal(I::SummaryComponent component) { + component = I::content(_) + or + component = I::withContent(_) + } + + pragma[nomagic] + private predicate hasLoadSummary( + I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, + I::SummaryComponentStack output + ) { + callable.propagatesFlow(I::push(I::content(contents), input), output, true) and + not isNonLocal(input.head()) and + not isNonLocal(output.head()) + } + + pragma[nomagic] + private predicate hasStoreSummary( + I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, + I::SummaryComponentStack output + ) { + not isNonLocal(input.head()) and + not isNonLocal(output.head()) and + ( + callable.propagatesFlow(input, I::push(I::content(contents), output), true) + or + // Allow the input to start with an arbitrary WithoutContent[X]. + // Since type-tracking only tracks one content deep, and we're about to store into another content, + // we're already preventing the input from being in a content. + callable + .propagatesFlow(I::push(I::withoutContent(_), input), + I::push(I::content(contents), output), true) + ) + } + + pragma[nomagic] + private predicate hasLoadStoreSummary( + I::SummarizedCallable callable, I::TypeTrackerContent loadContents, + I::TypeTrackerContent storeContents, I::SummaryComponentStack input, + I::SummaryComponentStack output + ) { + callable + .propagatesFlow(I::push(I::content(loadContents), input), + I::push(I::content(storeContents), output), true) and + not isNonLocal(input.head()) and + not isNonLocal(output.head()) + } + + pragma[nomagic] + private predicate hasWithoutContentSummary( + I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, + I::SummaryComponentStack input, I::SummaryComponentStack output + ) { + exists(I::TypeTrackerContent content | + callable.propagatesFlow(I::push(I::withoutContent(content), input), output, true) and + filter = I::getFilterFromWithoutContentStep(content) and + not isNonLocal(input.head()) and + not isNonLocal(output.head()) and + input != output + ) + } + + pragma[nomagic] + private predicate hasWithContentSummary( + I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, + I::SummaryComponentStack input, I::SummaryComponentStack output + ) { + exists(I::TypeTrackerContent content | + callable.propagatesFlow(I::push(I::withContent(content), input), output, true) and + filter = I::getFilterFromWithContentStep(content) and + not isNonLocal(input.head()) and + not isNonLocal(output.head()) and + input != output + ) + } + + private predicate componentLevelStep(I::SummaryComponent component) { + exists(I::TypeTrackerContent content | + component = I::withoutContent(content) and + not exists(I::getFilterFromWithoutContentStep(content)) + ) + } + + /** + * Gets a data flow `I::Node` corresponding an argument or return value of `call`, + * as specified by `component`. `isOutput` indicates whether the node represents + * an output node or an input node. + */ + bindingset[call, component] + private I::Node evaluateSummaryComponentLocal( + I::Node call, I::SummaryComponent component, boolean isOutput + ) { + result = I::argumentOf(call, component, isOutput) + or + component = I::return() and + result = call and + isOutput = true + } + + /** + * Holds if `callable` is relevant for type-tracking and we therefore want `stack` to + * be evaluated locally at its call sites. + */ + pragma[nomagic] + private predicate dependsOnSummaryComponentStack( + I::SummarizedCallable callable, I::SummaryComponentStack stack + ) { + exists(I::callTo(callable)) and + ( + callable.propagatesFlow(stack, _, true) + or + callable.propagatesFlow(_, stack, true) + or + // include store summaries as they may skip an initial step at the input + hasStoreSummary(callable, _, stack, _) + ) + or + dependsOnSummaryComponentStackCons(callable, _, stack) + } + + pragma[nomagic] + private predicate dependsOnSummaryComponentStackCons( + I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail + ) { + dependsOnSummaryComponentStack(callable, I::push(head, tail)) + } + + pragma[nomagic] + private predicate dependsOnSummaryComponentStackConsLocal( + I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail + ) { + dependsOnSummaryComponentStackCons(callable, head, tail) and + not isNonLocal(head) + } + + pragma[nomagic] + private predicate dependsOnSummaryComponentStackLeaf( + I::SummarizedCallable callable, I::SummaryComponent leaf + ) { + dependsOnSummaryComponentStack(callable, I::singleton(leaf)) + } + + /** + * Gets a data flow I::Node corresponding to the local input or output of `call` + * identified by `stack`, if possible. + */ + pragma[nomagic] + private I::Node evaluateSummaryComponentStackLocal( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack stack, boolean isOutput + ) { + exists(I::SummaryComponent component | + dependsOnSummaryComponentStackLeaf(callable, component) and + stack = I::singleton(component) and + call = I::callTo(callable) and + result = evaluateSummaryComponentLocal(call, component, isOutput) + ) + or + exists( + I::Node prev, I::SummaryComponent head, I::SummaryComponentStack tail, boolean isOutput0 + | + prev = evaluateSummaryComponentStackLocal(callable, call, tail, isOutput0) and + dependsOnSummaryComponentStackConsLocal(callable, pragma[only_bind_into](head), + pragma[only_bind_out](tail)) and + stack = I::push(pragma[only_bind_out](head), pragma[only_bind_out](tail)) + | + // `Parameter[X]` is only allowed in the output of flow summaries (hence `isOutput = true`), + // however the target of the parameter (e.g. `Argument[Y].Parameter[X]`) should be fetched + // not from a post-update argument node (hence `isOutput0 = false`) + result = I::parameterOf(prev, head) and + isOutput0 = false and + isOutput = true + or + // `ReturnValue` is only allowed in the input of flow summaries (hence `isOutput = false`), + // and the target of the return value (e.g. `Argument[X].ReturnValue`) should be fetched not + // from a post-update argument node (hence `isOutput0 = false`) + result = I::returnOf(prev, head) and + isOutput0 = false and + isOutput = false + or + componentLevelStep(head) and + result = prev and + isOutput = isOutput0 + ) + } + + // Implement Output + predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + callable.propagatesFlow(input, output, true) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } + + predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + hasLoadSummary(callable, content, pragma[only_bind_into](input), + pragma[only_bind_into](output)) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } + + predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + hasStoreSummary(callable, content, pragma[only_bind_into](input), + pragma[only_bind_into](output)) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } + + predicate basicLoadStoreStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, + I::TypeTrackerContent storeContent + ) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + hasLoadStoreSummary(callable, loadContent, storeContent, pragma[only_bind_into](input), + pragma[only_bind_into](output)) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } + + predicate basicWithoutContentStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter + ) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + hasWithoutContentSummary(callable, filter, pragma[only_bind_into](input), + pragma[only_bind_into](output)) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } + + predicate basicWithContentStep( + I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter + ) { + exists( + I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, + I::SummaryComponentStack output + | + hasWithContentSummary(callable, filter, pragma[only_bind_into](input), + pragma[only_bind_into](output)) and + call = I::callTo(callable) and + nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and + nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) + ) + } +} From 84aa9f17a0ab2d7739afca4d1df6a617fb4b5d30 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 20 Nov 2023 13:37:19 +0100 Subject: [PATCH 032/205] Python/Ruby: Use `SummaryTypeTracker` from `typetracking` pack --- config/identical-files.json | 4 - .../new/internal/SummaryTypeTracker.qll | 412 ------------------ .../new/internal/TypeTrackingImpl.qll | 14 +- .../internal/SummaryTypeTracker.qll | 412 ------------------ .../internal/TypeTrackingImpl.qll | 10 +- .../internal/SummaryTypeTracker.qll | 67 ++- 6 files changed, 40 insertions(+), 879 deletions(-) delete mode 100644 python/ql/lib/semmle/python/dataflow/new/internal/SummaryTypeTracker.qll delete mode 100644 ruby/ql/lib/codeql/ruby/typetracking/internal/SummaryTypeTracker.qll diff --git a/config/identical-files.json b/config/identical-files.json index 77bee6b5097..c56fbb40f8f 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -454,10 +454,6 @@ "ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll", "swift/ql/lib/codeql/swift/security/internal/SensitiveDataHeuristics.qll" ], - "SummaryTypeTracker": [ - "python/ql/lib/semmle/python/dataflow/new/internal/SummaryTypeTracker.qll", - "ruby/ql/lib/codeql/ruby/typetracking/internal/SummaryTypeTracker.qll" - ], "IncompleteUrlSubstringSanitization": [ "javascript/ql/src/Security/CWE-020/IncompleteUrlSubstringSanitization.qll", "ruby/ql/src/queries/security/cwe-020/IncompleteUrlSubstringSanitization.qll" diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/SummaryTypeTracker.qll b/python/ql/lib/semmle/python/dataflow/new/internal/SummaryTypeTracker.qll deleted file mode 100644 index efe7629fffc..00000000000 --- a/python/ql/lib/semmle/python/dataflow/new/internal/SummaryTypeTracker.qll +++ /dev/null @@ -1,412 +0,0 @@ -/** - * Provides the implementation of type tracking steps through flow summaries. - * To use this, you must implement the `Input` signature. You can then use the predicates in the `Output` - * signature to implement the predicates of the same names inside `TypeTrackerSpecific.qll`. - */ - -/** The classes and predicates needed to generate type-tracking steps from summaries. */ -signature module Input { - // Dataflow nodes - class Node; - - // Content - class TypeTrackerContent; - - class TypeTrackerContentFilter; - - // Relating content and filters - /** - * Gets a content filter to use for a `WithoutContent[content]` step, (data is not allowed to be stored in `content`) - * or has no result if - * the step should be treated as ordinary flow. - * - * `WithoutContent` is often used to perform strong updates on individual collection elements, but for - * type-tracking this is rarely beneficial and quite expensive. However, `WithoutContent` can be quite useful - * for restricting the type of an object, and in these cases we translate it to a filter. - */ - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content); - - /** - * Gets a content filter to use for a `WithContent[content]` step, (data must be stored in `content`) - * or has no result if - * the step cannot be handled by type-tracking. - * - * `WithContent` is often used to perform strong updates on individual collection elements (or rather - * to preserve those that didn't get updated). But for type-tracking this is rarely beneficial and quite expensive. - * However, `WithContent` can be quite useful for restricting the type of an object, and in these cases we translate it to a filter. - */ - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content); - - // Summaries and their stacks - class SummaryComponent; - - class SummaryComponentStack { - SummaryComponent head(); - } - - /** Gets a singleton stack containing `component`. */ - SummaryComponentStack singleton(SummaryComponent component); - - /** - * Gets the stack obtained by pushing `head` onto `tail`. - */ - SummaryComponentStack push(SummaryComponent head, SummaryComponentStack tail); - - /** Gets a singleton stack representing a return. */ - SummaryComponent return(); - - // Relating content to summaries - /** Gets a summary component for content `c`. */ - SummaryComponent content(TypeTrackerContent contents); - - /** Gets a summary component where data is not allowed to be stored in `contents`. */ - SummaryComponent withoutContent(TypeTrackerContent contents); - - /** Gets a summary component where data must be stored in `contents`. */ - SummaryComponent withContent(TypeTrackerContent contents); - - // Callables - class SummarizedCallable { - predicate propagatesFlow( - SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue - ); - } - - // Relating nodes to summaries - /** - * Gets a dataflow node respresenting the argument of `call` indicated by `arg`. - * - * Returns the post-update node of the argument when `isPostUpdate` is true. - */ - Node argumentOf(Node call, SummaryComponent arg, boolean isPostUpdate); - - /** Gets a dataflow node respresenting the parameter of `callable` indicated by `param`. */ - Node parameterOf(Node callable, SummaryComponent param); - - /** Gets a dataflow node respresenting the return of `callable` indicated by `return`. */ - Node returnOf(Node callable, SummaryComponent return); - - // Relating callables to nodes - /** Gets a dataflow node respresenting a call to `callable`. */ - Node callTo(SummarizedCallable callable); -} - -/** - * The predicates provided by a summary type tracker. - * These are meant to be used in `TypeTrackerSpecific.qll` - * inside the predicates of the same names. - */ -signature module Output { - /** - * Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. - */ - predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo); - - /** - * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. - */ - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); - - /** - * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. - */ - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); - - /** - * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. - */ - predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent - ); - - /** - * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. - */ - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); - - /** - * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. - */ - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); -} - -/** - * Implementation of the summary type tracker, that is type tracking through flow summaries. - */ -module SummaryFlow implements Output { - pragma[nomagic] - private predicate isNonLocal(I::SummaryComponent component) { - component = I::content(_) - or - component = I::withContent(_) - } - - pragma[nomagic] - private predicate hasLoadSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - callable.propagatesFlow(I::push(I::content(contents), input), output, true) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) - } - - pragma[nomagic] - private predicate hasStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - ( - callable.propagatesFlow(input, I::push(I::content(contents), output), true) - or - // Allow the input to start with an arbitrary WithoutContent[X]. - // Since type-tracking only tracks one content deep, and we're about to store into another content, - // we're already preventing the input from being in a content. - callable - .propagatesFlow(I::push(I::withoutContent(_), input), - I::push(I::content(contents), output), true) - ) - } - - pragma[nomagic] - private predicate hasLoadStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent loadContents, - I::TypeTrackerContent storeContents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - callable - .propagatesFlow(I::push(I::content(loadContents), input), - I::push(I::content(storeContents), output), true) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) - } - - pragma[nomagic] - private predicate hasWithoutContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output - ) { - exists(I::TypeTrackerContent content | - callable.propagatesFlow(I::push(I::withoutContent(content), input), output, true) and - filter = I::getFilterFromWithoutContentStep(content) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - input != output - ) - } - - pragma[nomagic] - private predicate hasWithContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output - ) { - exists(I::TypeTrackerContent content | - callable.propagatesFlow(I::push(I::withContent(content), input), output, true) and - filter = I::getFilterFromWithContentStep(content) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - input != output - ) - } - - private predicate componentLevelStep(I::SummaryComponent component) { - exists(I::TypeTrackerContent content | - component = I::withoutContent(content) and - not exists(I::getFilterFromWithoutContentStep(content)) - ) - } - - /** - * Gets a data flow `I::Node` corresponding an argument or return value of `call`, - * as specified by `component`. `isOutput` indicates whether the node represents - * an output node or an input node. - */ - bindingset[call, component] - private I::Node evaluateSummaryComponentLocal( - I::Node call, I::SummaryComponent component, boolean isOutput - ) { - result = I::argumentOf(call, component, isOutput) - or - component = I::return() and - result = call and - isOutput = true - } - - /** - * Holds if `callable` is relevant for type-tracking and we therefore want `stack` to - * be evaluated locally at its call sites. - */ - pragma[nomagic] - private predicate dependsOnSummaryComponentStack( - I::SummarizedCallable callable, I::SummaryComponentStack stack - ) { - exists(I::callTo(callable)) and - ( - callable.propagatesFlow(stack, _, true) - or - callable.propagatesFlow(_, stack, true) - or - // include store summaries as they may skip an initial step at the input - hasStoreSummary(callable, _, stack, _) - ) - or - dependsOnSummaryComponentStackCons(callable, _, stack) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackCons( - I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail - ) { - dependsOnSummaryComponentStack(callable, I::push(head, tail)) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackConsLocal( - I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail - ) { - dependsOnSummaryComponentStackCons(callable, head, tail) and - not isNonLocal(head) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackLeaf( - I::SummarizedCallable callable, I::SummaryComponent leaf - ) { - dependsOnSummaryComponentStack(callable, I::singleton(leaf)) - } - - /** - * Gets a data flow I::Node corresponding to the local input or output of `call` - * identified by `stack`, if possible. - */ - pragma[nomagic] - private I::Node evaluateSummaryComponentStackLocal( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack stack, boolean isOutput - ) { - exists(I::SummaryComponent component | - dependsOnSummaryComponentStackLeaf(callable, component) and - stack = I::singleton(component) and - call = I::callTo(callable) and - result = evaluateSummaryComponentLocal(call, component, isOutput) - ) - or - exists( - I::Node prev, I::SummaryComponent head, I::SummaryComponentStack tail, boolean isOutput0 - | - prev = evaluateSummaryComponentStackLocal(callable, call, tail, isOutput0) and - dependsOnSummaryComponentStackConsLocal(callable, pragma[only_bind_into](head), - pragma[only_bind_out](tail)) and - stack = I::push(pragma[only_bind_out](head), pragma[only_bind_out](tail)) - | - // `Parameter[X]` is only allowed in the output of flow summaries (hence `isOutput = true`), - // however the target of the parameter (e.g. `Argument[Y].Parameter[X]`) should be fetched - // not from a post-update argument node (hence `isOutput0 = false`) - result = I::parameterOf(prev, head) and - isOutput0 = false and - isOutput = true - or - // `ReturnValue` is only allowed in the input of flow summaries (hence `isOutput = false`), - // and the target of the return value (e.g. `Argument[X].ReturnValue`) should be fetched not - // from a post-update argument node (hence `isOutput0 = false`) - result = I::returnOf(prev, head) and - isOutput0 = false and - isOutput = false - or - componentLevelStep(head) and - result = prev and - isOutput = isOutput0 - ) - } - - // Implement Output - predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - callable.propagatesFlow(input, output, true) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasLoadSummary(callable, content, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasStoreSummary(callable, content, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasLoadStoreSummary(callable, loadContent, storeContent, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasWithoutContentSummary(callable, filter, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasWithContentSummary(callable, filter, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } -} diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 6e1482ae74c..4c3538d75f7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -5,7 +5,7 @@ private import python private import semmle.python.internal.CachedStages private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate -private import SummaryTypeTracker as SummaryTypeTracker +private import codeql.typetracking.internal.SummaryTypeTracker as SummaryTypeTracker private import semmle.python.dataflow.new.internal.FlowSummaryImpl as FlowSummaryImpl private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch @@ -14,13 +14,13 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { class Node = DataFlowPublic::Node; // Content - class TypeTrackerContent = DataFlowPublic::ContentSet; + class Content = DataFlowPublic::ContentSet; - class TypeTrackerContentFilter = TypeTrackingInput::ContentFilter; + class ContentFilter = TypeTrackingInput::ContentFilter; - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content) { none() } + ContentFilter getFilterFromWithoutContentStep(Content content) { none() } - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content) { none() } + ContentFilter getFilterFromWithContentStep(Content content) { none() } // Callables class SummarizedCallable = FlowSummaryImpl::Private::SummarizedCallableImpl; @@ -37,9 +37,9 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { // Relating content to summaries predicate content = FlowSummaryImpl::Private::SummaryComponent::content/1; - SummaryComponent withoutContent(TypeTrackerContent contents) { none() } + SummaryComponent withoutContent(Content contents) { none() } - SummaryComponent withContent(TypeTrackerContent contents) { none() } + SummaryComponent withContent(Content contents) { none() } predicate return = FlowSummaryImpl::Private::SummaryComponent::return/0; diff --git a/ruby/ql/lib/codeql/ruby/typetracking/internal/SummaryTypeTracker.qll b/ruby/ql/lib/codeql/ruby/typetracking/internal/SummaryTypeTracker.qll deleted file mode 100644 index efe7629fffc..00000000000 --- a/ruby/ql/lib/codeql/ruby/typetracking/internal/SummaryTypeTracker.qll +++ /dev/null @@ -1,412 +0,0 @@ -/** - * Provides the implementation of type tracking steps through flow summaries. - * To use this, you must implement the `Input` signature. You can then use the predicates in the `Output` - * signature to implement the predicates of the same names inside `TypeTrackerSpecific.qll`. - */ - -/** The classes and predicates needed to generate type-tracking steps from summaries. */ -signature module Input { - // Dataflow nodes - class Node; - - // Content - class TypeTrackerContent; - - class TypeTrackerContentFilter; - - // Relating content and filters - /** - * Gets a content filter to use for a `WithoutContent[content]` step, (data is not allowed to be stored in `content`) - * or has no result if - * the step should be treated as ordinary flow. - * - * `WithoutContent` is often used to perform strong updates on individual collection elements, but for - * type-tracking this is rarely beneficial and quite expensive. However, `WithoutContent` can be quite useful - * for restricting the type of an object, and in these cases we translate it to a filter. - */ - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content); - - /** - * Gets a content filter to use for a `WithContent[content]` step, (data must be stored in `content`) - * or has no result if - * the step cannot be handled by type-tracking. - * - * `WithContent` is often used to perform strong updates on individual collection elements (or rather - * to preserve those that didn't get updated). But for type-tracking this is rarely beneficial and quite expensive. - * However, `WithContent` can be quite useful for restricting the type of an object, and in these cases we translate it to a filter. - */ - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content); - - // Summaries and their stacks - class SummaryComponent; - - class SummaryComponentStack { - SummaryComponent head(); - } - - /** Gets a singleton stack containing `component`. */ - SummaryComponentStack singleton(SummaryComponent component); - - /** - * Gets the stack obtained by pushing `head` onto `tail`. - */ - SummaryComponentStack push(SummaryComponent head, SummaryComponentStack tail); - - /** Gets a singleton stack representing a return. */ - SummaryComponent return(); - - // Relating content to summaries - /** Gets a summary component for content `c`. */ - SummaryComponent content(TypeTrackerContent contents); - - /** Gets a summary component where data is not allowed to be stored in `contents`. */ - SummaryComponent withoutContent(TypeTrackerContent contents); - - /** Gets a summary component where data must be stored in `contents`. */ - SummaryComponent withContent(TypeTrackerContent contents); - - // Callables - class SummarizedCallable { - predicate propagatesFlow( - SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue - ); - } - - // Relating nodes to summaries - /** - * Gets a dataflow node respresenting the argument of `call` indicated by `arg`. - * - * Returns the post-update node of the argument when `isPostUpdate` is true. - */ - Node argumentOf(Node call, SummaryComponent arg, boolean isPostUpdate); - - /** Gets a dataflow node respresenting the parameter of `callable` indicated by `param`. */ - Node parameterOf(Node callable, SummaryComponent param); - - /** Gets a dataflow node respresenting the return of `callable` indicated by `return`. */ - Node returnOf(Node callable, SummaryComponent return); - - // Relating callables to nodes - /** Gets a dataflow node respresenting a call to `callable`. */ - Node callTo(SummarizedCallable callable); -} - -/** - * The predicates provided by a summary type tracker. - * These are meant to be used in `TypeTrackerSpecific.qll` - * inside the predicates of the same names. - */ -signature module Output { - /** - * Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. - */ - predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo); - - /** - * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. - */ - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); - - /** - * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. - */ - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); - - /** - * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. - */ - predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent - ); - - /** - * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. - */ - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); - - /** - * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. - */ - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); -} - -/** - * Implementation of the summary type tracker, that is type tracking through flow summaries. - */ -module SummaryFlow implements Output { - pragma[nomagic] - private predicate isNonLocal(I::SummaryComponent component) { - component = I::content(_) - or - component = I::withContent(_) - } - - pragma[nomagic] - private predicate hasLoadSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - callable.propagatesFlow(I::push(I::content(contents), input), output, true) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) - } - - pragma[nomagic] - private predicate hasStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - ( - callable.propagatesFlow(input, I::push(I::content(contents), output), true) - or - // Allow the input to start with an arbitrary WithoutContent[X]. - // Since type-tracking only tracks one content deep, and we're about to store into another content, - // we're already preventing the input from being in a content. - callable - .propagatesFlow(I::push(I::withoutContent(_), input), - I::push(I::content(contents), output), true) - ) - } - - pragma[nomagic] - private predicate hasLoadStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent loadContents, - I::TypeTrackerContent storeContents, I::SummaryComponentStack input, - I::SummaryComponentStack output - ) { - callable - .propagatesFlow(I::push(I::content(loadContents), input), - I::push(I::content(storeContents), output), true) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) - } - - pragma[nomagic] - private predicate hasWithoutContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output - ) { - exists(I::TypeTrackerContent content | - callable.propagatesFlow(I::push(I::withoutContent(content), input), output, true) and - filter = I::getFilterFromWithoutContentStep(content) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - input != output - ) - } - - pragma[nomagic] - private predicate hasWithContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output - ) { - exists(I::TypeTrackerContent content | - callable.propagatesFlow(I::push(I::withContent(content), input), output, true) and - filter = I::getFilterFromWithContentStep(content) and - not isNonLocal(input.head()) and - not isNonLocal(output.head()) and - input != output - ) - } - - private predicate componentLevelStep(I::SummaryComponent component) { - exists(I::TypeTrackerContent content | - component = I::withoutContent(content) and - not exists(I::getFilterFromWithoutContentStep(content)) - ) - } - - /** - * Gets a data flow `I::Node` corresponding an argument or return value of `call`, - * as specified by `component`. `isOutput` indicates whether the node represents - * an output node or an input node. - */ - bindingset[call, component] - private I::Node evaluateSummaryComponentLocal( - I::Node call, I::SummaryComponent component, boolean isOutput - ) { - result = I::argumentOf(call, component, isOutput) - or - component = I::return() and - result = call and - isOutput = true - } - - /** - * Holds if `callable` is relevant for type-tracking and we therefore want `stack` to - * be evaluated locally at its call sites. - */ - pragma[nomagic] - private predicate dependsOnSummaryComponentStack( - I::SummarizedCallable callable, I::SummaryComponentStack stack - ) { - exists(I::callTo(callable)) and - ( - callable.propagatesFlow(stack, _, true) - or - callable.propagatesFlow(_, stack, true) - or - // include store summaries as they may skip an initial step at the input - hasStoreSummary(callable, _, stack, _) - ) - or - dependsOnSummaryComponentStackCons(callable, _, stack) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackCons( - I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail - ) { - dependsOnSummaryComponentStack(callable, I::push(head, tail)) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackConsLocal( - I::SummarizedCallable callable, I::SummaryComponent head, I::SummaryComponentStack tail - ) { - dependsOnSummaryComponentStackCons(callable, head, tail) and - not isNonLocal(head) - } - - pragma[nomagic] - private predicate dependsOnSummaryComponentStackLeaf( - I::SummarizedCallable callable, I::SummaryComponent leaf - ) { - dependsOnSummaryComponentStack(callable, I::singleton(leaf)) - } - - /** - * Gets a data flow I::Node corresponding to the local input or output of `call` - * identified by `stack`, if possible. - */ - pragma[nomagic] - private I::Node evaluateSummaryComponentStackLocal( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack stack, boolean isOutput - ) { - exists(I::SummaryComponent component | - dependsOnSummaryComponentStackLeaf(callable, component) and - stack = I::singleton(component) and - call = I::callTo(callable) and - result = evaluateSummaryComponentLocal(call, component, isOutput) - ) - or - exists( - I::Node prev, I::SummaryComponent head, I::SummaryComponentStack tail, boolean isOutput0 - | - prev = evaluateSummaryComponentStackLocal(callable, call, tail, isOutput0) and - dependsOnSummaryComponentStackConsLocal(callable, pragma[only_bind_into](head), - pragma[only_bind_out](tail)) and - stack = I::push(pragma[only_bind_out](head), pragma[only_bind_out](tail)) - | - // `Parameter[X]` is only allowed in the output of flow summaries (hence `isOutput = true`), - // however the target of the parameter (e.g. `Argument[Y].Parameter[X]`) should be fetched - // not from a post-update argument node (hence `isOutput0 = false`) - result = I::parameterOf(prev, head) and - isOutput0 = false and - isOutput = true - or - // `ReturnValue` is only allowed in the input of flow summaries (hence `isOutput = false`), - // and the target of the return value (e.g. `Argument[X].ReturnValue`) should be fetched not - // from a post-update argument node (hence `isOutput0 = false`) - result = I::returnOf(prev, head) and - isOutput0 = false and - isOutput = false - or - componentLevelStep(head) and - result = prev and - isOutput = isOutput0 - ) - } - - // Implement Output - predicate levelStepNoCall(I::Node nodeFrom, I::Node nodeTo) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - callable.propagatesFlow(input, output, true) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasLoadSummary(callable, content, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasStoreSummary(callable, content, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasLoadStoreSummary(callable, loadContent, storeContent, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasWithoutContentSummary(callable, filter, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } - - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { - exists( - I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, - I::SummaryComponentStack output - | - hasWithContentSummary(callable, filter, pragma[only_bind_into](input), - pragma[only_bind_into](output)) and - call = I::callTo(callable) and - nodeFrom = evaluateSummaryComponentStackLocal(callable, call, input, false) and - nodeTo = evaluateSummaryComponentStackLocal(callable, call, output, true) - ) - } -} diff --git a/ruby/ql/lib/codeql/ruby/typetracking/internal/TypeTrackingImpl.qll b/ruby/ql/lib/codeql/ruby/typetracking/internal/TypeTrackingImpl.qll index 13f6c1de149..750c96ef723 100644 --- a/ruby/ql/lib/codeql/ruby/typetracking/internal/TypeTrackingImpl.qll +++ b/ruby/ql/lib/codeql/ruby/typetracking/internal/TypeTrackingImpl.qll @@ -3,7 +3,7 @@ import codeql.typetracking.internal.TypeTrackingImpl as SharedImpl private import codeql.ruby.AST private import codeql.ruby.CFG as Cfg private import Cfg::CfgNodes -private import SummaryTypeTracker as SummaryTypeTracker +private import codeql.typetracking.internal.SummaryTypeTracker as SummaryTypeTracker private import codeql.ruby.DataFlow private import codeql.ruby.dataflow.FlowSummary as FlowSummary private import codeql.ruby.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon @@ -133,11 +133,11 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { class Node = DataFlow::Node; // Content - class TypeTrackerContent = DataFlowPublic::ContentSet; + class Content = DataFlowPublic::ContentSet; - class TypeTrackerContentFilter = TypeTrackingInput::ContentFilter; + class ContentFilter = TypeTrackingInput::ContentFilter; - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content) { + ContentFilter getFilterFromWithoutContentStep(Content content) { ( content.isAnyElement() or @@ -150,7 +150,7 @@ private module SummaryTypeTrackerInput implements SummaryTypeTracker::Input { result = MkElementFilter() } - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content) { + ContentFilter getFilterFromWithContentStep(Content content) { ( content.isAnyElement() or diff --git a/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll index efe7629fffc..b942446d43b 100644 --- a/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll +++ b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll @@ -10,9 +10,9 @@ signature module Input { class Node; // Content - class TypeTrackerContent; + class Content; - class TypeTrackerContentFilter; + class ContentFilter; // Relating content and filters /** @@ -24,7 +24,7 @@ signature module Input { * type-tracking this is rarely beneficial and quite expensive. However, `WithoutContent` can be quite useful * for restricting the type of an object, and in these cases we translate it to a filter. */ - TypeTrackerContentFilter getFilterFromWithoutContentStep(TypeTrackerContent content); + ContentFilter getFilterFromWithoutContentStep(Content content); /** * Gets a content filter to use for a `WithContent[content]` step, (data must be stored in `content`) @@ -35,7 +35,7 @@ signature module Input { * to preserve those that didn't get updated). But for type-tracking this is rarely beneficial and quite expensive. * However, `WithContent` can be quite useful for restricting the type of an object, and in these cases we translate it to a filter. */ - TypeTrackerContentFilter getFilterFromWithContentStep(TypeTrackerContent content); + ContentFilter getFilterFromWithContentStep(Content content); // Summaries and their stacks class SummaryComponent; @@ -57,13 +57,13 @@ signature module Input { // Relating content to summaries /** Gets a summary component for content `c`. */ - SummaryComponent content(TypeTrackerContent contents); + SummaryComponent content(Content contents); /** Gets a summary component where data is not allowed to be stored in `contents`. */ - SummaryComponent withoutContent(TypeTrackerContent contents); + SummaryComponent withoutContent(Content contents); /** Gets a summary component where data must be stored in `contents`. */ - SummaryComponent withContent(TypeTrackerContent contents); + SummaryComponent withContent(Content contents); // Callables class SummarizedCallable { @@ -105,34 +105,29 @@ signature module Output { /** * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. */ - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); + predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::Content content); /** * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content); + predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::Content content); /** * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. */ predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent + I::Node nodeFrom, I::Node nodeTo, I::Content loadContent, I::Content storeContent ); /** * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. */ - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); + predicate basicWithoutContentStep(I::Node nodeFrom, I::Node nodeTo, I::ContentFilter filter); /** * Holds if type-tracking should step from `nodeFrom` to `nodeTo` if inside a content matched by `filter`. */ - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ); + predicate basicWithContentStep(I::Node nodeFrom, I::Node nodeTo, I::ContentFilter filter); } /** @@ -148,7 +143,7 @@ module SummaryFlow implements Output { pragma[nomagic] private predicate hasLoadSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, + I::SummarizedCallable callable, I::Content contents, I::SummaryComponentStack input, I::SummaryComponentStack output ) { callable.propagatesFlow(I::push(I::content(contents), input), output, true) and @@ -158,7 +153,7 @@ module SummaryFlow implements Output { pragma[nomagic] private predicate hasStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent contents, I::SummaryComponentStack input, + I::SummarizedCallable callable, I::Content contents, I::SummaryComponentStack input, I::SummaryComponentStack output ) { not isNonLocal(input.head()) and @@ -177,9 +172,8 @@ module SummaryFlow implements Output { pragma[nomagic] private predicate hasLoadStoreSummary( - I::SummarizedCallable callable, I::TypeTrackerContent loadContents, - I::TypeTrackerContent storeContents, I::SummaryComponentStack input, - I::SummaryComponentStack output + I::SummarizedCallable callable, I::Content loadContents, I::Content storeContents, + I::SummaryComponentStack input, I::SummaryComponentStack output ) { callable .propagatesFlow(I::push(I::content(loadContents), input), @@ -190,10 +184,10 @@ module SummaryFlow implements Output { pragma[nomagic] private predicate hasWithoutContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output + I::SummarizedCallable callable, I::ContentFilter filter, I::SummaryComponentStack input, + I::SummaryComponentStack output ) { - exists(I::TypeTrackerContent content | + exists(I::Content content | callable.propagatesFlow(I::push(I::withoutContent(content), input), output, true) and filter = I::getFilterFromWithoutContentStep(content) and not isNonLocal(input.head()) and @@ -204,10 +198,10 @@ module SummaryFlow implements Output { pragma[nomagic] private predicate hasWithContentSummary( - I::SummarizedCallable callable, I::TypeTrackerContentFilter filter, - I::SummaryComponentStack input, I::SummaryComponentStack output + I::SummarizedCallable callable, I::ContentFilter filter, I::SummaryComponentStack input, + I::SummaryComponentStack output ) { - exists(I::TypeTrackerContent content | + exists(I::Content content | callable.propagatesFlow(I::push(I::withContent(content), input), output, true) and filter = I::getFilterFromWithContentStep(content) and not isNonLocal(input.head()) and @@ -217,7 +211,7 @@ module SummaryFlow implements Output { } private predicate componentLevelStep(I::SummaryComponent component) { - exists(I::TypeTrackerContent content | + exists(I::Content content | component = I::withoutContent(content) and not exists(I::getFilterFromWithoutContentStep(content)) ) @@ -338,7 +332,7 @@ module SummaryFlow implements Output { ) } - predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { + predicate basicLoadStep(I::Node nodeFrom, I::Node nodeTo, I::Content content) { exists( I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, I::SummaryComponentStack output @@ -351,7 +345,7 @@ module SummaryFlow implements Output { ) } - predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent content) { + predicate basicStoreStep(I::Node nodeFrom, I::Node nodeTo, I::Content content) { exists( I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, I::SummaryComponentStack output @@ -365,8 +359,7 @@ module SummaryFlow implements Output { } predicate basicLoadStoreStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContent loadContent, - I::TypeTrackerContent storeContent + I::Node nodeFrom, I::Node nodeTo, I::Content loadContent, I::Content storeContent ) { exists( I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, @@ -380,9 +373,7 @@ module SummaryFlow implements Output { ) } - predicate basicWithoutContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { + predicate basicWithoutContentStep(I::Node nodeFrom, I::Node nodeTo, I::ContentFilter filter) { exists( I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, I::SummaryComponentStack output @@ -395,9 +386,7 @@ module SummaryFlow implements Output { ) } - predicate basicWithContentStep( - I::Node nodeFrom, I::Node nodeTo, I::TypeTrackerContentFilter filter - ) { + predicate basicWithContentStep(I::Node nodeFrom, I::Node nodeTo, I::ContentFilter filter) { exists( I::SummarizedCallable callable, I::Node call, I::SummaryComponentStack input, I::SummaryComponentStack output From 6fc9e6193afeb77f3bc6da5ac2d1c344f959f79f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 21 Nov 2023 11:57:54 +0100 Subject: [PATCH 033/205] Add change note --- .../ql/lib/change-notes/2023-11-21-new-type-tracking-lib.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2023-11-21-new-type-tracking-lib.md diff --git a/python/ql/lib/change-notes/2023-11-21-new-type-tracking-lib.md b/python/ql/lib/change-notes/2023-11-21-new-type-tracking-lib.md new file mode 100644 index 00000000000..aef3146d6f2 --- /dev/null +++ b/python/ql/lib/change-notes/2023-11-21-new-type-tracking-lib.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Python now makes use of the shared type tracking library, exposed as `semmle.python.dataflow.new.TypeTracking`. The existing type tracking library, `semmle.python.dataflow.new.TypeTracker`, has consequently been deprecated. \ No newline at end of file From 36b635fb70c839d55c279ce6b2d4e53c89052b5c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 14 Dec 2023 14:39:32 +0100 Subject: [PATCH 034/205] Python: Remove `@tags meta` from internal debug queries These queries were great when evaluating coverage of the new call-graph compared with the old. However, they are not useful to run as part of our DCA experiments. --- python/ql/src/meta/analysis-quality/TTCallGraph.ql | 1 - python/ql/src/meta/analysis-quality/TTCallGraphMissing.ql | 1 - python/ql/src/meta/analysis-quality/TTCallGraphNew.ql | 1 - python/ql/src/meta/analysis-quality/TTCallGraphNewAmbiguous.ql | 1 - python/ql/src/meta/analysis-quality/TTCallGraphShared.ql | 1 - 5 files changed, 5 deletions(-) diff --git a/python/ql/src/meta/analysis-quality/TTCallGraph.ql b/python/ql/src/meta/analysis-quality/TTCallGraph.ql index d6383a32eb1..bdd63495191 100644 --- a/python/ql/src/meta/analysis-quality/TTCallGraph.ql +++ b/python/ql/src/meta/analysis-quality/TTCallGraph.ql @@ -3,7 +3,6 @@ * @kind problem * @problem.severity recommendation * @id py/meta/type-tracking-call-graph - * @tags meta * @precision very-low */ diff --git a/python/ql/src/meta/analysis-quality/TTCallGraphMissing.ql b/python/ql/src/meta/analysis-quality/TTCallGraphMissing.ql index bbf5b3553ef..bb28c5bf804 100644 --- a/python/ql/src/meta/analysis-quality/TTCallGraphMissing.ql +++ b/python/ql/src/meta/analysis-quality/TTCallGraphMissing.ql @@ -3,7 +3,6 @@ * @kind problem * @problem.severity recommendation * @id py/meta/call-graph-missing - * @tags meta * @precision very-low */ diff --git a/python/ql/src/meta/analysis-quality/TTCallGraphNew.ql b/python/ql/src/meta/analysis-quality/TTCallGraphNew.ql index 82a830265c6..b9f1df54b3b 100644 --- a/python/ql/src/meta/analysis-quality/TTCallGraphNew.ql +++ b/python/ql/src/meta/analysis-quality/TTCallGraphNew.ql @@ -3,7 +3,6 @@ * @kind problem * @problem.severity recommendation * @id py/meta/call-graph-new - * @tags meta * @precision very-low */ diff --git a/python/ql/src/meta/analysis-quality/TTCallGraphNewAmbiguous.ql b/python/ql/src/meta/analysis-quality/TTCallGraphNewAmbiguous.ql index dc27dcf262c..702541ca16d 100644 --- a/python/ql/src/meta/analysis-quality/TTCallGraphNewAmbiguous.ql +++ b/python/ql/src/meta/analysis-quality/TTCallGraphNewAmbiguous.ql @@ -3,7 +3,6 @@ * @kind problem * @problem.severity recommendation * @id py/meta/call-graph-new-ambiguous - * @tags meta * @precision very-low */ diff --git a/python/ql/src/meta/analysis-quality/TTCallGraphShared.ql b/python/ql/src/meta/analysis-quality/TTCallGraphShared.ql index 7a3bd794839..d44d1ac497f 100644 --- a/python/ql/src/meta/analysis-quality/TTCallGraphShared.ql +++ b/python/ql/src/meta/analysis-quality/TTCallGraphShared.ql @@ -3,7 +3,6 @@ * @kind problem * @problem.severity recommendation * @id py/meta/call-graph-shared - * @tags meta * @precision very-low */ From 25a676ac6a690e0429b1afa7577e22a5b797d240 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 14 Dec 2023 13:46:28 +0100 Subject: [PATCH 035/205] Ruby: Model simple pattern matching as value steps instead of taint steps --- .../dataflow/internal/DataFlowDispatch.qll | 3 +- .../dataflow/internal/DataFlowPrivate.qll | 33 ++++++++++++++++--- .../internal/TaintTrackingPrivate.qll | 13 +++++--- .../dataflow/local/DataflowStep.expected | 2 ++ .../dataflow/local/local_dataflow.rb | 4 +-- 5 files changed, 44 insertions(+), 11 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index b898fb3be06..3d5a5b2941d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -663,7 +663,8 @@ private module TrackInstanceInput implements CallGraphConstruction::InputSig { // We exclude steps into type checked variables. For those, we instead rely on the // type being checked against localFlowStep(nodeFrom, nodeTo, summary) and - not hasAdjacentTypeCheckedReads(nodeTo) + not hasAdjacentTypeCheckedReads(nodeTo) and + not asModulePattern(nodeTo, _) } predicate stepCall(DataFlow::Node nodeFrom, DataFlow::Node nodeTo, StepSummary summary) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 2d09834e623..0ca8f78f2ef 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -143,6 +143,32 @@ module LocalFlow { SsaImpl::adjacentReadPairExt(def, nodeFrom.asExpr(), nodeTo.asExpr()) } + /** + * Holds if SSA definition `def` assigns `value` to the underlying variable. + * + * This is either a direct assignment, `x = value`, or an assignment via + * simple pattern matching + * + * ```rb + * case value + * in Foo => x then ... + * in y => then ... + * end + * ``` + */ + predicate ssaDefAssigns(Ssa::WriteDefinition def, CfgNodes::ExprCfgNode value) { + def.assigns(value) + or + exists(CfgNodes::ExprNodes::CaseExprCfgNode case, CfgNodes::AstCfgNode pattern | + case.getValue() = value and + pattern = case.getBranch(_).(CfgNodes::ExprNodes::InClauseCfgNode).getPattern() + | + def.getWriteAccess() = pattern + or + def.getWriteAccess() = pattern.(CfgNodes::ExprNodes::AsPatternCfgNode).getVariableAccess() + ) + } + /** * Holds if there is a local flow step from `nodeFrom` to `nodeTo` involving * SSA definition `def`. @@ -150,7 +176,7 @@ module LocalFlow { pragma[nomagic] predicate localSsaFlowStep(SsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo) { // Flow from assignment into SSA definition - def.(Ssa::WriteDefinition).assigns(nodeFrom.asExpr()) and + ssaDefAssigns(def, nodeFrom.asExpr()) and nodeTo.(SsaDefinitionExtNode).getDefinitionExt() = def or // Flow from SSA definition to first read @@ -273,7 +299,7 @@ module VariableCapture { or exists(Ssa::Definition def | def.getARead() = e2 and - def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(e1) + LocalFlow::ssaDefAssigns(def.getAnUltimateDefinition(), e1) ) } @@ -574,8 +600,7 @@ private module Cached { /** Holds if `n` wraps an SSA definition without ingoing flow. */ private predicate entrySsaDefinition(SsaDefinitionExtNode n) { - n.getDefinitionExt() = - any(SsaImpl::WriteDefinition def | not def.(Ssa::WriteDefinition).assigns(_)) + n.getDefinitionExt() = any(SsaImpl::WriteDefinition def | not LocalFlow::ssaDefAssigns(def, _)) } pragma[nomagic] diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll index a75567bccdf..1f2e8188d72 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll @@ -79,11 +79,16 @@ private module Cached { cached predicate defaultAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { // value of `case` expression into variables in patterns - exists(CfgNodes::ExprNodes::CaseExprCfgNode case, CfgNodes::ExprNodes::InClauseCfgNode clause | - nodeFrom.asExpr() = case.getValue() and + exists( + CfgNodes::ExprNodes::CaseExprCfgNode case, CfgNodes::ExprCfgNode value, + CfgNodes::ExprNodes::InClauseCfgNode clause, Ssa::Definition def + | + nodeFrom.asExpr() = value and + value = case.getValue() and clause = case.getBranch(_) and - nodeTo.(SsaDefinitionExtNode).getDefinitionExt().(Ssa::Definition).getControlFlowNode() = - variablesInPattern(clause.getPattern()) + def = nodeTo.(SsaDefinitionExtNode).getDefinitionExt() and + def.getControlFlowNode() = variablesInPattern(clause.getPattern()) and + not LocalFlow::ssaDefAssigns(def, value) ) or // operation involving `nodeFrom` diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 1ce52ccdac6..bc09b81014a 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -2528,6 +2528,8 @@ | local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:85:22:85:28 | self | | local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:86:28:86:34 | self | | local_dataflow.rb:78:12:78:20 | [post] self | local_dataflow.rb:87:20:87:26 | self | +| 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 | self | local_dataflow.rb:79:20:79:26 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:80:24:80:30 | self | | local_dataflow.rb:78:12:78:20 | self | local_dataflow.rb:82:7:82:13 | self | diff --git a/ruby/ql/test/library-tests/dataflow/local/local_dataflow.rb b/ruby/ql/test/library-tests/dataflow/local/local_dataflow.rb index d72ed8ac5d4..286092ed172 100644 --- a/ruby/ql/test/library-tests/dataflow/local/local_dataflow.rb +++ b/ruby/ql/test/library-tests/dataflow/local/local_dataflow.rb @@ -76,8 +76,8 @@ def test_case x end z = case source(1) - in 5 => b then sink(b) # $ hasTaintFlow=1 - in a if a > 0 then sink(a) # $ hasTaintFlow=1 + in 5 => b then sink(b) # $ hasValueFlow=1 + in a if a > 0 then sink(a) # $ hasValueFlow=1 in [c, *d, e ] then [ sink(c), # $ hasTaintFlow=1 sink(d), # $ hasTaintFlow=1 From 43b228dbb49400e7ffa9d3698c4acecf16ecb0ca Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 12 Dec 2023 10:29:09 +0100 Subject: [PATCH 036/205] exclude all the lib.d.ts files when running the TS extractor directly e.g. the `lib.es5.d.ts` file was not excluded --- javascript/extractor/lib/typescript/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index 6da1b2b0574..54c533f48ba 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -895,7 +895,7 @@ if (process.argv.length > 2) { virtualSourceRoot: null, }); for (let sf of state.project.program.getSourceFiles()) { - if (pathlib.basename(sf.fileName) === "lib.d.ts") continue; + if (/lib\..*\.d\.ts/.test(pathlib.basename(sf.fileName)) || pathlib.basename(sf.fileName) === "lib.d.ts") continue; handleParseCommand({ command: "parse", filename: sf.fileName, From 10cf53b8d399db55b6c03399607a4c39e7cb8cb4 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 12 Dec 2023 10:32:31 +0100 Subject: [PATCH 037/205] fix a `this` reference `this` didn't refer to anything specific, and it was in fact `undefined` in the context it was invoked. There was already a `let typeTable = this;` further up (where `this` refers to the class instance), so I used `typeTable`. --- javascript/extractor/lib/typescript/src/type_table.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/lib/typescript/src/type_table.ts b/javascript/extractor/lib/typescript/src/type_table.ts index 82deda84ab8..617c4358f5f 100644 --- a/javascript/extractor/lib/typescript/src/type_table.ts +++ b/javascript/extractor/lib/typescript/src/type_table.ts @@ -1241,7 +1241,7 @@ export class TypeTable { stack.push(id); for (let symbol of type.getProperties()) { - let propertyType = this.tryGetTypeOfSymbol(symbol); + let propertyType = typeTable.tryGetTypeOfSymbol(symbol); if (propertyType == null) continue; traverseType(propertyType); } From 96d15739783cd06ea66a34d566af075bd9faa4c9 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 12 Dec 2023 10:34:42 +0100 Subject: [PATCH 038/205] move `TypeVarDepth` further up, so its declared before it's used --- .../extractor/lib/typescript/src/type_table.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/javascript/extractor/lib/typescript/src/type_table.ts b/javascript/extractor/lib/typescript/src/type_table.ts index 617c4358f5f..f3542b945a3 100644 --- a/javascript/extractor/lib/typescript/src/type_table.ts +++ b/javascript/extractor/lib/typescript/src/type_table.ts @@ -1240,6 +1240,13 @@ export class TypeTable { let indexOnStack = stack.length; stack.push(id); + /** Indicates if a type contains no type variables, is a type variable, or strictly contains type variables. */ + const enum TypeVarDepth { + noTypeVar = 0, + isTypeVar = 1, + containsTypeVar = 2, + } + for (let symbol of type.getProperties()) { let propertyType = typeTable.tryGetTypeOfSymbol(symbol); if (propertyType == null) continue; @@ -1267,13 +1274,6 @@ export class TypeTable { return lowlinkTable.get(id); - /** Indicates if a type contains no type variables, is a type variable, or strictly contains type variables. */ - const enum TypeVarDepth { - noTypeVar = 0, - isTypeVar = 1, - containsTypeVar = 2, - } - function traverseType(type: ts.Type): TypeVarDepth { if (isTypeVariable(type)) return TypeVarDepth.isTypeVar; let depth = TypeVarDepth.noTypeVar; From b5fe0e5709c1bda42dc62bb343d26ecec2161c6d Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 12 Dec 2023 10:51:09 +0100 Subject: [PATCH 039/205] make sure `reset()` is called when manually invoking the TS extractor, so environment-variables are read --- javascript/extractor/lib/typescript/src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index 54c533f48ba..2ea7e71f85c 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -886,6 +886,7 @@ if (process.argv.length > 2) { if (argument === "--version") { console.log("parser-wrapper with TypeScript " + ts.version); } else if (pathlib.basename(argument) === "tsconfig.json") { + reset(); handleOpenProjectCommand({ command: "open-project", tsConfig: argument, From 62205f6a7f656df652dfa15e474b72d9ddab1d7d Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 12 Dec 2023 12:25:00 +0100 Subject: [PATCH 040/205] add environment variable to skip extraction of types in TypeScript --- javascript/extractor/lib/typescript/src/ast_extractor.ts | 2 +- javascript/extractor/lib/typescript/src/main.ts | 1 + javascript/extractor/lib/typescript/src/type_table.ts | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/extractor/lib/typescript/src/ast_extractor.ts b/javascript/extractor/lib/typescript/src/ast_extractor.ts index e462797867b..8c34c9997ac 100644 --- a/javascript/extractor/lib/typescript/src/ast_extractor.ts +++ b/javascript/extractor/lib/typescript/src/ast_extractor.ts @@ -192,7 +192,7 @@ export function augmentAst(ast: AugmentedSourceFile, code: string, project: Proj } if (typeChecker != null) { - if (isTypedNode(node)) { + if (isTypedNode(node) && !typeTable.skipExtractingTypes) { let contextualType = isContextuallyTypedNode(node) ? typeChecker.getContextualType(node) : null; diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index 2ea7e71f85c..af4028477d3 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -808,6 +808,7 @@ function handleGetMetadataCommand(command: GetMetadataCommand) { function reset() { state = new State(); state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", Boolean, true); + state.typeTable.skipExtractingTypes = getEnvironmentVariable("SEMMLE_TYPESCRIPT_SKIP_EXTRACTING_TYPES", Boolean, false); } function getEnvironmentVariable(name: string, parse: (x: string) => T, defaultValue: T) { diff --git a/javascript/extractor/lib/typescript/src/type_table.ts b/javascript/extractor/lib/typescript/src/type_table.ts index f3542b945a3..9a685252891 100644 --- a/javascript/extractor/lib/typescript/src/type_table.ts +++ b/javascript/extractor/lib/typescript/src/type_table.ts @@ -383,6 +383,11 @@ export class TypeTable { */ public restrictedExpansion = false; + /** + * If set to true, skip extracting types. + */ + public skipExtractingTypes = false; + private virtualSourceRoot: VirtualSourceRoot; /** From 1a0d29ba8a2b7305d96f74b27a457d75ef489c05 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 14 Dec 2023 12:52:49 +0100 Subject: [PATCH 041/205] rename extractor environment variable to `CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES` --- javascript/extractor/lib/typescript/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index af4028477d3..b0faa4a3ec8 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -808,7 +808,7 @@ function handleGetMetadataCommand(command: GetMetadataCommand) { function reset() { state = new State(); state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", Boolean, true); - state.typeTable.skipExtractingTypes = getEnvironmentVariable("SEMMLE_TYPESCRIPT_SKIP_EXTRACTING_TYPES", Boolean, false); + state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", Boolean, false); } function getEnvironmentVariable(name: string, parse: (x: string) => T, defaultValue: T) { From 5bbf79bf26c0ee24af7421f91e414985110eac2d Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 14 Dec 2023 14:40:10 +0100 Subject: [PATCH 042/205] fix the parsing of boolean environment variables in the TypeScript extractor --- javascript/extractor/lib/typescript/src/main.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index b0faa4a3ec8..272f11e8de6 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -554,7 +554,7 @@ function handleOpenProjectCommand(command: OpenProjectCommand) { let program = project.program; let typeChecker = program.getTypeChecker(); - let shouldReportDiagnostics = getEnvironmentVariable("SEMMLE_TYPESCRIPT_REPORT_DIAGNOSTICS", Boolean, false); + let shouldReportDiagnostics = getEnvironmentVariable("SEMMLE_TYPESCRIPT_REPORT_DIAGNOSTICS", v => JSON.parse(v.toLowerCase()), false); let diagnostics = shouldReportDiagnostics ? program.getSemanticDiagnostics().filter(d => d.category === ts.DiagnosticCategory.Error) : []; @@ -807,8 +807,8 @@ function handleGetMetadataCommand(command: GetMetadataCommand) { function reset() { state = new State(); - state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", Boolean, true); - state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", Boolean, false); + state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", v => JSON.parse(v.toLowerCase()), true); + state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", v => JSON.parse(v.toLowerCase()), false); } function getEnvironmentVariable(name: string, parse: (x: string) => T, defaultValue: T) { From c752f26f91ae6d5edb616ea7122f751ee30e7357 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Thu, 14 Dec 2023 14:50:17 +0100 Subject: [PATCH 043/205] use direct string comparison instead, that doesn't crash on invalid values --- javascript/extractor/lib/typescript/src/main.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index 272f11e8de6..d34f516cf55 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -554,7 +554,7 @@ function handleOpenProjectCommand(command: OpenProjectCommand) { let program = project.program; let typeChecker = program.getTypeChecker(); - let shouldReportDiagnostics = getEnvironmentVariable("SEMMLE_TYPESCRIPT_REPORT_DIAGNOSTICS", v => JSON.parse(v.toLowerCase()), false); + let shouldReportDiagnostics = getEnvironmentVariable("SEMMLE_TYPESCRIPT_REPORT_DIAGNOSTICS", v => v.trim().toLowerCase() === "true", false); let diagnostics = shouldReportDiagnostics ? program.getSemanticDiagnostics().filter(d => d.category === ts.DiagnosticCategory.Error) : []; @@ -807,8 +807,8 @@ function handleGetMetadataCommand(command: GetMetadataCommand) { function reset() { state = new State(); - state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", v => JSON.parse(v.toLowerCase()), true); - state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", v => JSON.parse(v.toLowerCase()), false); + state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", v => v.trim().toLowerCase() === "true", true); + state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", v => v.trim().toLowerCase() === "true", false); } function getEnvironmentVariable(name: string, parse: (x: string) => T, defaultValue: T) { From b6123de518ae1f884a7e121f05c6717d86922367 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 00:34:52 +0100 Subject: [PATCH 044/205] Python: simplify assignments to captured variables --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 1c17ceeb85d..12325bf5103 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -299,11 +299,11 @@ module LocalFlow { nodeTo.(CfgNode).getNode() = def.getDefiningNode() ) or - // General definition - // TODO: remove other cases that are now redundant + // Assignment to captured variables + // These are not covered by the `AssignmentDefinition`s in the case above, + // as they are not necessarily live. nodeFrom.(CfgNode).getNode() = nodeTo.(CfgNode).getNode().(DefinitionNode).getValue() and - // remove jump steps (such as assignment of parameter default values) - nodeFrom.getEnclosingCallable() = nodeTo.getEnclosingCallable() + nodeTo.asExpr() = any(VariableCapture::CapturedVariable c).getAStore() or // With definition // `with f(42) as x:` From abd544d96ca41b813483a7c86f63d6e0679c333e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 00:38:58 +0100 Subject: [PATCH 045/205] Python: consistency failure gone --- .../comparisons/CONSISTENCY/DataFlowConsistency.expected | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected diff --git a/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected b/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected deleted file mode 100644 index 0eb7f3b9a40..00000000000 --- a/python/ql/test/library-tests/PointsTo/comparisons/CONSISTENCY/DataFlowConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -postWithInFlow -| test.py:16:1:16:14 | ControlFlowNode for len() | PostUpdateNode should not be the target of local flow. | \ No newline at end of file From 795668ddaf36c133156e3585e11a6a2040ed62e3 Mon Sep 17 00:00:00 2001 From: fossilet <948336+fossilet@users.noreply.github.com> Date: Thu, 14 Dec 2023 14:22:12 +0800 Subject: [PATCH 046/205] Fix sphinx.add_lexer. --- docs/codeql/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/codeql/conf.py b/docs/codeql/conf.py index da8b9114025..fca3f272647 100644 --- a/docs/codeql/conf.py +++ b/docs/codeql/conf.py @@ -49,10 +49,13 @@ highlight_language = "none" import os import sys +import sphinx as sphinx_mod + + def setup(sphinx): sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from qllexer import QLLexer - sphinx.add_lexer("ql", QLLexer()) + sphinx.add_lexer("ql", QLLexer() if sphinx_mod.version_info[0] <= 3 else QLLexer) # The version of CodeQL for the current release you're documenting, acts as replacement for # |version| and |release|. Not currently used. From c395d2d9573c76b102b025d9398478215f64a735 Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 15 Dec 2023 09:58:27 +0100 Subject: [PATCH 047/205] Apply suggestions from code review Co-authored-by: Rasmus Wriedt Larsen --- .../python/dataflow/new/internal/DataFlowDispatch.qll | 6 +++++- .../python/dataflow/new/internal/DataFlowPrivate.qll | 4 ++-- .../python/dataflow/new/internal/DataFlowPublic.qll | 8 +++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index d74926cf7ff..0e80d4d4dff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1531,7 +1531,11 @@ abstract class ParameterNodeImpl extends Node { class LambdaSelfReferenceNode extends ParameterNodeImpl, TLambdaSelfReferenceNode { private Function callable; - LambdaSelfReferenceNode() { this = TLambdaSelfReferenceNode(callable) } + LambdaSelfReferenceNode() { + this = TLambdaSelfReferenceNode(callable) and + // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions + exists(TFunction(callable)) + } final Function getCallable() { result = callable } 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 12325bf5103..b1526709ab5 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -392,7 +392,7 @@ module VariableCapture { ExprCfgNode() { isExpressionNode(this) } } - private predicate closureFlowStep(ExprCfgNode e1, ExprCfgNode e2) { + private predicate closureFlowStep(ExprCfgNode fromNode, ExprCfgNode toNode) { // simpleAstFlowStep(e1, e2) // or exists(SsaVariable def | @@ -689,7 +689,7 @@ predicate summaryFlowSteps(Node nodeFrom, Node nodeTo) { IncludePostUpdateFlow::step/2>::step(nodeFrom, nodeTo) } -predicate variableCaptureFlowStep(Node nodeFrom, Node 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 // that. However, we do want to allow `[post] n` to `n` (to handle while loops), so diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index dfe20a408cc..e7beeb6c5e1 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -116,7 +116,7 @@ newtype TNode = exists(ParameterPosition ppos | ppos.isKeyword(_) | exists(callable.getParameter(ppos))) } or /** A synthetic node representing a captured variable. */ - TCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or + TSynthCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or /** A synthetic node representing the heap of a function. Used for variable capture. */ TLambdaSelfReferenceNode(Function f) { f = any(VariableCapture::CapturedVariable v).getACapturingScope() @@ -489,10 +489,8 @@ class CaptureNode extends Node, TCaptureNode { /** Gets the `SynthesizedCaptureNode` that this node represents. */ VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } - override DataFlowCallable getEnclosingCallable() { - result = TFunction(cn.getEnclosingCallable()) - or - result = TModule(cn.getEnclosingCallable()) + override Scope getScope() { + result = cn.getEnclosingCallable() } override Location getLocation() { result = cn.getLocation() } From f96c52ed3bc117f7c51edc1cf5f1a3ed83d7a6e3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 10:25:49 +0100 Subject: [PATCH 048/205] Python: make compile again also improve comment --- .../dataflow/new/internal/DataFlowDispatch.qll | 8 ++++---- .../dataflow/new/internal/DataFlowPrivate.qll | 15 ++++++++------- .../dataflow/new/internal/DataFlowPublic.qll | 8 +++----- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 0e80d4d4dff..1c07fa67a0d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1531,7 +1531,7 @@ abstract class ParameterNodeImpl extends Node { class LambdaSelfReferenceNode extends ParameterNodeImpl, TLambdaSelfReferenceNode { private Function callable; - LambdaSelfReferenceNode() { + LambdaSelfReferenceNode() { this = TLambdaSelfReferenceNode(callable) and // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions exists(TFunction(callable)) @@ -1624,10 +1624,10 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl override Node getPreUpdateNode() { result = pre } } -private class CapturePostUpdateNode extends PostUpdateNodeImpl, CaptureNode { - private CaptureNode pre; +private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptureNode { + private SynthCaptureNode pre; - CapturePostUpdateNode() { + SynthCapturePostUpdateNode() { VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), pre.getSynthesizedCaptureNode()) } 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 b1526709ab5..f3b36db7c80 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -392,12 +392,13 @@ module VariableCapture { ExprCfgNode() { isExpressionNode(this) } } - private predicate closureFlowStep(ExprCfgNode fromNode, ExprCfgNode toNode) { - // simpleAstFlowStep(e1, e2) - // or + private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { + // TODO: Other languages have an extra case here looking like + // simpleAstFlowStep(nodeFrom, nodeTo) + // we should investigate the potential benefit of adding that. exists(SsaVariable def | - def.getAUse() = e2 and - def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = e1 + def.getAUse() = nodeTo and + def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom ) } @@ -492,7 +493,7 @@ module VariableCapture { module Flow = Shared::Flow; private Flow::ClosureNode asClosureNode(Node n) { - result = n.(CaptureNode).getSynthesizedCaptureNode() + result = n.(SynthCaptureNode).getSynthesizedCaptureNode() or result.(Flow::ExprNode).getExpr() = n.(CfgNode).getNode() or @@ -665,7 +666,7 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { or summaryFlowSteps(nodeFrom, nodeTo) or - variableCaptureFlowStep(nodeFrom, nodeTo) + variableCaptureLocalFlowStep(nodeFrom, nodeTo) } /** diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index e7beeb6c5e1..395f131c501 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -481,17 +481,15 @@ class StarPatternElementNode extends Node, TStarPatternElementNode { * A synthesized data flow node representing a closure object that tracks * captured variables. */ -class CaptureNode extends Node, TCaptureNode { +class SynthCaptureNode extends Node, TSynthCaptureNode { private VariableCapture::Flow::SynthesizedCaptureNode cn; - CaptureNode() { this = TCaptureNode(cn) } + SynthCaptureNode() { this = TSynthCaptureNode(cn) } /** Gets the `SynthesizedCaptureNode` that this node represents. */ VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } - override Scope getScope() { - result = cn.getEnclosingCallable() - } + override Scope getScope() { result = cn.getEnclosingCallable() } override Location getLocation() { result = cn.getLocation() } From 2051ba3395face1fe42ffefd60350247673459d3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 10:26:56 +0100 Subject: [PATCH 049/205] Python: hide synthesized capture nodes --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 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 f3b36db7c80..c38c205f528 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1203,8 +1203,8 @@ predicate nodeIsHidden(Node n) { n instanceof SynthDictSplatArgumentNode or n instanceof SynthDictSplatParameterNode - // or - // n instanceof CaptureNode + or + n instanceof SynthCaptureNode } class LambdaCallKind = Unit; From 262d43abcf88c590b757ed731be3c5612b781100 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 10:28:51 +0100 Subject: [PATCH 050/205] Python: Make compile and add comment --- python/ql/consistency-queries/DataFlowConsistency.ql | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 7ac0a3b4983..8e3c3cb9e7d 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -49,7 +49,7 @@ private module Input implements InputSig { predicate uniqueEnclosingCallableExclude(Node n) { // `CaptureNode`s miss enclosing calables in some cases. exists(Function func | - func = n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() + func = n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() | // This can happen if `func` is a comprehension. // In that case, there is no associated DataFlowCallable. @@ -60,8 +60,8 @@ private module Input implements InputSig { or // We only have a selection of valid callables. // For instance, we do not have classes as `DataFlowCallable`s. - not n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Function and - not n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Module + not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Function and + not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Module } predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { @@ -141,6 +141,7 @@ private module Input implements InputSig { other.getNode().getScope() = f ) or + // The capture argument node will be reused for every call to the same callable. arg = call.getArgument(_) and arg instanceof CaptureArgumentNode } From bfdcae45385c3afeb44b9e3e06d7dfc080834a1f Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 10:43:02 +0100 Subject: [PATCH 051/205] Python : `P` -> `PY` --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 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 c38c205f528..7131322e0bb 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -403,9 +403,9 @@ module VariableCapture { } private module CaptureInput implements Shared::InputSig { - private import python as P + private import python as PY - class BasicBlock extends P::BasicBlock { + class BasicBlock extends PY::BasicBlock { Callable getEnclosingCallable() { result = this.getScope() } // TODO: check that this gives useful results From 5b6ea15028c39a6fcb3362b725a477b73c4a9494 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 11:09:37 +0100 Subject: [PATCH 052/205] Python: remove unneeded consistency exclusion --- .../consistency-queries/DataFlowConsistency.ql | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 8e3c3cb9e7d..0d095b4f27e 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -46,24 +46,6 @@ private module Input implements InputSig { ) } - predicate uniqueEnclosingCallableExclude(Node n) { - // `CaptureNode`s miss enclosing calables in some cases. - exists(Function func | - func = n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() - | - // This can happen if `func` is a comprehension. - // In that case, there is no associated DataFlowCallable. - not exists(func.getDefinition()) - or - func.getADecorator().(Name).getId() = "property" - ) - or - // We only have a selection of valid callables. - // For instance, we do not have classes as `DataFlowCallable`s. - not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Function and - not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Module - } - predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { not exists(call.getLocation().getFile().getRelativePath()) } From 671692177ec7859d15889e5efb0547c5d3eed000 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Dec 2023 11:34:06 +0100 Subject: [PATCH 053/205] C#: Escape method names. --- .../Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs index 983175f4c17..5bbeeddf16a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs @@ -80,11 +80,11 @@ internal sealed class StubVisitor : SymbolVisitor stubWriter.Write(explicitInterfaceType.GetQualifiedName()); stubWriter.Write('.'); if (writeName) - stubWriter.Write(explicitInterfaceSymbol.GetName()); + stubWriter.Write(EscapeIdentifier(explicitInterfaceSymbol.GetName())); } else if (writeName) { - stubWriter.Write(symbol.GetName()); + stubWriter.Write(EscapeIdentifier(symbol.GetName())); } } From 49e146758147b15aea65c9ba28247ddfb563daeb Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Fri, 15 Dec 2023 11:03:23 +0000 Subject: [PATCH 054/205] CPP: Fix handling of ternary operators in tempory queries and add tests. --- cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll | 11 ++++++++++- .../UseOfStringAfterLifetimeEnds.expected | 3 ++- .../tests/UseOfStringAfterLifetimeEnds/test.cpp | 2 ++ .../UseOfUniquePointerAfterLifetimeEnds.expected | 4 +++- .../tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp | 3 +++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll index 56d742b31d7..44880eee0b5 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll +++ b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll @@ -41,12 +41,21 @@ predicate isStoredInContainer(Expr e) { ) } + +/** + * Holds if `e` or a conversion of `e` has an lvalue-to-rvalue conversion. + */ +predicate hasLValueToRValueConversion(Expr e) { + e.getConversion*().hasLValueToRValueConversion() and + not e instanceof ConditionalExpr // ConditionalExpr may be spuriously reported as having an lvalue-to-rvalue conversion +} + /** * Holds if the value of `e` outlives the enclosing full expression. For * example, because the value is stored in a local variable. */ predicate outlivesFullExpr(Expr e) { - not e.getConversion*().hasLValueToRValueConversion() and + not hasLValueToRValueConversion(e) and ( any(Assignment assign).getRValue() = e or diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/UseOfStringAfterLifetimeEnds.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/UseOfStringAfterLifetimeEnds.expected index 7e33c948d2e..e6f64d57c99 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/UseOfStringAfterLifetimeEnds.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/UseOfStringAfterLifetimeEnds.expected @@ -9,4 +9,5 @@ | test.cpp:188:39:188:42 | call to data | The underlying string object is destroyed after the call to 'data' returns. | | test.cpp:189:44:189:47 | call to data | The underlying string object is destroyed after the call to 'data' returns. | | test.cpp:191:29:191:32 | call to data | The underlying string object is destroyed after the call to 'data' returns. | -| test.cpp:193:31:193:35 | call to c_str | The underlying string object is destroyed after the call to 'c_str' returns. | +| test.cpp:193:47:193:51 | call to c_str | The underlying string object is destroyed after the call to 'c_str' returns. | +| test.cpp:195:31:195:35 | call to c_str | The underlying string object is destroyed after the call to 'c_str' returns. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/test.cpp index 51f85c91860..4b3d934088d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfStringAfterLifetimeEnds/test.cpp @@ -190,6 +190,8 @@ const char* test1(bool b1, bool b2) { char* s9; s9 = std::string("hello").data(); // BAD + const char* s13 = b1 ? std::string("hello").c_str() : s1; // BAD + return std::string("hello").c_str(); // BAD } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected index 8bd30062b57..3af8b501a66 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/UseOfUniquePointerAfterLifetimeEnds.expected @@ -6,4 +6,6 @@ | test.cpp:163:25:163:27 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | | test.cpp:172:33:172:35 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | | test.cpp:174:32:174:34 | call to get | The underlying unique pointer object is destroyed after the call to 'get' returns. | -| test.cpp:176:11:176:11 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | +| test.cpp:177:16:177:16 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | +| test.cpp:177:36:177:36 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | +| test.cpp:179:11:179:11 | call to operator* | The underlying unique pointer object is destroyed after the call to 'operator*' returns. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp index c1d55a28c17..22eec736df7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp @@ -173,6 +173,9 @@ const S* test1(bool b1, bool b2) { S* s5[] = { get_unique_ptr().get() }; // BAD + S s6 = b1 ? *get_unique_ptr() : *get_unique_ptr(); // GOOD + S& s7 = b1 ? *get_unique_ptr() : *get_unique_ptr(); // BAD + return &*get_unique_ptr(); // BAD } From f6af593b0b18d956f140e7908c9255ab80936e3d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Dec 2023 11:34:28 +0100 Subject: [PATCH 055/205] C#: Add a unit test for escaping method names. --- .../Semmle.Extraction.Tests/StubGenerator.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs b/csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs index ea60c60bad6..3fcda88bc32 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs @@ -76,6 +76,26 @@ public int M1(ref readonly Guid guid) => throw null; Assert.Equal(expected, stub); } + [Fact] + public void StubGeneratorEscapeMethodName() + { + // Setup + const string source = @" +public class MyTest { + public int @default() { return 0; } +}"; + + // Execute + var stub = GenerateStub(source); + + // Verify + const string expected = @"public class MyTest { +public int @default() => throw null; +} +"; + Assert.Equal(expected, stub); + } + private static string GenerateStub(string source) { var st = CSharpSyntaxTree.ParseText(source); From dd13ea3d0a41764b065f6e50efff40aa4fc8ffca Mon Sep 17 00:00:00 2001 From: Alex Denisov Date: Fri, 15 Dec 2023 10:25:23 +0100 Subject: [PATCH 056/205] Swift: separate installation of dependencies and autobuilding `pod install` could generate Xcode projects files needed for autobuilding, so it's better to install dependencies first, and then do re-scan to pick up the new files. --- swift/swift-autobuilder/swift-autobuilder.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/swift/swift-autobuilder/swift-autobuilder.cpp b/swift/swift-autobuilder/swift-autobuilder.cpp index c6b2582ed2b..32cd52541a9 100644 --- a/swift/swift-autobuilder/swift-autobuilder.cpp +++ b/swift/swift-autobuilder/swift-autobuilder.cpp @@ -54,6 +54,11 @@ static bool buildSwiftPackages(const std::vector& swiftPa return any_successful; } +static void installDependencies(const CLIArgs& args) { + auto structure = scanProjectStructure(args.workingDir); + installDependencies(structure, args.dryRun); +} + static bool autobuild(const CLIArgs& args) { auto structure = scanProjectStructure(args.workingDir); auto& xcodeTargets = structure.xcodeTargets; @@ -82,7 +87,6 @@ static bool autobuild(const CLIArgs& args) { return false; } else if (!xcodeTargets.empty()) { LOG_INFO("Building Xcode target: {}", xcodeTargets.front()); - installDependencies(structure, args.dryRun); auto buildSucceeded = buildXcodeTarget(xcodeTargets.front(), args.dryRun); // If build failed, try to build Swift packages if (!buildSucceeded && !swiftPackages.empty()) { @@ -113,6 +117,7 @@ static CLIArgs parseCLIArgs(int argc, char** argv) { int main(int argc, char** argv) { auto args = parseCLIArgs(argc, argv); + installDependencies(args); auto success = autobuild(args); codeql::Log::flush(); if (!success) { From c68d3c5983f67ce7c5a4c4c577af4e5ecd95c932 Mon Sep 17 00:00:00 2001 From: Alexander Eyers-Taylor Date: Fri, 15 Dec 2023 11:23:11 +0000 Subject: [PATCH 057/205] Update cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll Co-authored-by: Mathias Vorreiter Pedersen --- cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll index 44880eee0b5..d9113c8c46d 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll +++ b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll @@ -45,7 +45,7 @@ predicate isStoredInContainer(Expr e) { /** * Holds if `e` or a conversion of `e` has an lvalue-to-rvalue conversion. */ -predicate hasLValueToRValueConversion(Expr e) { +private predicate hasLValueToRValueConversion(Expr e) { e.getConversion*().hasLValueToRValueConversion() and not e instanceof ConditionalExpr // ConditionalExpr may be spuriously reported as having an lvalue-to-rvalue conversion } From d3b237bf7e3f252cf1b9b118278594febb37bc86 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 12:55:26 +0100 Subject: [PATCH 058/205] Python: rename synthetic lambda nodes --- .../new/internal/DataFlowDispatch.qll | 27 ++++++++++++++----- .../dataflow/new/internal/DataFlowPrivate.qll | 5 ++-- .../dataflow/new/internal/DataFlowPublic.qll | 6 +++-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 1c07fa67a0d..14b1416954c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1520,7 +1520,7 @@ abstract class ParameterNodeImpl extends Node { } /** - * The value of a lambda itself at function entry, viewed as a node in a data + * The value of a closure itself at function entry, viewed as a node in a data * flow graph. * * This is used for tracking flow through captured variables, and we use a @@ -1528,11 +1528,13 @@ abstract class ParameterNodeImpl extends Node { * "lambda self" from "normal self", as lambdas may also access outer `self` * variables (through variable capture). */ -class LambdaSelfReferenceNode extends ParameterNodeImpl, TLambdaSelfReferenceNode { +class SynthCapturingClosureParameterNode extends ParameterNodeImpl, + TSynthCapturingClosureParameterNode +{ private Function callable; - LambdaSelfReferenceNode() { - this = TLambdaSelfReferenceNode(callable) and + SynthCapturingClosureParameterNode() { + this = TSynthCapturingClosureParameterNode(callable) and // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions exists(TFunction(callable)) } @@ -1635,11 +1637,22 @@ private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptur override Node getPreUpdateNode() { result = pre } } -class CaptureArgumentNode extends CfgNode, ArgumentNode { +/** + * The value of a closure itself being passed to the funciton, viewed as a node in a data + * flow graph. + * + * This is used for tracking flow through captured variables, and we use a + * separate node and parameter/argument positions in order to distinguish + * "lambda self" from "normal self", as lambdas may also access outer `self` + * variables (through variable capture). + */ +class SynthCaptureArgumentNode extends TSynthCapturingClosureArgumentNode, ArgumentNode { CallNode callNode; - CaptureArgumentNode() { - this.getNode() = callNode.getFunction() and + SynthCaptureArgumentNode() { + this = TSynthCapturingClosureArgumentNode(callNode) and + // We would prefer to put this restriction in the charpred for the branch, + // but that incurs non-monotonic recursion. exists(Function target | resolveCall(callNode, target, _) | target = any(VariableCapture::CapturedVariable v).getACapturingScope() ) 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 7131322e0bb..16cb48466ed 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -504,7 +504,8 @@ module VariableCapture { or result.(Flow::ParameterNode).getParameter().getCfgNode() = n.(CfgNode).getNode() or - result.(Flow::ThisParameterNode).getCallable() = n.(LambdaSelfReferenceNode).getCallable() + result.(Flow::ThisParameterNode).getCallable() = + n.(SynthCapturingClosureParameterNode).getCallable() } predicate storeStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { @@ -1244,7 +1245,7 @@ predicate allowParameterReturnInSelf(ParameterNode p) { or exists(Function f | VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(f) and - p = TLambdaSelfReferenceNode(f) + p = TSynthCapturingClosureParameterNode(f) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 395f131c501..26b357d2388 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -118,9 +118,11 @@ newtype TNode = /** A synthetic node representing a captured variable. */ TSynthCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or /** A synthetic node representing the heap of a function. Used for variable capture. */ - TLambdaSelfReferenceNode(Function f) { + TSynthCapturingClosureParameterNode(Function f) { f = any(VariableCapture::CapturedVariable v).getACapturingScope() - } + } or + /** A synthetic node representing the heap of a function. Used for variable capture. */ + TSynthCapturingClosureArgumentNode(CallNode callNode) private import semmle.python.internal.CachedStages From 4b89a412c6ad61394cf6857bd55a732322d99006 Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 15 Dec 2023 12:59:01 +0100 Subject: [PATCH 059/205] Update python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll Co-authored-by: Rasmus Wriedt Larsen --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 14b1416954c..372791f1d13 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1523,8 +1523,8 @@ abstract class ParameterNodeImpl extends Node { * The value of a closure itself at function entry, viewed as a node in a data * flow graph. * - * This is used for tracking flow through captured variables, and we use a - * separate node and parameter/argument positions in order to distinguish + * This is used for tracking flow through captured variables, and we use + * separate argument/parameter nodes at their own parameter/argument positions in order to distinguish * "lambda self" from "normal self", as lambdas may also access outer `self` * variables (through variable capture). */ From 8e92fcc08fcf768eb46eb158e55b1126f16c3666 Mon Sep 17 00:00:00 2001 From: Alex Eyers-Taylor Date: Fri, 15 Dec 2023 12:00:44 +0000 Subject: [PATCH 060/205] CPP: Format Temporaries --- cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll index d9113c8c46d..492bad166a9 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll +++ b/cpp/ql/src/Security/CWE/CWE-416/Temporaries.qll @@ -41,7 +41,6 @@ predicate isStoredInContainer(Expr e) { ) } - /** * Holds if `e` or a conversion of `e` has an lvalue-to-rvalue conversion. */ From a3115822856efccfde0218527486199e2713aa79 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 13:28:16 +0100 Subject: [PATCH 061/205] Python: Bring back (now simplified) exclusion --- python/ql/consistency-queries/DataFlowConsistency.ql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index 0d095b4f27e..b56bfb2906f 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -46,6 +46,13 @@ private module Input implements InputSig { ) } + predicate uniqueEnclosingCallableExclude(Node n) { + // We only have a selection of valid callables. + // For instance, we do not have classes as `DataFlowCallable`s. + not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Function and + not n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Module + } + predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { not exists(call.getLocation().getFile().getRelativePath()) } @@ -125,7 +132,7 @@ private module Input implements InputSig { or // The capture argument node will be reused for every call to the same callable. arg = call.getArgument(_) and - arg instanceof CaptureArgumentNode + arg instanceof SynthCaptureArgumentNode } } From b07316f4ae04f7040de0e41def03b65bd67cc806 Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 15 Dec 2023 13:41:04 +0100 Subject: [PATCH 062/205] Update python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll Co-authored-by: Rasmus Wriedt Larsen --- .../lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 2 ++ 1 file changed, 2 insertions(+) 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 16cb48466ed..52fe174cb1f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -422,6 +422,8 @@ module VariableCapture { Function f; CapturedVariable() { + // note: captured variables originating on module scope is currently + // covered by global variable handling. this.getScope() = f and this.getAnAccess().getScope() != f } From 739b839628a32719adf314b5f0a0e353d32aceaa Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 13:48:28 +0100 Subject: [PATCH 063/205] Python: use updated names --- .../python/dataflow/new/internal/DataFlowImplConsistency.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll index aac3c30cc2c..c7ae273cd7c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplConsistency.qll @@ -43,7 +43,7 @@ private module Input implements InputSig { predicate uniqueEnclosingCallableExclude(Node n) { // `CaptureNode`s miss enclosing calables in some cases. exists(Function func | - func = n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() + func = n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() | // This can happen if `func` is a comprehension. // In that case, there is no associated DataFlowCallable. @@ -51,7 +51,7 @@ private module Input implements InputSig { ) or // We do not have classes as `DataFlowCallable`s. - n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Class + n.(SynthCaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() instanceof Class } predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { From f668453d013b7dffa70a2bbc5567b792b9f04f53 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 13:48:50 +0100 Subject: [PATCH 064/205] Python: move things around --- .../dataflow/new/internal/DataFlowPrivate.qll | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 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 52fe174cb1f..9dd71e7d20c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -388,23 +388,27 @@ module LocalFlow { module VariableCapture { private import codeql.dataflow.VariableCapture as Shared - class ExprCfgNode extends ControlFlowNode { - ExprCfgNode() { isExpressionNode(this) } - } - - private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { - // TODO: Other languages have an extra case here looking like - // simpleAstFlowStep(nodeFrom, nodeTo) - // we should investigate the potential benefit of adding that. - exists(SsaVariable def | - def.getAUse() = nodeTo and - def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom - ) - } - private module CaptureInput implements Shared::InputSig { private import python as PY + additional class ExprCfgNode extends ControlFlowNode { + ExprCfgNode() { isExpressionNode(this) } + } + + private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { + // TODO: Other languages have an extra case here looking like + // simpleAstFlowStep(nodeFrom, nodeTo) + // we should investigate the potential benefit of adding that. + exists(SsaVariable def | + def.getAUse() = nodeTo and + def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom + ) + } + + class Callable extends Scope { + predicate isConstructor() { none() } + } + class BasicBlock extends PY::BasicBlock { Callable getEnclosingCallable() { result = this.getScope() } @@ -482,10 +486,6 @@ module VariableCapture { predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } } - - class Callable extends Scope { - predicate isConstructor() { none() } - } } class CapturedVariable = CaptureInput::CapturedVariable; From e1bf2821d9c9687de2563085e9282f4f48f9546d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 13:59:52 +0100 Subject: [PATCH 065/205] Python: split variable capture instantiation out into its own file. --- .../dataflow/new/internal/DataFlowPrivate.qll | 192 +----------------- .../dataflow/new/internal/VariableCapture.qll | 189 +++++++++++++++++ 2 files changed, 190 insertions(+), 191 deletions(-) create mode 100644 python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll 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 9dd71e7d20c..17c03ba86f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -17,6 +17,7 @@ private import semmle.python.Frameworks import MatchUnpacking import IterableUnpacking import DataFlowDispatch +import VariableCapture as VariableCapture /** Gets the callable in which this node occurs. */ DataFlowCallable nodeGetEnclosingCallable(Node n) { result = n.getEnclosingCallable() } @@ -384,197 +385,6 @@ module LocalFlow { } } -/** Provides logic related to captured variables. */ -module VariableCapture { - private import codeql.dataflow.VariableCapture as Shared - - private module CaptureInput implements Shared::InputSig { - private import python as PY - - additional class ExprCfgNode extends ControlFlowNode { - ExprCfgNode() { isExpressionNode(this) } - } - - private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { - // TODO: Other languages have an extra case here looking like - // simpleAstFlowStep(nodeFrom, nodeTo) - // we should investigate the potential benefit of adding that. - exists(SsaVariable def | - def.getAUse() = nodeTo and - def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom - ) - } - - class Callable extends Scope { - predicate isConstructor() { none() } - } - - class BasicBlock extends PY::BasicBlock { - Callable getEnclosingCallable() { result = this.getScope() } - - // TODO: check that this gives useful results - Location getLocation() { result = super.getNode(0).getLocation() } - } - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - - class CapturedVariable extends LocalVariable { - Function f; - - CapturedVariable() { - // note: captured variables originating on module scope is currently - // covered by global variable handling. - this.getScope() = f and - this.getAnAccess().getScope() != f - } - - Callable getCallable() { result = f } - - Location getLocation() { result = f.getLocation() } - - /** Gets a scope that captures this variable. */ - Scope getACapturingScope() { - result = this.getAnAccess().getScope().getScope*() and - result.getScope+() = f - } - } - - class CapturedParameter extends CapturedVariable { - CapturedParameter() { this.isParameter() } - - ControlFlowNode getCfgNode() { result.getNode().(Parameter) = this.getAnAccess() } - } - - class Expr extends ExprCfgNode { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } - } - - class VariableWrite extends ControlFlowNode { - CapturedVariable v; - - VariableWrite() { this = v.getAStore().getAFlowNode() } - - CapturedVariable getVariable() { result = v } - - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } - } - - class VariableRead extends Expr { - CapturedVariable v; - - VariableRead() { this = v.getALoad().getAFlowNode() } - - CapturedVariable getVariable() { result = v } - } - - class ClosureExpr extends Expr { - ClosureExpr() { - this.getNode() instanceof CallableExpr - or - this.getNode() instanceof Comp - } - - predicate hasBody(Callable body) { - body = this.getNode().(CallableExpr).getInnerScope() - or - body = this.getNode().(Comp).getFunction() - } - - predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } - } - } - - class CapturedVariable = CaptureInput::CapturedVariable; - - class ClosureExpr = CaptureInput::ClosureExpr; - - module Flow = Shared::Flow; - - private Flow::ClosureNode asClosureNode(Node n) { - result = n.(SynthCaptureNode).getSynthesizedCaptureNode() - or - result.(Flow::ExprNode).getExpr() = n.(CfgNode).getNode() - or - result.(Flow::VariableWriteSourceNode).getVariableWrite() = n.(CfgNode).getNode() - or - result.(Flow::ExprPostUpdateNode).getExpr() = - n.(PostUpdateNode).getPreUpdateNode().(CfgNode).getNode() - or - result.(Flow::ParameterNode).getParameter().getCfgNode() = n.(CfgNode).getNode() - or - result.(Flow::ThisParameterNode).getCallable() = - n.(SynthCapturingClosureParameterNode).getCallable() - } - - predicate storeStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { - Flow::storeStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) - } - - predicate readStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { - Flow::readStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) - } - - predicate valueStep(Node nodeFrom, Node nodeTo) { - Flow::localFlowStep(asClosureNode(nodeFrom), asClosureNode(nodeTo)) - } - - // Note: Learn from JS, https://github.com/github/codeql/pull/14412 - // - JS: Capture flow - // - JS: Disallow consecutive captured contents - private module Debug { - predicate flowStoreStep( - Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, - Flow::ClosureNode closureNodeTo, Node nodeTo - ) { - closureNodeFrom = asClosureNode(nodeFrom) and - closureNodeTo = asClosureNode(nodeTo) and - Flow::storeStep(closureNodeFrom, v, closureNodeTo) - } - - predicate unmappedFlowStoreStep( - Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo - ) { - Flow::storeStep(closureNodeFrom, v, closureNodeTo) and - not flowStoreStep(_, closureNodeFrom, v, closureNodeTo, _) - } - - predicate flowReadStep( - Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, - Flow::ClosureNode closureNodeTo, Node nodeTo - ) { - closureNodeFrom = asClosureNode(nodeFrom) and - closureNodeTo = asClosureNode(nodeTo) and - Flow::readStep(closureNodeFrom, v, closureNodeTo) - } - - predicate unmappedFlowReadStep( - Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo - ) { - Flow::readStep(closureNodeFrom, v, closureNodeTo) and - not flowReadStep(_, closureNodeFrom, v, closureNodeTo, _) - } - - predicate flowValueStep( - Node nodeFrom, Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo, Node nodeTo - ) { - closureNodeFrom = asClosureNode(nodeFrom) and - closureNodeTo = asClosureNode(nodeTo) and - Flow::localFlowStep(closureNodeFrom, closureNodeTo) - } - - predicate unmappedFlowValueStep( - Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo - ) { - Flow::localFlowStep(closureNodeFrom, closureNodeTo) and - not flowValueStep(_, closureNodeFrom, closureNodeTo, _) - } - } -} - //-------- // Local flow //-------- diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll new file mode 100644 index 00000000000..ddb66d4297e --- /dev/null +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -0,0 +1,189 @@ +/** Provides logic related to captured variables. */ + +private import python +private import DataFlowPublic +private import semmle.python.dataflow.new.internal.DataFlowPrivate +private import codeql.dataflow.VariableCapture as Shared + +private module CaptureInput implements Shared::InputSig { + private import python as PY + + additional class ExprCfgNode extends ControlFlowNode { + ExprCfgNode() { isExpressionNode(this) } + } + + private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { + // TODO: Other languages have an extra case here looking like + // simpleAstFlowStep(nodeFrom, nodeTo) + // we should investigate the potential benefit of adding that. + exists(SsaVariable def | + def.getAUse() = nodeTo and + def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom + ) + } + + class Callable extends Scope { + predicate isConstructor() { none() } + } + + class BasicBlock extends PY::BasicBlock { + Callable getEnclosingCallable() { result = this.getScope() } + + // TODO: check that this gives useful results + Location getLocation() { result = super.getNode(0).getLocation() } + } + + BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } + + BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } + + class CapturedVariable extends LocalVariable { + Function f; + + CapturedVariable() { + // note: captured variables originating on module scope is currently + // covered by global variable handling. + this.getScope() = f and + this.getAnAccess().getScope() != f + } + + Callable getCallable() { result = f } + + Location getLocation() { result = f.getLocation() } + + /** Gets a scope that captures this variable. */ + Scope getACapturingScope() { + result = this.getAnAccess().getScope().getScope*() and + result.getScope+() = f + } + } + + class CapturedParameter extends CapturedVariable { + CapturedParameter() { this.isParameter() } + + ControlFlowNode getCfgNode() { result.getNode().(Parameter) = this.getAnAccess() } + } + + class Expr extends ExprCfgNode { + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + } + + class VariableWrite extends ControlFlowNode { + CapturedVariable v; + + VariableWrite() { this = v.getAStore().getAFlowNode() } + + CapturedVariable getVariable() { result = v } + + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + } + + class VariableRead extends Expr { + CapturedVariable v; + + VariableRead() { this = v.getALoad().getAFlowNode() } + + CapturedVariable getVariable() { result = v } + } + + class ClosureExpr extends Expr { + ClosureExpr() { + this.getNode() instanceof CallableExpr + or + this.getNode() instanceof Comp + } + + predicate hasBody(Callable body) { + body = this.getNode().(CallableExpr).getInnerScope() + or + body = this.getNode().(Comp).getFunction() + } + + predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } + } +} + +class CapturedVariable = CaptureInput::CapturedVariable; + +class ClosureExpr = CaptureInput::ClosureExpr; + +module Flow = Shared::Flow; + +private Flow::ClosureNode asClosureNode(Node n) { + result = n.(SynthCaptureNode).getSynthesizedCaptureNode() + or + result.(Flow::ExprNode).getExpr() = n.(CfgNode).getNode() + or + result.(Flow::VariableWriteSourceNode).getVariableWrite() = n.(CfgNode).getNode() + or + result.(Flow::ExprPostUpdateNode).getExpr() = + n.(PostUpdateNode).getPreUpdateNode().(CfgNode).getNode() + or + result.(Flow::ParameterNode).getParameter().getCfgNode() = n.(CfgNode).getNode() + or + result.(Flow::ThisParameterNode).getCallable() = + n.(SynthCapturingClosureParameterNode).getCallable() +} + +predicate storeStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { + Flow::storeStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) +} + +predicate readStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { + Flow::readStep(asClosureNode(nodeFrom), c.getVariable(), asClosureNode(nodeTo)) +} + +predicate valueStep(Node nodeFrom, Node nodeTo) { + Flow::localFlowStep(asClosureNode(nodeFrom), asClosureNode(nodeTo)) +} + +/** + * Provides predicates to understand the behaviour of the variable capture + * library instantiation on Python code bases. + */ +private module Debug { + predicate flowStoreStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, + Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::storeStep(closureNodeFrom, v, closureNodeTo) + } + + predicate unmappedFlowStoreStep( + Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo + ) { + Flow::storeStep(closureNodeFrom, v, closureNodeTo) and + not flowStoreStep(_, closureNodeFrom, v, closureNodeTo, _) + } + + predicate flowReadStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, CapturedVariable v, + Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::readStep(closureNodeFrom, v, closureNodeTo) + } + + predicate unmappedFlowReadStep( + Flow::ClosureNode closureNodeFrom, CapturedVariable v, Flow::ClosureNode closureNodeTo + ) { + Flow::readStep(closureNodeFrom, v, closureNodeTo) and + not flowReadStep(_, closureNodeFrom, v, closureNodeTo, _) + } + + predicate flowValueStep( + Node nodeFrom, Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo, Node nodeTo + ) { + closureNodeFrom = asClosureNode(nodeFrom) and + closureNodeTo = asClosureNode(nodeTo) and + Flow::localFlowStep(closureNodeFrom, closureNodeTo) + } + + predicate unmappedFlowValueStep(Flow::ClosureNode closureNodeFrom, Flow::ClosureNode closureNodeTo) { + Flow::localFlowStep(closureNodeFrom, closureNodeTo) and + not flowValueStep(_, closureNodeFrom, closureNodeTo, _) + } +} From 860110598828963bc77a941fbaa9f36069e59211 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 14:03:38 +0100 Subject: [PATCH 066/205] Python: Address TODO comment --- .../semmle/python/dataflow/new/internal/VariableCapture.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 ddb66d4297e..ae218e95d09 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -29,7 +29,9 @@ private module CaptureInput implements Shared::InputSig { class BasicBlock extends PY::BasicBlock { Callable getEnclosingCallable() { result = this.getScope() } - // TODO: check that this gives useful results + // Note `PY:BasicBlock` does not have a `GetLocation` and + // has a more complicated location info logic. + // This is good enough for here. Location getLocation() { result = super.getNode(0).getLocation() } } From 1cbe01923dda8f16648b77fa167035bf887ec181 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 15 Dec 2023 13:08:13 +0000 Subject: [PATCH 067/205] C++: Fix joins in 'AV Rule 145'. --- .../jsf/4.16 Initialization/AV Rule 145.ql | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql b/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql index dd5ee4bf963..d3c959f27b9 100644 --- a/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql +++ b/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql @@ -32,18 +32,39 @@ predicate hasReferenceInitializer(EnumConstant c) { ) } +/** + * Gets the `rnk`'th (1-based) enumeration constant in `e` that does not have a + * reference initializer (i.e., an initializer that refers to an enumeration + * constant from the same enumeration). + */ +EnumConstant getNonReferenceInitializedEnumConstantByRank(Enum e, int rnk) { + result = + rank[rnk](EnumConstant cand, int pos | + e.getEnumConstant(pos) = cand and not hasReferenceInitializer(cand) + | + cand order by pos + ) +} + +/** + * Holds if `ec` is not the last enumeration constant in `e` that has a non- + * reference initializer. + */ +predicate hasNextWithoutReferenceInitializer(Enum e, EnumConstant ec) { + exists(int rnk | + ec = getNonReferenceInitializedEnumConstantByRank(e, rnk) and + exists(getNonReferenceInitializedEnumConstantByRank(e, rnk + 1)) + ) +} + // There exists another constant whose value is implicit, but it's // not the last one: the last value is okay to use to get the highest // enum value automatically. It can be followed by aliases though. predicate enumThatHasConstantWithImplicitValue(Enum e) { - exists(EnumConstant ec, int pos | - ec = e.getEnumConstant(pos) and + exists(EnumConstant ec | + ec = e.getAnEnumConstant() and not hasInitializer(ec) and - exists(EnumConstant ec2, int pos2 | - ec2 = e.getEnumConstant(pos2) and - pos2 > pos and - not hasReferenceInitializer(ec2) - ) + hasNextWithoutReferenceInitializer(e, ec) ) } From e69f0e346168bff9f389ad0ac891b680b6f2b75d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Dec 2023 15:20:56 +0100 Subject: [PATCH 068/205] C#: Don't generate stubs for the record Clone method. --- .../Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs index 5bbeeddf16a..56a20473fa3 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubVisitor.cs @@ -557,6 +557,9 @@ internal sealed class StubVisitor : SymbolVisitor }); } + private static bool ExcludeMethod(IMethodSymbol symbol) => + symbol.Name == "$"; + private void StubMethod(IMethodSymbol symbol, IMethodSymbol? explicitInterfaceSymbol, IMethodSymbol? baseCtor) { var methodKind = explicitInterfaceSymbol is null ? symbol.MethodKind : explicitInterfaceSymbol.MethodKind; @@ -568,7 +571,7 @@ internal sealed class StubVisitor : SymbolVisitor MethodKind.Ordinary }; - if (!relevantMethods.Contains(methodKind)) + if (!relevantMethods.Contains(methodKind) || ExcludeMethod(symbol)) return; StubAttributes(symbol.GetAttributes()); From 38ae848b946bb60fd150006bb72216c6435a2fee Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 15 Dec 2023 15:29:55 +0100 Subject: [PATCH 069/205] C#: Update generated stubs. --- .../8.0.0/ServiceStack.Common.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Common/8.0.0/ServiceStack.Common.cs b/csharp/ql/test/resources/stubs/ServiceStack.Common/8.0.0/ServiceStack.Common.cs index 67302ffe2d5..2e13f82b81f 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Common/8.0.0/ServiceStack.Common.cs +++ b/csharp/ql/test/resources/stubs/ServiceStack.Common/8.0.0/ServiceStack.Common.cs @@ -1436,10 +1436,14 @@ namespace ServiceStack public long decrBy(long value, long by) => throw null; public long decrement(long value) => throw null; public long decrementBy(long value, long by) => throw null; + public object @default(object returnTarget, object elseReturn) => throw null; public string dirPath(string filePath) => throw null; public System.Collections.Generic.IEnumerable distinct(System.Collections.Generic.IEnumerable items) => throw null; public double div(double lhs, double rhs) => throw null; public double divide(double lhs, double rhs) => throw null; + public object @do(ServiceStack.Script.ScriptScopeContext scope, object expression) => throw null; + public System.Threading.Tasks.Task @do(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; + public System.Threading.Tasks.Task @do(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; public object doIf(object test) => throw null; public object doIf(object ignoreTarget, object test) => throw null; public double doubleAdd(double lhs, double rhs) => throw null; @@ -1558,6 +1562,8 @@ namespace ServiceStack public string httpPathInfo(ServiceStack.Script.ScriptScopeContext scope) => throw null; public string httpRequestUrl(ServiceStack.Script.ScriptScopeContext scope) => throw null; public string humanize(string text) => throw null; + public object @if(object test) => throw null; + public object @if(object returnTarget, object test) => throw null; public object ifDebug(ServiceStack.Script.ScriptScopeContext scope, object ignoreTarget) => throw null; public object ifDebug(ServiceStack.Script.ScriptScopeContext scope) => throw null; public object ifDo(object test) => throw null; @@ -1840,6 +1846,9 @@ namespace ServiceStack public object resolveContextArg(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; public object resolveGlobal(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; public object resolvePageArg(ServiceStack.Script.ScriptScopeContext scope, string name) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope, object returnValue) => throw null; + public ServiceStack.Script.StopExecution @return(ServiceStack.Script.ScriptScopeContext scope, object returnValue, System.Collections.Generic.Dictionary returnArgs) => throw null; public System.Collections.Generic.IEnumerable reverse(ServiceStack.Script.ScriptScopeContext scope, System.Collections.Generic.IEnumerable original) => throw null; public string rightPart(string text, string needle) => throw null; public double round(double value) => throw null; @@ -1930,6 +1939,8 @@ namespace ServiceStack public System.Collections.Generic.IEnumerable thenByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression) => throw null; public System.Collections.Generic.IEnumerable thenByDescending(ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; public static System.Collections.Generic.IEnumerable thenByInternal(string filterName, ServiceStack.Script.ScriptScopeContext scope, object target, object expression, object scopeOptions) => throw null; + public object @throw(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; + public object @throw(ServiceStack.Script.ScriptScopeContext scope, string message, object options) => throw null; public object throwArgumentException(ServiceStack.Script.ScriptScopeContext scope, string message) => throw null; public object throwArgumentException(ServiceStack.Script.ScriptScopeContext scope, string message, string options) => throw null; public object throwArgumentNullException(ServiceStack.Script.ScriptScopeContext scope, string paramName) => throw null; @@ -3163,6 +3174,7 @@ namespace ServiceStack public ProtectedScripts() => throw null; public ServiceStack.Script.IgnoreResult Decrypt(string path) => throw null; public ServiceStack.Script.IgnoreResult Decrypt(ServiceStack.Script.FileScripts fs, string path) => throw null; + public object @default(string typeName) => throw null; public ServiceStack.Script.IgnoreResult Delete(string path) => throw null; public ServiceStack.Script.IgnoreResult Delete(ServiceStack.Script.IOScript os, string path) => throw null; public string deleteDirectory(string virtualPath) => throw null; @@ -3253,6 +3265,8 @@ namespace ServiceStack public ServiceStack.Script.IgnoreResult Move(string from, string to) => throw null; public ServiceStack.Script.IgnoreResult Move(ServiceStack.Script.IOScript os, string from, string to) => throw null; public string mv(ServiceStack.Script.ScriptScopeContext scope, string from, string to) => throw null; + public object @new(string typeName) => throw null; + public object @new(string typeName, System.Collections.Generic.List constructorArgs) => throw null; public string osPaths(string path) => throw null; public string proc(ServiceStack.Script.ScriptScopeContext scope, string fileName) => throw null; public string proc(ServiceStack.Script.ScriptScopeContext scope, string fileName, System.Collections.Generic.Dictionary options) => throw null; @@ -3284,6 +3298,7 @@ namespace ServiceStack public string textContents(ServiceStack.IO.IVirtualFile file) => throw null; public string touch(ServiceStack.Script.ScriptScopeContext scope, string target) => throw null; public static string TypeNotFoundErrorMessage(string typeName) => throw null; + public System.Type @typeof(string typeName) => throw null; public System.Type typeofProgId(string name) => throw null; public string typeQualifiedName(System.Type type) => throw null; public System.ReadOnlyMemory urlBytesContents(ServiceStack.Script.ScriptScopeContext scope, string url, object options) => throw null; From 0543ed115e7e759f3d3ed706fa7131a14c1461fc Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 15 Dec 2023 14:57:17 +0000 Subject: [PATCH 070/205] C++: Add barrier for array lookups in 'cpp/double-free' and 'cpp/use-after-free'. --- cpp/ql/src/Critical/FlowAfterFree.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/ql/src/Critical/FlowAfterFree.qll b/cpp/ql/src/Critical/FlowAfterFree.qll index a264a26af0d..caca108f4b2 100644 --- a/cpp/ql/src/Critical/FlowAfterFree.qll +++ b/cpp/ql/src/Critical/FlowAfterFree.qll @@ -87,6 +87,8 @@ module FlowFromFree { | e = any(StoreInstruction store).getDestinationAddress().getUnconvertedResultExpression() ) + or + n.asExpr() instanceof ArrayExpr } } From 82b9f1b31c039baa6a0f019effcf750c6df50fad Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 15 Dec 2023 14:57:31 +0000 Subject: [PATCH 071/205] C++: Accept test changes. --- .../test/query-tests/Critical/MemoryFreed/DoubleFree.expected | 4 ---- cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index ed41630c825..f30092f0626 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -9,7 +9,6 @@ edges | 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:131:10:131:13 | pointer to free output argument | test_free.cpp:132:10:132:13 | access to array | | 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 | nodes @@ -33,8 +32,6 @@ nodes | test_free.cpp:103:10:103:10 | a | semmle.label | a | | test_free.cpp:128:10:128:11 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:129:10:129:11 | * ... | semmle.label | * ... | -| test_free.cpp:131:10:131:13 | pointer to free output argument | semmle.label | pointer to free output argument | -| test_free.cpp:132:10:132:13 | access to array | semmle.label | access to array | | test_free.cpp:152:27:152:27 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:154:10:154:10 | a | semmle.label | a | | test_free.cpp:207:10:207:10 | pointer to free output argument | semmle.label | pointer to free output argument | @@ -51,6 +48,5 @@ subpaths | test_free.cpp:85:12:85:12 | a | test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:83:5:83:13 | delete | delete | | test_free.cpp:103:10:103:10 | a | test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:101:5:101:8 | call to free | call to free | | test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by '* ...' may already have been freed by $@. | test_free.cpp:128:5:128:8 | call to free | call to free | -| test_free.cpp:132:10:132:13 | access to array | test_free.cpp:131:10:131:13 | pointer to free output argument | test_free.cpp:132:10:132:13 | access to array | Memory pointed to by 'access to array' may already have been freed by $@. | test_free.cpp:131:5:131:8 | call to free | call to free | | test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:152:22:152:25 | call to free | call to free | | test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:207:5:207:8 | call to free | call to free | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp index b47f2ef5bb3..24c0fcd922c 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp @@ -129,7 +129,7 @@ void test_ptr_deref(void ** a) { free(*a); // BAD *a = malloc(10); free(a[0]); // GOOD - free(a[1]); // GOOD [FALSE POSITIVE] + free(a[1]); // GOOD } struct list { From e62d542e8fd54bdbb9dfa74f79fdeddec8a5f32e Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 15 Dec 2023 16:25:38 +0100 Subject: [PATCH 072/205] C#: Add telemetry query to report extractor information --- .../ql/src/Telemetry/ExtractorInformation.ql | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 csharp/ql/src/Telemetry/ExtractorInformation.ql diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql new file mode 100644 index 00000000000..c3b97add436 --- /dev/null +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -0,0 +1,180 @@ +/** + * @name C# extraction information + * @description Information about the extraction for a C# database + * @kind metric + * @tags summary telemetry + * @id cs/telemetry/extraction-information + */ + +import csharp +import semmle.code.csharp.commons.Diagnostics + +predicate fileCount(string key, int value) { + key = "Number of files" and + value = strictcount(File f) +} + +predicate fileCountByExtension(string key, int value) { + exists(string extension | + key = "Number of files with extension " + extension and + value = strictcount(File f | f.getExtension() = extension) + ) +} + +predicate totalNumberOfLines(string key, int value) { + key = "Total number of lines" and + value = strictsum(File f | any() | f.getNumberOfLines()) +} + +predicate numberOfLinesOfCode(string key, int value) { + key = "Number of lines of code" and + value = strictsum(File f | any() | f.getNumberOfLinesOfCode()) +} + +predicate totalNumberOfLinesByExtension(string key, int value) { + exists(string extension | + key = "Total number of lines with extension " + extension and + value = strictsum(File f | f.getExtension() = extension | f.getNumberOfLines()) + ) +} + +predicate numberOfLinesOfCodeByExtension(string key, int value) { + exists(string extension | + key = "Number of lines of code with extension " + extension and + value = strictsum(File f | f.getExtension() = extension | f.getNumberOfLinesOfCode()) + ) +} + +predicate extractorDiagnostics(string key, int value) { + exists(int severity | + key = "Number of diagnostics with severity " + severity.toString() and + value = strictcount(Diagnostic d | d.getSeverity() = severity) + ) +} + +CompilerError getAmbiguityCompilerError() { + result.getSeverity() >= 3 and + result.getTag() = ["CS0101", "CS0104", "CS0111", "CS0121", "CS0229"] +} + +predicate numberOfAmbiguityCompilerErrors(string key, int value) { + value = count(getAmbiguityCompilerError()) and + key = "Number of compiler reported ambiguity errors" +} + +predicate numberOfDistinctAmbiguityCompilerErrorMessages(string key, int value) { + value = count(getAmbiguityCompilerError().getFullMessage()) and + key = "Number of compiler reported ambiguity error messages" +} + +predicate extractionIsStandalone(string key, int value) { + ( + value = 1 and + extractionIsStandalone() + or + value = 0 and + not extractionIsStandalone() + ) and + key = "Is buildless extraction" +} + +signature module StatsSig { + int getNumberOfOk(); + + int getNumberOfNotOk(); + + string getOkText(); + + string getNotOkText(); +} + +module ReportStats { + predicate numberOfOk(string key, int value) { + value = Stats::getNumberOfOk() and + key = "Number of " + Stats::getOkText() + } + + predicate numberOfNotOk(string key, int value) { + value = Stats::getNumberOfNotOk() and + key = "Number of " + Stats::getNotOkText() + } + + predicate percentageOfOk(string key, float value) { + value = Stats::getNumberOfOk() * 100.0 / (Stats::getNumberOfOk() + Stats::getNumberOfNotOk()) and + key = "Percentage of " + Stats::getOkText() + } +} + +module CallTargetStats implements StatsSig { + int getNumberOfOk() { result = count(Call c | exists(c.getTarget())) } + + int getNumberOfNotOk() { result = count(Call c | not exists(c.getTarget())) } + + string getOkText() { result = "calls with call target" } + + string getNotOkText() { result = "calls with missing call target" } +} + +module ExprTypeStats implements StatsSig { + int getNumberOfOk() { result = count(Expr e | not e.getType() instanceof UnknownType) } + + int getNumberOfNotOk() { result = count(Expr e | e.getType() instanceof UnknownType) } + + string getOkText() { result = "expressions with known type" } + + string getNotOkText() { result = "expressions with unknown type" } +} + +module TypeMentionTypeStats implements StatsSig { + int getNumberOfOk() { result = count(TypeMention t | not t.getType() instanceof UnknownType) } + + int getNumberOfNotOk() { result = count(TypeMention t | t.getType() instanceof UnknownType) } + + string getOkText() { result = "type mentions with known type" } + + string getNotOkText() { result = "type mentions with unknown type" } +} + +module AccessTargetStats implements StatsSig { + int getNumberOfOk() { result = count(Access a | exists(a.getTarget())) } + + int getNumberOfNotOk() { result = count(Access a | not exists(a.getTarget())) } + + string getOkText() { result = "access with target" } + + string getNotOkText() { result = "access with missing target" } +} + +module CallTargetStatsReport = ReportStats; + +module ExprTypeStatsReport = ReportStats; + +module TypeMentionTypeStatsReport = ReportStats; + +module AccessTargetStatsReport = ReportStats; + +from string key, float value +where + fileCount(key, value) or + fileCountByExtension(key, value) or + totalNumberOfLines(key, value) or + numberOfLinesOfCode(key, value) or + totalNumberOfLinesByExtension(key, value) or + numberOfLinesOfCodeByExtension(key, value) or + extractorDiagnostics(key, value) or + numberOfAmbiguityCompilerErrors(key, value) or + numberOfDistinctAmbiguityCompilerErrorMessages(key, value) or + extractionIsStandalone(key, value) or + CallTargetStatsReport::numberOfOk(key, value) or + CallTargetStatsReport::numberOfNotOk(key, value) or + CallTargetStatsReport::percentageOfOk(key, value) or + ExprTypeStatsReport::numberOfOk(key, value) or + ExprTypeStatsReport::numberOfNotOk(key, value) or + ExprTypeStatsReport::percentageOfOk(key, value) or + TypeMentionTypeStatsReport::numberOfOk(key, value) or + TypeMentionTypeStatsReport::numberOfNotOk(key, value) or + TypeMentionTypeStatsReport::percentageOfOk(key, value) or + AccessTargetStatsReport::numberOfOk(key, value) or + AccessTargetStatsReport::numberOfNotOk(key, value) or + AccessTargetStatsReport::percentageOfOk(key, value) +select key, value From 93cf5b8eb92fec7d4340dede09529de0d3562fb7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 1 Aug 2023 14:53:04 -0400 Subject: [PATCH 073/205] Weak Hashing Property initial query --- .../WeakHashingAlgorithmPropertyQuery.qll | 57 +++++++++++++++++++ .../CWE/CWE-328/WeakHashingProperty.qhelp | 5 ++ .../CWE/CWE-328/WeakHashingProperty.ql | 20 +++++++ ...ographic-algorithm-from-properties-file.md | 5 ++ 4 files changed, 87 insertions(+) create mode 100644 java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll create mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql create mode 100644 java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md diff --git a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll new file mode 100644 index 00000000000..9bfa5a4247e --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll @@ -0,0 +1,57 @@ +/** Provides classes and predicates to reason about property files and weak hashing algorithms. */ + +import java +private import semmle.code.configfiles.ConfigFiles +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.security.Encryption +private import semmle.code.java.frameworks.Properties +private import semmle.code.java.dataflow.RangeUtils + +class GetPropertyMethodAccess extends MethodAccess { + GetPropertyMethodAccess() { this.getMethod() instanceof PropertiesGetPropertyMethod } + + private ConfigPair getPair() { + this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() + } + + string getValue() { + result = this.getPair().getValueElement().getValue() or + result = this.getArgument(1).(ConstantStringExpr).getStringValue() + } +} + +string getWeakHashingAlgorithm(DataFlow::Node node) { +/** + * Get the name of the weak cryptographic algorithm represented by `node`. + */ +string getWeakHashingAlgorithmName(DataFlow::Node node) { + exists(MethodAccess ma, ConfigPair pair | + node.asExpr() = ma and ma.getMethod() instanceof PropertiesGetPropertyMethod + | + ma.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and + pair.getValueElement().getValue() = result and + not pair.getValueElement().getValue().regexpMatch(getSecureAlgorithmRegex()) + ) +} + +/** + * Dataflow configuration from a configuration pair in a properties file to the use of a cryptographic algorithm. + */ +module InsecureAlgorithmPropertyConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { + exists(MethodAccess ma, ConfigPair pair | + n.asExpr() = ma and ma.getMethod() instanceof PropertiesGetPropertyMethod + | + ma.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and + not pair.getValueElement().getValue().regexpMatch(getSecureAlgorithmRegex()) + ) + } + + predicate isSink(DataFlow::Node n) { n.asExpr() = any(CryptoAlgoSpec c).getAlgoSpec() } +} + +/** + * Dataflow from a configuration pair in a properties file to the use of a cryptographic algorithm. + */ +module InsecureAlgorithmPropertyFlow = TaintTracking::Global; diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp new file mode 100644 index 00000000000..bb2517d5586 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp @@ -0,0 +1,5 @@ + + + diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql new file mode 100644 index 00000000000..b4228570728 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql @@ -0,0 +1,20 @@ +/** + * @name Weak Hashing Property + * @description Using weak cryptographic algorithms can allow an attacker to compromise security. + * @id java/weak-hashing-property + * @kind path-problem + * @problem.severity error + * @security-severity 7.5 + * @precision medium + * @tags security + * external/cwe/cwe-328 + */ + +import java +import semmle.code.java.security.WeakHashingAlgorithmPropertyQuery +import InsecureAlgorithmPropertyFlow::PathGraph + +from InsecureAlgorithmPropertyFlow::PathNode source, InsecureAlgorithmPropertyFlow::PathNode sink +where InsecureAlgorithmPropertyFlow::flowPath(source, sink) +select sink.getNode(), sink, source, "The $@ algorithm is insecure.", source, + getWeakHashingAlgorithmName(source.getNode()) diff --git a/java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md new file mode 100644 index 00000000000..6cc6d5e844b --- /dev/null +++ b/java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md @@ -0,0 +1,5 @@ +--- +category: newQuery +--- +* Added the `java/weak-hashing-property` query to detect the use of weak cryptographic algorithms where the algorithm name comes from a `.properties` configuration file. + From 4ff6c1e2ea19dbab00c11245219f70c19bb07e50 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 23 Aug 2023 10:03:13 -0400 Subject: [PATCH 074/205] Test case Co-authored-by: Tony Torralba --- .../properties-files/weak-hashing/.gitignore | 5 + .../weak-hashing/build.gradle | 23 +++ .../gradle/verification-metadata.xml | 7 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../properties-files/weak-hashing/gradlew | 185 ++++++++++++++++++ .../properties-files/weak-hashing/gradlew.bat | 89 +++++++++ .../weak-hashing/settings.gradle | 19 ++ .../main/java/com/example/WeakHashing.java | 18 ++ .../src/main/resources/example.properties | 2 + .../weak-hashing/test.expected | 1 + .../properties-files/weak-hashing/test.py | 7 + .../properties-files/weak-hashing/test.ql | 7 + 12 files changed, 368 insertions(+) create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties create mode 100755 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py create mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore new file mode 100644 index 00000000000..1b6985c0094 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle new file mode 100644 index 00000000000..2b2909942a3 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle @@ -0,0 +1,23 @@ +/* + * This build file was auto generated by running the Gradle 'init' task + * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 + * + * This generated file contains a sample Java project to get you started. + * For more details take a look at the Java Quickstart chapter in the Gradle + * user guide available at https://docs.gradle.org/3.0/userguide/tutorial_java_projects.html + */ + +// Apply the java plugin to add support for Java +apply plugin: 'java' + +// In this section you declare where to find the dependencies of your project +repositories { + // Use 'jcenter' for resolving your dependencies. + // You can declare any Maven/Ivy/file repository here. + jcenter() +} + +// In this section you declare the dependencies for your production and test code +dependencies { + testImplementation 'junit:junit:4.12' +} diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml new file mode 100644 index 00000000000..14a69b8178b --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml @@ -0,0 +1,7 @@ + + + + true + false + + \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..070cb702f09 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew new file mode 100755 index 00000000000..4f906e0c811 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat new file mode 100644 index 00000000000..107acd32c4e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle new file mode 100644 index 00000000000..328db33cdea --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle @@ -0,0 +1,19 @@ +/* + * This settings file was auto generated by the Gradle buildInit task + * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.0/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = 'weak-hashing' diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java new file mode 100644 index 00000000000..c577b9dd62c --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java @@ -0,0 +1,18 @@ +package com.example; + +import java.util.Properties; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class WeakHashing { + void hashing() throws NoSuchAlgorithmException, IOException { + java.util.Properties props = new java.util.Properties(); + props.load(new FileInputStream("example.properties")); + + MessageDigest bad = MessageDigest.getInstance(props.getProperty("hashAlg1")); + + MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); + } +} diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties new file mode 100644 index 00000000000..512e8090bee --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties @@ -0,0 +1,2 @@ +hashAlg1=MD5 +hashAlg2=SHA-256 \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected new file mode 100644 index 00000000000..20b88c629f2 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected @@ -0,0 +1 @@ +| src/main/java/com/example/WeakHashing.java:14:55:14:83 | getProperty(...) | \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py new file mode 100644 index 00000000000..a21b88866a0 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py @@ -0,0 +1,7 @@ +import sys + +from create_database_utils import * + +run_codeql_database_create([], lang="java", extra_env={ + "LGTM_INDEX_PROPERTIES_FILES": "true", +}) diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql new file mode 100644 index 00000000000..43876fb99e0 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql @@ -0,0 +1,7 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.WeakHashingAlgorithmPropertyQuery + +query predicate weakAlgorithmUse(DataFlow::Node sink) { + exists(DataFlow::Node source | InsecureAlgorithmPropertyFlow::flow(source, sink)) +} From 25fa8d5ae78bcf4a218b7aa91ceac96f0a220586 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 23 Aug 2023 10:33:23 -0400 Subject: [PATCH 075/205] Move some logic to class --- .../security/WeakHashingAlgorithmPropertyQuery.qll | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll index 9bfa5a4247e..55cf1e8a7b2 100644 --- a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll @@ -8,20 +8,19 @@ private import semmle.code.java.security.Encryption private import semmle.code.java.frameworks.Properties private import semmle.code.java.dataflow.RangeUtils -class GetPropertyMethodAccess extends MethodAccess { +private class GetPropertyMethodAccess extends MethodAccess { GetPropertyMethodAccess() { this.getMethod() instanceof PropertiesGetPropertyMethod } private ConfigPair getPair() { this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() } - string getValue() { + string getPropertyValue() { result = this.getPair().getValueElement().getValue() or result = this.getArgument(1).(ConstantStringExpr).getStringValue() } } -string getWeakHashingAlgorithm(DataFlow::Node node) { /** * Get the name of the weak cryptographic algorithm represented by `node`. */ @@ -40,11 +39,9 @@ string getWeakHashingAlgorithmName(DataFlow::Node node) { */ module InsecureAlgorithmPropertyConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node n) { - exists(MethodAccess ma, ConfigPair pair | - n.asExpr() = ma and ma.getMethod() instanceof PropertiesGetPropertyMethod - | - ma.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and - not pair.getValueElement().getValue().regexpMatch(getSecureAlgorithmRegex()) + exists(GetPropertyMethodAccess ma, string algo | n.asExpr() = ma | + algo = ma.getPropertyValue() and + not algo.regexpMatch(getSecureAlgorithmRegex()) ) } From 86b57a11acf15a4d56ccb8e2ab590158bba2398b Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Sun, 22 Oct 2023 21:17:51 -0400 Subject: [PATCH 076/205] Bump change note date --- ...23-10-23-weak-cryptographic-algorithm-from-properties-file.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2023-08-23-weak-cryptographic-algorithm-from-properties-file.md => 2023-10-23-weak-cryptographic-algorithm-from-properties-file.md} (100%) diff --git a/java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-10-23-weak-cryptographic-algorithm-from-properties-file.md similarity index 100% rename from java/ql/src/change-notes/2023-08-23-weak-cryptographic-algorithm-from-properties-file.md rename to java/ql/src/change-notes/2023-10-23-weak-cryptographic-algorithm-from-properties-file.md From 0efca8200dce097377ce0601f18403ebcd42846f Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 25 Oct 2023 20:23:30 -0400 Subject: [PATCH 077/205] Weak Hashing query wording --- java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql index b4228570728..2d185fbf6cb 100644 --- a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql +++ b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql @@ -1,5 +1,5 @@ /** - * @name Weak Hashing Property + * @name Weak hashing algorithm specified in properties file * @description Using weak cryptographic algorithms can allow an attacker to compromise security. * @id java/weak-hashing-property * @kind path-problem @@ -16,5 +16,5 @@ import InsecureAlgorithmPropertyFlow::PathGraph from InsecureAlgorithmPropertyFlow::PathNode source, InsecureAlgorithmPropertyFlow::PathNode sink where InsecureAlgorithmPropertyFlow::flowPath(source, sink) -select sink.getNode(), sink, source, "The $@ algorithm is insecure.", source, +select sink.getNode(), sink, source, "The $@ hashing algorithm is insecure.", source, getWeakHashingAlgorithmName(source.getNode()) From cb0ea350b5cec833b6e7731ec610ec10104f8a61 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 26 Oct 2023 00:08:52 -0400 Subject: [PATCH 078/205] Improve docs --- .../CWE/CWE-328/WeakHashingProperty.java | 9 ++++++ .../CWE/CWE-328/WeakHashingProperty.qhelp | 29 ++++++++++++++++++- .../Security/CWE/CWE-328/settings.properties | 1 + 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java create mode 100644 java/ql/src/Security/CWE/CWE-328/settings.properties diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java new file mode 100644 index 00000000000..72ef71bb49a --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java @@ -0,0 +1,9 @@ +import java.io.FileInputStream; +import java.util.Properties; +import java.security.MessageDigest; + +Properties props = Properties.load(new FileInputStream("settings.properties")); + +// BAD: the `hashAlgorithm` variable in `settings.properties` is `MD5` which is +// a weak hashing algorithm. +MessageDigest.getInstance(props.getProperty("hashAlgorithm")); diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp index bb2517d5586..4cc0994d6d4 100644 --- a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp +++ b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp @@ -2,4 +2,31 @@ "-//Semmle//qhelp//EN" "qhelp.dtd"> - + +

    + Using a weak hashing algorithm can result in attackers being able to + determine the original input to a hash function or create a second input + which will produce the same hash. +

    +
    + + +

    Ensure you are using a strong, modern hashing algorithm, such as SHA-256.

    +
    + + +

    In the following (BAD) example, the MD5 hashing algorithm is used, specified in a .properties file.

    + + + + + +
    + + +
  • NIST, FIPS 140 Annex a: +Approved Security Functions.
  • +
  • NIST, SP 800-131A: +Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths.
  • +
    + diff --git a/java/ql/src/Security/CWE/CWE-328/settings.properties b/java/ql/src/Security/CWE/CWE-328/settings.properties new file mode 100644 index 00000000000..941d99cd3f1 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-328/settings.properties @@ -0,0 +1 @@ +hashAlgorithm=MD5 From c20ea1f629db5a97643ab1da0892679e9973494d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 26 Oct 2023 00:16:36 -0400 Subject: [PATCH 079/205] Bump change note date --- ...23-10-27-weak-cryptographic-algorithm-from-properties-file.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2023-10-23-weak-cryptographic-algorithm-from-properties-file.md => 2023-10-27-weak-cryptographic-algorithm-from-properties-file.md} (100%) diff --git a/java/ql/src/change-notes/2023-10-23-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md similarity index 100% rename from java/ql/src/change-notes/2023-10-23-weak-cryptographic-algorithm-from-properties-file.md rename to java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md From fbc2a335972fa64c22336b463be12d78431c78ff Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 26 Oct 2023 00:39:15 -0400 Subject: [PATCH 080/205] Replace MethodAccess with MethodCall --- .../security/WeakHashingAlgorithmPropertyQuery.qll | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll index 55cf1e8a7b2..11f323556b9 100644 --- a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll @@ -8,8 +8,8 @@ private import semmle.code.java.security.Encryption private import semmle.code.java.frameworks.Properties private import semmle.code.java.dataflow.RangeUtils -private class GetPropertyMethodAccess extends MethodAccess { - GetPropertyMethodAccess() { this.getMethod() instanceof PropertiesGetPropertyMethod } +private class GetPropertyMethodCall extends MethodCall { + GetPropertyMethodCall() { this.getMethod() instanceof PropertiesGetPropertyMethod } private ConfigPair getPair() { this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() @@ -25,10 +25,10 @@ private class GetPropertyMethodAccess extends MethodAccess { * Get the name of the weak cryptographic algorithm represented by `node`. */ string getWeakHashingAlgorithmName(DataFlow::Node node) { - exists(MethodAccess ma, ConfigPair pair | - node.asExpr() = ma and ma.getMethod() instanceof PropertiesGetPropertyMethod + exists(MethodCall mc, ConfigPair pair | + node.asExpr() = mc and mc.getMethod() instanceof PropertiesGetPropertyMethod | - ma.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and + mc.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and pair.getValueElement().getValue() = result and not pair.getValueElement().getValue().regexpMatch(getSecureAlgorithmRegex()) ) @@ -39,8 +39,8 @@ string getWeakHashingAlgorithmName(DataFlow::Node node) { */ module InsecureAlgorithmPropertyConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node n) { - exists(GetPropertyMethodAccess ma, string algo | n.asExpr() = ma | - algo = ma.getPropertyValue() and + exists(GetPropertyMethodCall mc, string algo | n.asExpr() = mc | + algo = mc.getPropertyValue() and not algo.regexpMatch(getSecureAlgorithmRegex()) ) } From 83c6ece405ad843f985dd80605df14f446a84a17 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 15 Nov 2023 13:02:23 -0500 Subject: [PATCH 081/205] Move weak hashing into MaybeBrokenCryptoAlgorithm --- .../MaybeBrokenCryptoAlgorithmQuery.qll | 32 ++++++++++- .../WeakHashingAlgorithmPropertyQuery.qll | 54 ------------------- .../CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 9 ++-- .../CWE/CWE-328/WeakHashingProperty.java | 9 ---- .../CWE/CWE-328/WeakHashingProperty.qhelp | 32 ----------- .../CWE/CWE-328/WeakHashingProperty.ql | 20 ------- .../Security/CWE/CWE-328/settings.properties | 1 - 7 files changed, 34 insertions(+), 123 deletions(-) delete mode 100644 java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll delete mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java delete mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp delete mode 100644 java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql delete mode 100644 java/ql/src/Security/CWE/CWE-328/settings.properties diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index 2ab5e68ba7c..603a4566926 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -3,9 +3,12 @@ */ import java +private import semmle.code.configfiles.ConfigFiles private import semmle.code.java.security.Encryption private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.dataflow.RangeUtils private import semmle.code.java.dispatch.VirtualDispatch +private import semmle.code.java.frameworks.Properties private class ShortStringLiteral extends StringLiteral { ShortStringLiteral() { this.getValue().length() < 100 } @@ -34,11 +37,38 @@ private predicate objectToString(MethodCall ma) { ) } +private class GetPropertyMethodCall extends MethodCall { + GetPropertyMethodCall() { this.getMethod() instanceof PropertiesGetPropertyMethod } + + private ConfigPair getPair() { + this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() + } + + string getPropertyValue() { + result = this.getPair().getValueElement().getValue() or + result = this.getArgument(1).(ConstantStringExpr).getStringValue() + } +} + +string insecureAlgorithmName(DataFlow::Node algo) { + result = algo.asExpr().(StringLiteral).getValue() + or + result = algo.asExpr().(GetPropertyMethodCall).getPropertyValue() +} + /** * A taint-tracking configuration to reason about the use of potentially insecure cryptographic algorithms. */ module InsecureCryptoConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { n.asExpr() instanceof InsecureAlgoLiteral } + predicate isSource(DataFlow::Node n) { + n.asExpr() instanceof InsecureAlgoLiteral + or + exists(GetPropertyMethodCall mc | n.asExpr() = mc | + // Since properties pairs are not included in the java/weak-crypto-algorithm, + // The check for values from properties files can be less strict than `InsecureAlgoLiteral`. + not mc.getPropertyValue().regexpMatch(getSecureAlgorithmRegex()) + ) + } predicate isSink(DataFlow::Node n) { exists(CryptoAlgoSpec c | n.asExpr() = c.getAlgoSpec()) } diff --git a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll b/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll deleted file mode 100644 index 11f323556b9..00000000000 --- a/java/ql/lib/semmle/code/java/security/WeakHashingAlgorithmPropertyQuery.qll +++ /dev/null @@ -1,54 +0,0 @@ -/** Provides classes and predicates to reason about property files and weak hashing algorithms. */ - -import java -private import semmle.code.configfiles.ConfigFiles -private import semmle.code.java.dataflow.DataFlow -private import semmle.code.java.dataflow.TaintTracking -private import semmle.code.java.security.Encryption -private import semmle.code.java.frameworks.Properties -private import semmle.code.java.dataflow.RangeUtils - -private class GetPropertyMethodCall extends MethodCall { - GetPropertyMethodCall() { this.getMethod() instanceof PropertiesGetPropertyMethod } - - private ConfigPair getPair() { - this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() - } - - string getPropertyValue() { - result = this.getPair().getValueElement().getValue() or - result = this.getArgument(1).(ConstantStringExpr).getStringValue() - } -} - -/** - * Get the name of the weak cryptographic algorithm represented by `node`. - */ -string getWeakHashingAlgorithmName(DataFlow::Node node) { - exists(MethodCall mc, ConfigPair pair | - node.asExpr() = mc and mc.getMethod() instanceof PropertiesGetPropertyMethod - | - mc.getArgument(0).(ConstantStringExpr).getStringValue() = pair.getNameElement().getName() and - pair.getValueElement().getValue() = result and - not pair.getValueElement().getValue().regexpMatch(getSecureAlgorithmRegex()) - ) -} - -/** - * Dataflow configuration from a configuration pair in a properties file to the use of a cryptographic algorithm. - */ -module InsecureAlgorithmPropertyConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { - exists(GetPropertyMethodCall mc, string algo | n.asExpr() = mc | - algo = mc.getPropertyValue() and - not algo.regexpMatch(getSecureAlgorithmRegex()) - ) - } - - predicate isSink(DataFlow::Node n) { n.asExpr() = any(CryptoAlgoSpec c).getAlgoSpec() } -} - -/** - * Dataflow from a configuration pair in a properties file to the use of a cryptographic algorithm. - */ -module InsecureAlgorithmPropertyFlow = TaintTracking::Global; diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index c195c850011..02b35325ecc 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -16,13 +16,10 @@ import semmle.code.java.security.Encryption import semmle.code.java.security.MaybeBrokenCryptoAlgorithmQuery import InsecureCryptoFlow::PathGraph -from - InsecureCryptoFlow::PathNode source, InsecureCryptoFlow::PathNode sink, CryptoAlgoSpec c, - InsecureAlgoLiteral s +from InsecureCryptoFlow::PathNode source, InsecureCryptoFlow::PathNode sink, CryptoAlgoSpec c where sink.getNode().asExpr() = c.getAlgoSpec() and - source.getNode().asExpr() = s and InsecureCryptoFlow::flowPath(source, sink) select c, source, sink, - "Cryptographic algorithm $@ may not be secure, consider using a different algorithm.", s, - s.getValue() + "Cryptographic algorithm $@ may not be secure, consider using a different algorithm.", source, + insecureAlgorithmName(source.getNode()) diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java deleted file mode 100644 index 72ef71bb49a..00000000000 --- a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.java +++ /dev/null @@ -1,9 +0,0 @@ -import java.io.FileInputStream; -import java.util.Properties; -import java.security.MessageDigest; - -Properties props = Properties.load(new FileInputStream("settings.properties")); - -// BAD: the `hashAlgorithm` variable in `settings.properties` is `MD5` which is -// a weak hashing algorithm. -MessageDigest.getInstance(props.getProperty("hashAlgorithm")); diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp deleted file mode 100644 index 4cc0994d6d4..00000000000 --- a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.qhelp +++ /dev/null @@ -1,32 +0,0 @@ - - - -

    - Using a weak hashing algorithm can result in attackers being able to - determine the original input to a hash function or create a second input - which will produce the same hash. -

    -
    - - -

    Ensure you are using a strong, modern hashing algorithm, such as SHA-256.

    -
    - - -

    In the following (BAD) example, the MD5 hashing algorithm is used, specified in a .properties file.

    - - - - - -
    - - -
  • NIST, FIPS 140 Annex a: -Approved Security Functions.
  • -
  • NIST, SP 800-131A: -Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths.
  • -
    -
    diff --git a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql b/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql deleted file mode 100644 index 2d185fbf6cb..00000000000 --- a/java/ql/src/Security/CWE/CWE-328/WeakHashingProperty.ql +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @name Weak hashing algorithm specified in properties file - * @description Using weak cryptographic algorithms can allow an attacker to compromise security. - * @id java/weak-hashing-property - * @kind path-problem - * @problem.severity error - * @security-severity 7.5 - * @precision medium - * @tags security - * external/cwe/cwe-328 - */ - -import java -import semmle.code.java.security.WeakHashingAlgorithmPropertyQuery -import InsecureAlgorithmPropertyFlow::PathGraph - -from InsecureAlgorithmPropertyFlow::PathNode source, InsecureAlgorithmPropertyFlow::PathNode sink -where InsecureAlgorithmPropertyFlow::flowPath(source, sink) -select sink.getNode(), sink, source, "The $@ hashing algorithm is insecure.", source, - getWeakHashingAlgorithmName(source.getNode()) diff --git a/java/ql/src/Security/CWE/CWE-328/settings.properties b/java/ql/src/Security/CWE/CWE-328/settings.properties deleted file mode 100644 index 941d99cd3f1..00000000000 --- a/java/ql/src/Security/CWE/CWE-328/settings.properties +++ /dev/null @@ -1 +0,0 @@ -hashAlgorithm=MD5 From 8e55ced288a2831fd3e387f5ca3dc15d11ccdd4c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 15 Nov 2023 13:05:03 -0500 Subject: [PATCH 082/205] Update test to use MaybeBrokenCryptoAlgorithm --- .../all-platforms/java/properties-files/weak-hashing/test.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql index 43876fb99e0..6a932e8012d 100644 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql +++ b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql @@ -1,7 +1,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.security.WeakHashingAlgorithmPropertyQuery +import semmle.code.java.security.MaybeBrokenCryptoAlgorithmQuery query predicate weakAlgorithmUse(DataFlow::Node sink) { - exists(DataFlow::Node source | InsecureAlgorithmPropertyFlow::flow(source, sink)) + exists(DataFlow::Node source | InsecureCryptoFlow::flow(source, sink)) } From 1c3993e632d40c6071c1ea7d4f051e3172e9cf74 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 15 Nov 2023 13:07:27 -0500 Subject: [PATCH 083/205] QLDocs --- .../code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index 603a4566926..d00a0ed356e 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -50,6 +50,12 @@ private class GetPropertyMethodCall extends MethodCall { } } +/** + * Get the string value represented by the given expression. + * + * If the value is a string literal, return the literal value. + * If the value is a call to `java.util.Properties::getProperty`, return the potential values of the property. + */ string insecureAlgorithmName(DataFlow::Node algo) { result = algo.asExpr().(StringLiteral).getValue() or From 078a33eecc42ac6d9512ccb5194416f1c5d31d75 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 16 Nov 2023 10:37:21 -0500 Subject: [PATCH 084/205] Updated change note --- ...-10-27-weak-cryptographic-algorithm-from-properties-file.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md index 6cc6d5e844b..4b6be274593 100644 --- a/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md +++ b/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md @@ -1,5 +1,4 @@ --- category: newQuery --- -* Added the `java/weak-hashing-property` query to detect the use of weak cryptographic algorithms where the algorithm name comes from a `.properties` configuration file. - +* Modified the `java/potentially-weak-cryptographic-algorithm` query to include the use of weak cryptographic algorithms from configuration values specified in properties files. From 0d12981d6a8e48f6b95ce1ec5dffddbf2e4713c7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 16 Nov 2023 10:37:49 -0500 Subject: [PATCH 085/205] Bump change note --- ...23-11-17-weak-cryptographic-algorithm-from-properties-file.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2023-10-27-weak-cryptographic-algorithm-from-properties-file.md => 2023-11-17-weak-cryptographic-algorithm-from-properties-file.md} (100%) diff --git a/java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-11-17-weak-cryptographic-algorithm-from-properties-file.md similarity index 100% rename from java/ql/src/change-notes/2023-10-27-weak-cryptographic-algorithm-from-properties-file.md rename to java/ql/src/change-notes/2023-11-17-weak-cryptographic-algorithm-from-properties-file.md From afefccf8f756ad2cf5dd948a651f500061d3d6d4 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 4 Dec 2023 10:59:45 -0500 Subject: [PATCH 086/205] Update change note --- ...-12-10-weak-cryptographic-algorithm-from-properties-file.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename java/ql/src/change-notes/{2023-11-17-weak-cryptographic-algorithm-from-properties-file.md => 2023-12-10-weak-cryptographic-algorithm-from-properties-file.md} (88%) diff --git a/java/ql/src/change-notes/2023-11-17-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-12-10-weak-cryptographic-algorithm-from-properties-file.md similarity index 88% rename from java/ql/src/change-notes/2023-11-17-weak-cryptographic-algorithm-from-properties-file.md rename to java/ql/src/change-notes/2023-12-10-weak-cryptographic-algorithm-from-properties-file.md index 4b6be274593..9b5436b4b25 100644 --- a/java/ql/src/change-notes/2023-11-17-weak-cryptographic-algorithm-from-properties-file.md +++ b/java/ql/src/change-notes/2023-12-10-weak-cryptographic-algorithm-from-properties-file.md @@ -1,4 +1,4 @@ --- -category: newQuery +category: minorAnalysis --- * Modified the `java/potentially-weak-cryptographic-algorithm` query to include the use of weak cryptographic algorithms from configuration values specified in properties files. From 8826eaf1a30c5aec7f431fe1a0686fe84fd6e637 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Dec 2023 22:56:44 -0500 Subject: [PATCH 087/205] Move test case to query tests --- .../tests/MaybeBrokenCryptoAlgorithm.expected | 2 ++ .../CWE-327/semmle/tests/WeakHashing.java | 20 +++++++++++++++++++ .../CWE-327/semmle/tests/example.properties | 2 ++ 3 files changed, 24 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java create mode 100644 java/ql/test/query-tests/security/CWE-327/semmle/tests/example.properties diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected index f61954d848a..db8d77a1454 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected @@ -1,6 +1,8 @@ edges nodes | Test.java:34:48:34:52 | "foo" | semmle.label | "foo" | +| WeakHashing.java:15:55:15:83 | getProperty(...) | semmle.label | getProperty(...) | subpaths #select | Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | foo | +| WeakHashing.java:15:29:15:84 | getInstance(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:15:55:15:83 | getProperty(...) | MD5 | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java new file mode 100644 index 00000000000..8b5271d8dcc --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java @@ -0,0 +1,20 @@ +package test.cwe327.semmle.tests; + +import java.util.Properties; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class WeakHashing { + void hashing() throws NoSuchAlgorithmException, IOException { + java.util.Properties props = new java.util.Properties(); + props.load(new FileInputStream("example.properties")); + + // BAD: Using a weak hashing algorithm + MessageDigest bad = MessageDigest.getInstance(props.getProperty("hashAlg1")); + + // GOOD: Using a strong hashing algorithm + MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/example.properties b/java/ql/test/query-tests/security/CWE-327/semmle/tests/example.properties new file mode 100644 index 00000000000..512e8090bee --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/example.properties @@ -0,0 +1,2 @@ +hashAlg1=MD5 +hashAlg2=SHA-256 \ No newline at end of file From fc53727b9de4cc1cd6bb70c6d3995cd518f80a5a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 13 Dec 2023 22:58:26 -0500 Subject: [PATCH 088/205] Bump change note date --- ...23-12-15-weak-cryptographic-algorithm-from-properties-file.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2023-12-10-weak-cryptographic-algorithm-from-properties-file.md => 2023-12-15-weak-cryptographic-algorithm-from-properties-file.md} (100%) diff --git a/java/ql/src/change-notes/2023-12-10-weak-cryptographic-algorithm-from-properties-file.md b/java/ql/src/change-notes/2023-12-15-weak-cryptographic-algorithm-from-properties-file.md similarity index 100% rename from java/ql/src/change-notes/2023-12-10-weak-cryptographic-algorithm-from-properties-file.md rename to java/ql/src/change-notes/2023-12-15-weak-cryptographic-algorithm-from-properties-file.md From 73cb01fc89ace352a6caf088e4f8c6a76bd6b7f9 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 14 Dec 2023 11:58:00 -0500 Subject: [PATCH 089/205] Remove integration test (ported to query test) The `.properties` file extractor has been enabled by default, so the test about sources from `getProperty` calls can be ported to a query test. --- .../properties-files/weak-hashing/.gitignore | 5 - .../weak-hashing/build.gradle | 23 --- .../gradle/verification-metadata.xml | 7 - .../gradle/wrapper/gradle-wrapper.properties | 5 - .../properties-files/weak-hashing/gradlew | 185 ------------------ .../properties-files/weak-hashing/gradlew.bat | 89 --------- .../weak-hashing/settings.gradle | 19 -- .../main/java/com/example/WeakHashing.java | 18 -- .../src/main/resources/example.properties | 2 - .../weak-hashing/test.expected | 1 - .../properties-files/weak-hashing/test.py | 7 - .../properties-files/weak-hashing/test.ql | 7 - 12 files changed, 368 deletions(-) delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py delete mode 100644 java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore deleted file mode 100644 index 1b6985c0094..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle deleted file mode 100644 index 2b2909942a3..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/build.gradle +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This build file was auto generated by running the Gradle 'init' task - * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 - * - * This generated file contains a sample Java project to get you started. - * For more details take a look at the Java Quickstart chapter in the Gradle - * user guide available at https://docs.gradle.org/3.0/userguide/tutorial_java_projects.html - */ - -// Apply the java plugin to add support for Java -apply plugin: 'java' - -// In this section you declare where to find the dependencies of your project -repositories { - // Use 'jcenter' for resolving your dependencies. - // You can declare any Maven/Ivy/file repository here. - jcenter() -} - -// In this section you declare the dependencies for your production and test code -dependencies { - testImplementation 'junit:junit:4.12' -} diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml deleted file mode 100644 index 14a69b8178b..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/verification-metadata.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - true - false - - \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 070cb702f09..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew deleted file mode 100755 index 4f906e0c811..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat deleted file mode 100644 index 107acd32c4e..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle deleted file mode 100644 index 328db33cdea..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/settings.gradle +++ /dev/null @@ -1,19 +0,0 @@ -/* - * This settings file was auto generated by the Gradle buildInit task - * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 - * - * The settings file is used to specify which projects to include in your build. - * In a single project build this file can be empty or even removed. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user guide at https://docs.gradle.org/3.0/userguide/multi_project_builds.html - */ - -/* -// To declare projects as part of a multi-project build use the 'include' method -include 'shared' -include 'api' -include 'services:webservice' -*/ - -rootProject.name = 'weak-hashing' diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java deleted file mode 100644 index c577b9dd62c..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/java/com/example/WeakHashing.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example; - -import java.util.Properties; -import java.io.FileInputStream; -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class WeakHashing { - void hashing() throws NoSuchAlgorithmException, IOException { - java.util.Properties props = new java.util.Properties(); - props.load(new FileInputStream("example.properties")); - - MessageDigest bad = MessageDigest.getInstance(props.getProperty("hashAlg1")); - - MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); - } -} diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties deleted file mode 100644 index 512e8090bee..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/src/main/resources/example.properties +++ /dev/null @@ -1,2 +0,0 @@ -hashAlg1=MD5 -hashAlg2=SHA-256 \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected deleted file mode 100644 index 20b88c629f2..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.expected +++ /dev/null @@ -1 +0,0 @@ -| src/main/java/com/example/WeakHashing.java:14:55:14:83 | getProperty(...) | \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py deleted file mode 100644 index a21b88866a0..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.py +++ /dev/null @@ -1,7 +0,0 @@ -import sys - -from create_database_utils import * - -run_codeql_database_create([], lang="java", extra_env={ - "LGTM_INDEX_PROPERTIES_FILES": "true", -}) diff --git a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql b/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql deleted file mode 100644 index 6a932e8012d..00000000000 --- a/java/ql/integration-tests/all-platforms/java/properties-files/weak-hashing/test.ql +++ /dev/null @@ -1,7 +0,0 @@ -import java -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.security.MaybeBrokenCryptoAlgorithmQuery - -query predicate weakAlgorithmUse(DataFlow::Node sink) { - exists(DataFlow::Node source | InsecureCryptoFlow::flow(source, sink)) -} From 02581a385012ec95678f73375379c7c7579478af Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 15 Dec 2023 11:08:23 -0500 Subject: [PATCH 090/205] Move class for getProperty method call to Properties.qll --- .../code/java/frameworks/Properties.qll | 18 +++++++++++++ .../MaybeBrokenCryptoAlgorithmQuery.qll | 27 +------------------ .../CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 16 ++++++++++- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/Properties.qll b/java/ql/lib/semmle/code/java/frameworks/Properties.qll index b431897a1f5..3bcf860d7ee 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Properties.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Properties.qll @@ -2,6 +2,8 @@ import semmle.code.java.Type private import semmle.code.java.dataflow.FlowSteps +private import semmle.code.configfiles.ConfigFiles +private import semmle.code.java.dataflow.RangeUtils /** * The `java.util.Properties` class. @@ -43,3 +45,19 @@ class PropertiesStoreMethod extends Method { (this.getName().matches("store%") or this.getName() = "save") } } + +/** + * A call to the `getProperty` method of the class `java.util.Properties`. + */ +class PropertiesGetPropertyMethodCall extends MethodCall { + PropertiesGetPropertyMethodCall() { this.getMethod() instanceof PropertiesGetPropertyMethod } + + private ConfigPair getPair() { + this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() + } + + string getPropertyValue() { + result = this.getPair().getValueElement().getValue() or + result = this.getArgument(1).(ConstantStringExpr).getStringValue() + } +} diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index d00a0ed356e..8d390cb142c 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -37,31 +37,6 @@ private predicate objectToString(MethodCall ma) { ) } -private class GetPropertyMethodCall extends MethodCall { - GetPropertyMethodCall() { this.getMethod() instanceof PropertiesGetPropertyMethod } - - private ConfigPair getPair() { - this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() - } - - string getPropertyValue() { - result = this.getPair().getValueElement().getValue() or - result = this.getArgument(1).(ConstantStringExpr).getStringValue() - } -} - -/** - * Get the string value represented by the given expression. - * - * If the value is a string literal, return the literal value. - * If the value is a call to `java.util.Properties::getProperty`, return the potential values of the property. - */ -string insecureAlgorithmName(DataFlow::Node algo) { - result = algo.asExpr().(StringLiteral).getValue() - or - result = algo.asExpr().(GetPropertyMethodCall).getPropertyValue() -} - /** * A taint-tracking configuration to reason about the use of potentially insecure cryptographic algorithms. */ @@ -69,7 +44,7 @@ module InsecureCryptoConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node n) { n.asExpr() instanceof InsecureAlgoLiteral or - exists(GetPropertyMethodCall mc | n.asExpr() = mc | + exists(PropertiesGetPropertyMethodCall mc | n.asExpr() = mc | // Since properties pairs are not included in the java/weak-crypto-algorithm, // The check for values from properties files can be less strict than `InsecureAlgoLiteral`. not mc.getPropertyValue().regexpMatch(getSecureAlgorithmRegex()) diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index 02b35325ecc..2004462942e 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -13,13 +13,27 @@ import java import semmle.code.java.security.Encryption +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.frameworks.Properties import semmle.code.java.security.MaybeBrokenCryptoAlgorithmQuery import InsecureCryptoFlow::PathGraph +/** + * Get the string value represented by the given expression. + * + * If the value is a string literal, return the literal value. + * If the value is a call to `java.util.Properties::getProperty`, return the potential values of the property. + */ +string getStringValue(DataFlow::Node algo) { + result = algo.asExpr().(StringLiteral).getValue() + or + result = algo.asExpr().(PropertiesGetPropertyMethodCall).getPropertyValue() +} + from InsecureCryptoFlow::PathNode source, InsecureCryptoFlow::PathNode sink, CryptoAlgoSpec c where sink.getNode().asExpr() = c.getAlgoSpec() and InsecureCryptoFlow::flowPath(source, sink) select c, source, sink, "Cryptographic algorithm $@ may not be secure, consider using a different algorithm.", source, - insecureAlgorithmName(source.getNode()) + getStringValue(source.getNode()) From 09a0730491921139313ebb41eb6850a127faed7c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 15 Dec 2023 11:13:09 -0500 Subject: [PATCH 091/205] QLdoc fix --- java/ql/lib/semmle/code/java/frameworks/Properties.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/Properties.qll b/java/ql/lib/semmle/code/java/frameworks/Properties.qll index 3bcf860d7ee..15e7b687885 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Properties.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Properties.qll @@ -56,6 +56,9 @@ class PropertiesGetPropertyMethodCall extends MethodCall { this.getArgument(0).(ConstantStringExpr).getStringValue() = result.getNameElement().getName() } + /** + * Get the potential string values that can be associated with the given property name. + */ string getPropertyValue() { result = this.getPair().getValueElement().getValue() or result = this.getArgument(1).(ConstantStringExpr).getStringValue() From ef916f0ba000dc707ad0b6c90733b151c1e788a0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 15 Dec 2023 17:12:37 +0000 Subject: [PATCH 092/205] C++: Mitigate ODR violations. --- cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql b/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql index d3c959f27b9..9cd04c97328 100644 --- a/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql +++ b/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql @@ -39,10 +39,12 @@ predicate hasReferenceInitializer(EnumConstant c) { */ EnumConstant getNonReferenceInitializedEnumConstantByRank(Enum e, int rnk) { result = - rank[rnk](EnumConstant cand, int pos | - e.getEnumConstant(pos) = cand and not hasReferenceInitializer(cand) + rank[rnk](EnumConstant cand, int pos, string filepath, int startline, int startcolumn | + e.getEnumConstant(pos) = cand and + not hasReferenceInitializer(cand) and + cand.getLocation().hasLocationInfo(filepath, startline, startcolumn, _, _) | - cand order by pos + cand order by pos, filepath, startline, startcolumn ) } From 19085753867bef6a67068996e63c9ceb8ec3f88f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 15 Dec 2023 18:11:28 +0000 Subject: [PATCH 093/205] Swift: Add more test cases for launchOptions as a source. --- .../flowsources/customurlschemes.swift | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/swift/ql/test/library-tests/dataflow/flowsources/customurlschemes.swift b/swift/ql/test/library-tests/dataflow/flowsources/customurlschemes.swift index eb50c15824b..a6d81a299da 100644 --- a/swift/ql/test/library-tests/dataflow/flowsources/customurlschemes.swift +++ b/swift/ql/test/library-tests/dataflow/flowsources/customurlschemes.swift @@ -80,14 +80,45 @@ class AppDelegate: UIApplicationDelegate { } func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool { - _ = launchOptions?[.url] // $ source=remote + let url = launchOptions?[.url] // $ source=remote + sink(arg: url) // $ tainted return true } func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool { - _ = launchOptions?[.url] // $ source=remote + let url = launchOptions?[.url] // $ source=remote + sink(arg: url) // $ tainted + + let url2 = launchOptions?[.url] as! String // $ source=remote + sink(arg: url2) // $ tainted + + if let url3 = launchOptions?[.url] as? String { // $ source=remote + sink(arg: url3) // $ tainted + } + + if let options = launchOptions { + let url4 = options[.url] as! String // $ source=remote + sink(arg: url4) // $ tainted + } + + switch launchOptions { + case .some(let options): + let url5 = options[.url] // $ MISSING: source=remote + sink(arg: url5) // $ MISSING: tainted + case .none: + break + } + + processLaunchOptions(options: launchOptions) + return true } + + private func processLaunchOptions(options: [UIApplication.LaunchOptionsKey : Any]?) { + // (called above) + let url = options?[.url] // $ MISSING: source=remote + sink(arg: url) // $ MISSING: tainted + } } class SceneDelegate : UISceneDelegate { From 416ba6a70964d4e5d9bb916ae71216db53895a2f Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 21:26:05 +0100 Subject: [PATCH 094/205] Python: use updated API --- python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index bd484e9aada..c15861ff1d0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -65,7 +65,7 @@ private module LibraryCallbackSummaries { final override ArgumentNode getACallback() { none() } - override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { + override predicate propagatesFlow(string input, string output, boolean preservesValue) { exists(int i | i in [0 .. 10] and input = "Argument[" + i + "]" and From e36b079e0fafd186fa0a60ad438b2688332107a4 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 21:27:22 +0100 Subject: [PATCH 095/205] Python: fix compilation error introduced by bad merge --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 ba102a13130..6d0b69c5c2d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1053,9 +1053,10 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves * by default as a heuristic. */ predicate allowParameterReturnInSelf(ParameterNode p) { -exists(DataFlowCallable c, ParameterPosition pos | - p.(ParameterNodeImpl).isParameterOf(c, pos) and - FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos) + exists(DataFlowCallable c, ParameterPosition pos | + p.(ParameterNodeImpl).isParameterOf(c, pos) and + FlowSummaryImpl::Private::summaryAllowParameterReturnInSelf(c.asLibraryCallable(), pos) + ) or exists(Function f | VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(f) and From 84c86f256abf2ae388e7f0e20cd1a895bcdc912c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 15 Dec 2023 22:37:55 +0000 Subject: [PATCH 096/205] Add buildless tests --- .../buildless_test_utils.py | 37 +++ .../buildless-fetches.expected | 2 + .../pom.xml | 28 ++ .../1.0/otherreleasetest-1.0.jar | Bin 0 -> 788 bytes .../1.0/otherreleasetest-1.0.jar.md5 | 1 + .../1.0/otherreleasetest-1.0.jar.sha1 | 1 + .../1.0/otherreleasetest-1.0.pom | 24 ++ .../1.0/otherreleasetest-1.0.pom.md5 | 1 + .../1.0/otherreleasetest-1.0.pom.sha1 | 1 + .../test/inotherrepo/1.0/inotherrepo-1.0.jar | Bin 0 -> 742 bytes .../inotherrepo/1.0/inotherrepo-1.0.jar.md5 | 1 + .../inotherrepo/1.0/inotherrepo-1.0.jar.sha1 | 1 + .../test/inotherrepo/1.0/inotherrepo-1.0.pom | 8 + .../inotherrepo/1.0/inotherrepo-1.0.pom.md5 | 1 + .../inotherrepo/1.0/inotherrepo-1.0.pom.sha1 | 1 + .../src/main/java/Test.java | 8 + .../test.expected | 3 + .../test.py | 19 ++ .../test.ql | 8 + .../java/buildless-gradle/.gitattributes | 9 + .../java/buildless-gradle/.gitignore | 5 + .../java/buildless-gradle/build.gradle | 16 ++ .../buildless-fetches.expected | 1 + .../buildless-gradle/diagnostics.expected | 56 ++++ .../force_sequential_test_execution | 3 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../java/buildless-gradle/gradlew | 249 ++++++++++++++++++ .../java/buildless-gradle/gradlew.bat | 92 +++++++ .../java/buildless-gradle/settings.gradle | 8 + .../main/java/com/fractestexample/Test.java | 9 + .../java/buildless-gradle/test.expected | 1 + .../java/buildless-gradle/test.py | 8 + .../java/buildless-gradle/test.ql | 5 + .../buildless-maven/buildless-fetches.actual | 26 ++ .../buildless-fetches.expected | 26 ++ .../java/buildless-maven/test.actual | 10 + .../java/buildless-maven/test.py | 4 +- .../buildless-fetches.expected | 1 + .../buildless-snapshot-repository/test.py | 2 + 40 files changed, 681 insertions(+), 2 deletions(-) create mode 100644 java/integration-tests-lib/buildless_test_utils.py create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.md5 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar.sha1 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties create mode 100755 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.actual create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-maven/test.actual create mode 100644 java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected diff --git a/java/integration-tests-lib/buildless_test_utils.py b/java/integration-tests-lib/buildless_test_utils.py new file mode 100644 index 00000000000..27f43060dae --- /dev/null +++ b/java/integration-tests-lib/buildless_test_utils.py @@ -0,0 +1,37 @@ +import sys +import os.path +import glob + +def extract_fetched_jar_path(l): + if not l.startswith("["): + # Line continuation + return None + bits = l.split(" ", 3) # date time processid logline + if len(bits) >= 4 and bits[3].startswith("Fetch "): + return bits[3][6:].strip() + else: + return None + +def read_fetched_jars(fname): + with open(fname, "r") as f: + lines = [l for l in f] + return [l for l in map(extract_fetched_jar_path, lines) if l is not None] + +def check_buildless_fetches(): + + extractor_logs = glob.glob(os.path.join("test-db", "log", "javac-extractor-*.log")) + fetched_jars = map(read_fetched_jars, extractor_logs) + all_fetched_jars = tuple(sorted([item for sublist in fetched_jars for item in sublist])) + + try: + with open("buildless-fetches.expected", "r") as f: + expected_jar_fetches = tuple(l.strip() for l in f) + except FileNotFoundError: + expected_jar_fetches = tuple() + + if all_fetched_jars != expected_jar_fetches: + print("Expected jar fetch mismatch. Expected:\n%s\n\nActual:\n%s" % ("\n".join(expected_jar_fetches), "\n".join(all_fetched_jars)), file = sys.stderr) + with open("buildless-fetches.actual", "w") as f: + for j in all_fetched_jars: + f.write(j + "\n") + sys.exit(1) diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected new file mode 100644 index 00000000000..88e79336758 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/buildless-fetches.expected @@ -0,0 +1,2 @@ +http://localhost:9428/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar +http://localhost:9429/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml new file mode 100644 index 00000000000..cb0bfee0932 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + + com.mycompany.app + my-app + 1.0-SNAPSHOT + + + 8 + 8 + + + + + first-test-repo + http://localhost:9428/releases + + + + + + com.github.my.other.repo.test + otherreleasetest + 1.0 + + + diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc3e449d8f9ab02fe5d80496f6e96dff1f062b32 GIT binary patch literal 788 zcmWIWW@Zs#;Nak35Z~M%&VU3s8CV#6T|*poJ^kGD|D9rBU}gyLX6FE@V1gF>a@7LFjYT(bmaY}r8_7EF_ad{y9%`M>9VBKe zSuc5F?|y>!I=AbJzC#gv-`dq|t({(XL|RbetWp1m8}EAF#m?tEm$LWvxvSY3U!H1z zPDxtCI{97*TgoTnX%$%o>hFHOWBhWIe_zU$f73J;G-YY!E@S&9m{jJFSig9iWcGA^ zxjIHrOqw4*`0_5$`zDN_U}R(xVL(j?uvi8q1XKWzSx~Y-*NPlFpk#mmwm>FaD^j8W znZU(>I~EZp8~`#Aaf)y + 4.0.0 + + com.github.my.other.repo.test + otherreleasetest + 1.0 + + + + second-test-repo + http://localhost:9429/releases + + + + + + com.github.hosted.in.other.repo.test + inotherrepo + 1.0 + + + + diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 new file mode 100644 index 00000000000..0e71f237dbb --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.md5 @@ -0,0 +1 @@ +fb11c1bdba89ffd4a2bedc9c79fe7d66 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 new file mode 100644 index 00000000000..3f1f5b5e12b --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo/releases/com/github/my/other/repo/test/otherreleasetest/1.0/otherreleasetest-1.0.pom.sha1 @@ -0,0 +1 @@ +787d45cbeba15d9e29cdd446234497df84138458 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..fb7f0c918b9b0a35640ec51da19d61a9a781b2d3 GIT binary patch literal 742 zcmWIWW@Zs#;Nak35Z>G$&VU3s8CV#6T|*poJ^kGD|D9rBU}gyLX6FE@V1g~tf2giFztNdOIjD|1OLaL!3AE;iCj22s{u^RL^nv9U$7#p$uBv89!< ziOI2rv6;ECHLf|b$>r~yBYR3}|1Vi{<%y6Ro7wC$d(H@1yRoJ5o;4_A<8xzMIO)ox zNlkA`lxwG7VR}C2$fG1>H#V{7f2M@EvDM8#vnOQ#r8`TmEShj+iOd3y@PfL`z@k;r zY8{8!uPF%f@7M(N!}$h zB`Uz7@+|D5&q|~M+(A(13)G`?2#=7MG~@qK#_z1&w)(1Hnb=U@MdKLsbm4dUqJdABZvn8ooKh5 literal 0 HcmV?d00001 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 new file mode 100644 index 00000000000..4ffbf99b90d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.md5 @@ -0,0 +1 @@ +db083868a74964a247f8fbe409a19b63 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 new file mode 100644 index 00000000000..c09c3da306f --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.jar.sha1 @@ -0,0 +1 @@ +8dea20ff7b3d0525b70f15eb9f0e2bd3056c2070 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom new file mode 100644 index 00000000000..d9a19d3ba3d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom @@ -0,0 +1,8 @@ + + 4.0.0 + + com.github.hosted.in.other.repo.test + inotherrepo + 1.0 + diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 new file mode 100644 index 00000000000..48acf115ba5 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.md5 @@ -0,0 +1 @@ +2c2065d57ce8aad45b7fa06e5faa2d8b diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 new file mode 100644 index 00000000000..8c542ff1c0e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/repo2/releases/com/github/hosted/in/other/repo/test/inotherrepo/1.0/inotherrepo-1.0.pom.sha1 @@ -0,0 +1 @@ +12d7de7581af2253d33a2b930e3715c797552700 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java new file mode 100644 index 00000000000..035c344e3d5 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/src/main/java/Test.java @@ -0,0 +1,8 @@ +import testpkg.DepClass; +import testpkg2.DepClass2; + +public class Test { + + DepClass2 dc2 = DepClass.getDep2(); + +} diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected new file mode 100644 index 00000000000..5179970f7c4 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.expected @@ -0,0 +1,3 @@ +diagnostics +#select +| DepClass | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py new file mode 100644 index 00000000000..1e75d97113e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.py @@ -0,0 +1,19 @@ +import sys + +from create_database_utils import * +from buildless_test_utils import * +import subprocess + +repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9428"], cwd = "repo") +repo_server_process2 = subprocess.Popen(["python3", "-m", "http.server", "9429"], cwd = "repo2") + +try: + run_codeql_database_create([], lang="java", extra_args=["--extractor-option=buildless=true"], extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) +finally: + try: + repo_server_process.kill() + except Exception as e: + print("Failed to kill server 1:", e, file = sys.stderr) + repo_server_process2.kill() + +check_buildless_fetches() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql new file mode 100644 index 00000000000..66153bcc083 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-dependency-different-repository/test.ql @@ -0,0 +1,8 @@ +import java +import semmle.code.java.Diagnostics + +query predicate diagnostics(Diagnostic d) { any() } + +from Class c +where c.getName() = "DepClass" +select c.toString() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes new file mode 100644 index 00000000000..097f9f98d9e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore new file mode 100644 index 00000000000..1b6985c0094 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle b/java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle new file mode 100644 index 00000000000..98833538000 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/build.gradle @@ -0,0 +1,16 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This is a general purpose Gradle build. + * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.3/samples + */ + +apply plugin: 'java-library' + +repositories { + mavenCentral() +} + +dependencies { + api 'org.apache.commons:commons-math3:3.6.1' +} diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected new file mode 100644 index 00000000000..631cb23bade --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/buildless-fetches.expected @@ -0,0 +1 @@ +https://repo.maven.apache.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected new file mode 100644 index 00000000000..21075ca021d --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected @@ -0,0 +1,56 @@ +{ + "markdownMessage": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/using-build-tool-advice", + "name": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java buildless mode used the system default JDK.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/jdk-system-default", + "name": "Java buildless mode used the system default JDK" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/mode-active", + "name": "Java was extracted in buildless mode" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Reading the dependency graph from Gradle build files provided 1 classpath entries", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/depgraph-provided-by-gradle", + "name": "Java buildless mode extracted precise dependency graph information from Gradle" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution new file mode 100644 index 00000000000..b0e2500b259 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/force_sequential_test_execution @@ -0,0 +1,3 @@ +# We currently have a bug where gradle tests become flaky when executed in parallel +# - sometimes, gradle fails to connect to the gradle daemon. +# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f93135c49b765f8051ef9d0a6055ff8e46073d8 GIT binary patch literal 63721 zcmb5Wb9gP!wgnp7wrv|bwr$&XvSZt}Z6`anZSUAlc9NHKf9JdJ;NJVr`=eI(_pMp0 zy1VAAG3FfAOI`{X1O)&90s;U4K;XLp008~hCjbEC_fbYfS%6kTR+JtXK>nW$ZR+`W ze|#J8f4A@M|F5BpfUJb5h>|j$jOe}0oE!`Zf6fM>CR?!y@zU(cL8NsKk`a z6tx5mAkdjD;J=LcJ;;Aw8p!v#ouk>mUDZF@ zK>yvw%+bKu+T{Nk@LZ;zkYy0HBKw06_IWcMHo*0HKpTsEFZhn5qCHH9j z)|XpN&{`!0a>Vl+PmdQc)Yg4A(AG-z!+@Q#eHr&g<9D?7E)_aEB?s_rx>UE9TUq|? z;(ggJt>9l?C|zoO@5)tu?EV0x_7T17q4fF-q3{yZ^ipUbKcRZ4Qftd!xO(#UGhb2y>?*@{xq%`(-`2T^vc=#< zx!+@4pRdk&*1ht2OWk^Z5IAQ0YTAXLkL{(D*$gENaD)7A%^XXrCchN&z2x+*>o2FwPFjWpeaL=!tzv#JOW#( z$B)Nel<+$bkH1KZv3&-}=SiG~w2sbDbAWarg%5>YbC|}*d9hBjBkR(@tyM0T)FO$# zPtRXukGPnOd)~z=?avu+4Co@wF}1T)-uh5jI<1$HLtyDrVak{gw`mcH@Q-@wg{v^c zRzu}hMKFHV<8w}o*yg6p@Sq%=gkd~;`_VGTS?L@yVu`xuGy+dH6YOwcP6ZE`_0rK% zAx5!FjDuss`FQ3eF|mhrWkjux(Pny^k$u_)dyCSEbAsecHsq#8B3n3kDU(zW5yE|( zgc>sFQywFj5}U*qtF9Y(bi*;>B7WJykcAXF86@)z|0-Vm@jt!EPoLA6>r)?@DIobIZ5Sx zsc@OC{b|3%vaMbyeM|O^UxEYlEMHK4r)V-{r)_yz`w1*xV0|lh-LQOP`OP`Pk1aW( z8DSlGN>Ts|n*xj+%If~+E_BxK)~5T#w6Q1WEKt{!Xtbd`J;`2a>8boRo;7u2M&iOop4qcy<)z023=oghSFV zST;?S;ye+dRQe>ygiJ6HCv4;~3DHtJ({fWeE~$H@mKn@Oh6Z(_sO>01JwH5oA4nvK zr5Sr^g+LC zLt(i&ecdmqsIJGNOSUyUpglvhhrY8lGkzO=0USEKNL%8zHshS>Qziu|`eyWP^5xL4 zRP122_dCJl>hZc~?58w~>`P_s18VoU|7(|Eit0-lZRgLTZKNq5{k zE?V=`7=R&ro(X%LTS*f+#H-mGo_j3dm@F_krAYegDLk6UV{`UKE;{YSsn$ z(yz{v1@p|p!0>g04!eRSrSVb>MQYPr8_MA|MpoGzqyd*$@4j|)cD_%^Hrd>SorF>@ zBX+V<@vEB5PRLGR(uP9&U&5=(HVc?6B58NJT_igiAH*q~Wb`dDZpJSKfy5#Aag4IX zj~uv74EQ_Q_1qaXWI!7Vf@ZrdUhZFE;L&P_Xr8l@GMkhc#=plV0+g(ki>+7fO%?Jb zl+bTy7q{w^pTb{>(Xf2q1BVdq?#f=!geqssXp z4pMu*q;iiHmA*IjOj4`4S&|8@gSw*^{|PT}Aw~}ZXU`6=vZB=GGeMm}V6W46|pU&58~P+?LUs%n@J}CSrICkeng6YJ^M? zS(W?K4nOtoBe4tvBXs@@`i?4G$S2W&;$z8VBSM;Mn9 zxcaEiQ9=vS|bIJ>*tf9AH~m&U%2+Dim<)E=}KORp+cZ^!@wI`h1NVBXu{@%hB2Cq(dXx_aQ9x3mr*fwL5!ZryQqi|KFJuzvP zK1)nrKZ7U+B{1ZmJub?4)Ln^J6k!i0t~VO#=q1{?T)%OV?MN}k5M{}vjyZu#M0_*u z8jwZKJ#Df~1jcLXZL7bnCEhB6IzQZ-GcoQJ!16I*39iazoVGugcKA{lhiHg4Ta2fD zk1Utyc5%QzZ$s3;p0N+N8VX{sd!~l*Ta3|t>lhI&G`sr6L~G5Lul`>m z{!^INm?J|&7X=;{XveF!(b*=?9NAp4y&r&N3(GKcW4rS(Ejk|Lzs1PrxPI_owB-`H zg3(Rruh^&)`TKA6+_!n>RdI6pw>Vt1_j&+bKIaMTYLiqhZ#y_=J8`TK{Jd<7l9&sY z^^`hmi7^14s16B6)1O;vJWOF$=$B5ONW;;2&|pUvJlmeUS&F;DbSHCrEb0QBDR|my zIs+pE0Y^`qJTyH-_mP=)Y+u^LHcuZhsM3+P||?+W#V!_6E-8boP#R-*na4!o-Q1 zVthtYhK{mDhF(&7Okzo9dTi03X(AE{8cH$JIg%MEQca`S zy@8{Fjft~~BdzWC(di#X{ny;!yYGK9b@=b|zcKZ{vv4D8i+`ilOPl;PJl{!&5-0!w z^fOl#|}vVg%=n)@_e1BrP)`A zKPgs`O0EO}Y2KWLuo`iGaKu1k#YR6BMySxQf2V++Wo{6EHmK>A~Q5o73yM z-RbxC7Qdh0Cz!nG+7BRZE>~FLI-?&W_rJUl-8FDIaXoNBL)@1hwKa^wOr1($*5h~T zF;%f^%<$p8Y_yu(JEg=c_O!aZ#)Gjh$n(hfJAp$C2he555W5zdrBqjFmo|VY+el;o z=*D_w|GXG|p0**hQ7~9-n|y5k%B}TAF0iarDM!q-jYbR^us(>&y;n^2l0C%@2B}KM zyeRT9)oMt97Agvc4sEKUEy%MpXr2vz*lb zh*L}}iG>-pqDRw7ud{=FvTD?}xjD)w{`KzjNom-$jS^;iw0+7nXSnt1R@G|VqoRhE%12nm+PH?9`(4rM0kfrZzIK9JU=^$YNyLvAIoxl#Q)xxDz!^0@zZ zSCs$nfcxK_vRYM34O<1}QHZ|hp4`ioX3x8(UV(FU$J@o%tw3t4k1QPmlEpZa2IujG&(roX_q*%e`Hq|);0;@k z0z=fZiFckp#JzW0p+2A+D$PC~IsakhJJkG(c;CqAgFfU0Z`u$PzG~-9I1oPHrCw&)@s^Dc~^)#HPW0Ra}J^=|h7Fs*<8|b13ZzG6MP*Q1dkoZ6&A^!}|hbjM{2HpqlSXv_UUg1U4gn z3Q)2VjU^ti1myodv+tjhSZp%D978m~p& z43uZUrraHs80Mq&vcetqfQpQP?m!CFj)44t8Z}k`E798wxg&~aCm+DBoI+nKq}&j^ zlPY3W$)K;KtEajks1`G?-@me7C>{PiiBu+41#yU_c(dITaqE?IQ(DBu+c^Ux!>pCj zLC|HJGU*v+!it1(;3e`6igkH(VA)-S+k(*yqxMgUah3$@C zz`7hEM47xr>j8^g`%*f=6S5n>z%Bt_Fg{Tvmr+MIsCx=0gsu_sF`q2hlkEmisz#Fy zj_0;zUWr;Gz}$BS%Y`meb(=$d%@Crs(OoJ|}m#<7=-A~PQbyN$x%2iXP2@e*nO0b7AwfH8cCUa*Wfu@b)D_>I*%uE4O3 z(lfnB`-Xf*LfC)E}e?%X2kK7DItK6Tf<+M^mX0Ijf_!IP>7c8IZX%8_#0060P{QMuV^B9i<^E`_Qf0pv9(P%_s8D`qvDE9LK9u-jB}J2S`(mCO&XHTS04Z5Ez*vl^T%!^$~EH8M-UdwhegL>3IQ*)(MtuH2Xt1p!fS4o~*rR?WLxlA!sjc2(O znjJn~wQ!Fp9s2e^IWP1C<4%sFF}T4omr}7+4asciyo3DntTgWIzhQpQirM$9{EbQd z3jz9vS@{aOqTQHI|l#aUV@2Q^Wko4T0T04Me4!2nsdrA8QY1%fnAYb~d2GDz@lAtfcHq(P7 zaMBAGo}+NcE-K*@9y;Vt3*(aCaMKXBB*BJcD_Qnxpt75r?GeAQ}*|>pYJE=uZb73 zC>sv)18)q#EGrTG6io*}JLuB_jP3AU1Uiu$D7r|2_zlIGb9 zjhst#ni)Y`$)!fc#reM*$~iaYoz~_Cy7J3ZTiPm)E?%`fbk`3Tu-F#`{i!l5pNEn5 zO-Tw-=TojYhzT{J=?SZj=Z8#|eoF>434b-DXiUsignxXNaR3 zm_}4iWU$gt2Mw5NvZ5(VpF`?X*f2UZDs1TEa1oZCif?Jdgr{>O~7}-$|BZ7I(IKW`{f;@|IZFX*R8&iT= zoWstN8&R;}@2Ka%d3vrLtR|O??ben;k8QbS-WB0VgiCz;<$pBmIZdN!aalyCSEm)crpS9dcD^Y@XT1a3+zpi-`D}e#HV<} z$Y(G&o~PvL-xSVD5D?JqF3?B9rxGWeb=oEGJ3vRp5xfBPlngh1O$yI95EL+T8{GC@ z98i1H9KhZGFl|;`)_=QpM6H?eDPpw~^(aFQWwyXZ8_EEE4#@QeT_URray*mEOGsGc z6|sdXtq!hVZo=d#+9^@lm&L5|q&-GDCyUx#YQiccq;spOBe3V+VKdjJA=IL=Zn%P} zNk=_8u}VhzFf{UYZV0`lUwcD&)9AFx0@Fc6LD9A6Rd1=ga>Mi0)_QxM2ddCVRmZ0d z+J=uXc(?5JLX3=)e)Jm$HS2yF`44IKhwRnm2*669_J=2LlwuF5$1tAo@ROSU@-y+;Foy2IEl2^V1N;fk~YR z?&EP8#t&m0B=?aJeuz~lHjAzRBX>&x=A;gIvb>MD{XEV zV%l-+9N-)i;YH%nKP?>f`=?#`>B(`*t`aiPLoQM(a6(qs4p5KFjDBN?8JGrf3z8>= zi7sD)c)Nm~x{e<^jy4nTx${P~cwz_*a>%0_;ULou3kHCAD7EYkw@l$8TN#LO9jC( z1BeFW`k+bu5e8Ns^a8dPcjEVHM;r6UX+cN=Uy7HU)j-myRU0wHd$A1fNI~`4;I~`zC)3ul#8#^rXVSO*m}Ag>c%_;nj=Nv$rCZ z*~L@C@OZg%Q^m)lc-kcX&a*a5`y&DaRxh6O*dfhLfF+fU5wKs(1v*!TkZidw*)YBP za@r`3+^IHRFeO%!ai%rxy;R;;V^Fr=OJlpBX;(b*3+SIw}7= zIq$*Thr(Zft-RlY)D3e8V;BmD&HOfX+E$H#Y@B3?UL5L~_fA-@*IB-!gItK7PIgG9 zgWuGZK_nuZjHVT_Fv(XxtU%)58;W39vzTI2n&)&4Dmq7&JX6G>XFaAR{7_3QB6zsT z?$L8c*WdN~nZGiscY%5KljQARN;`w$gho=p006z;n(qIQ*Zu<``TMO3n0{ARL@gYh zoRwS*|Niw~cR!?hE{m*y@F`1)vx-JRfqET=dJ5_(076st(=lFfjtKHoYg`k3oNmo_ zNbQEw8&sO5jAYmkD|Zaz_yUb0rC})U!rCHOl}JhbYIDLzLvrZVw0~JO`d*6f;X&?V=#T@ND*cv^I;`sFeq4 z##H5;gpZTb^0Hz@3C*~u0AqqNZ-r%rN3KD~%Gw`0XsIq$(^MEb<~H(2*5G^<2(*aI z%7}WB+TRlMIrEK#s0 z93xn*Ohb=kWFc)BNHG4I(~RPn-R8#0lqyBBz5OM6o5|>x9LK@%HaM}}Y5goCQRt2C z{j*2TtT4ne!Z}vh89mjwiSXG=%DURar~=kGNNaO_+Nkb+tRi~Rkf!7a$*QlavziD( z83s4GmQ^Wf*0Bd04f#0HX@ua_d8 z23~z*53ePD6@xwZ(vdl0DLc=>cPIOPOdca&MyR^jhhKrdQO?_jJh`xV3GKz&2lvP8 zEOwW6L*ufvK;TN{=S&R@pzV^U=QNk^Ec}5H z+2~JvEVA{`uMAr)?Kf|aW>33`)UL@bnfIUQc~L;TsTQ6>r-<^rB8uoNOJ>HWgqMI8 zSW}pZmp_;z_2O5_RD|fGyTxaxk53Hg_3Khc<8AUzV|ZeK{fp|Ne933=1&_^Dbv5^u zB9n=*)k*tjHDRJ@$bp9mrh}qFn*s}npMl5BMDC%Hs0M0g-hW~P*3CNG06G!MOPEQ_ zi}Qs-6M8aMt;sL$vlmVBR^+Ry<64jrm1EI1%#j?c?4b*7>)a{aDw#TfTYKq+SjEFA z(aJ&z_0?0JB83D-i3Vh+o|XV4UP+YJ$9Boid2^M2en@APw&wx7vU~t$r2V`F|7Qfo z>WKgI@eNBZ-+Og<{u2ZiG%>YvH2L3fNpV9J;WLJoBZda)01Rn;o@){01{7E#ke(7U zHK>S#qZ(N=aoae*4X!0A{)nu0R_sKpi1{)u>GVjC+b5Jyl6#AoQ-1_3UDovNSo`T> z?c-@7XX*2GMy?k?{g)7?Sv;SJkmxYPJPs!&QqB12ejq`Lee^-cDveVWL^CTUldb(G zjDGe(O4P=S{4fF=#~oAu>LG>wrU^z_?3yt24FOx>}{^lCGh8?vtvY$^hbZ)9I0E3r3NOlb9I?F-Yc=r$*~l`4N^xzlV~N zl~#oc>U)Yjl0BxV>O*Kr@lKT{Z09OXt2GlvE38nfs+DD7exl|&vT;)>VFXJVZp9Np zDK}aO;R3~ag$X*|hRVY3OPax|PG`@_ESc8E!mHRByJbZQRS38V2F__7MW~sgh!a>98Q2%lUNFO=^xU52|?D=IK#QjwBky-C>zOWlsiiM&1n z;!&1((Xn1$9K}xabq~222gYvx3hnZPg}VMF_GV~5ocE=-v>V=T&RsLBo&`)DOyIj* zLV{h)JU_y*7SdRtDajP_Y+rBkNN*1_TXiKwHH2&p51d(#zv~s#HwbNy?<+(=9WBvo zw2hkk2Dj%kTFhY+$T+W-b7@qD!bkfN#Z2ng@Pd=i3-i?xYfs5Z*1hO?kd7Sp^9`;Y zM2jeGg<-nJD1er@Pc_cSY7wo5dzQX44=%6rn}P_SRbpzsA{6B+!$3B0#;}qwO37G^ zL(V_5JK`XT?OHVk|{_$vQ|oNEpab*BO4F zUTNQ7RUhnRsU`TK#~`)$icsvKh~(pl=3p6m98@k3P#~upd=k*u20SNcb{l^1rUa)>qO997)pYRWMncC8A&&MHlbW?7i^7M`+B$hH~Y|J zd>FYOGQ;j>Zc2e7R{KK7)0>>nn_jYJy&o@sK!4G>-rLKM8Hv)f;hi1D2fAc$+six2 zyVZ@wZ6x|fJ!4KrpCJY=!Mq0;)X)OoS~{Lkh6u8J`eK%u0WtKh6B>GW_)PVc zl}-k`p09qwGtZ@VbYJC!>29V?Dr>>vk?)o(x?!z*9DJ||9qG-&G~#kXxbw{KKYy}J zQKa-dPt~M~E}V?PhW0R26xdA%1T*%ra6SguGu50YHngOTIv)@N|YttEXo#OZfgtP7;H?EeZZxo<}3YlYxtBq znJ!WFR^tmGf0Py}N?kZ(#=VtpC@%xJkDmfcCoBTxq zr_|5gP?u1@vJZbxPZ|G0AW4=tpb84gM2DpJU||(b8kMOV1S3|(yuwZJ&rIiFW(U;5 zUtAW`O6F6Zy+eZ1EDuP~AAHlSY-+A_eI5Gx)%*uro5tljy}kCZU*_d7)oJ>oQSZ3* zneTn`{gnNC&uJd)0aMBzAg021?YJ~b(fmkwZAd696a=0NzBAqBN54KuNDwa*no(^O z6p05bioXUR^uXjpTol*ppHp%1v9e)vkoUAUJyBx3lw0UO39b0?^{}yb!$yca(@DUn zCquRF?t=Zb9`Ed3AI6|L{eX~ijVH`VzSMheKoP7LSSf4g>md>`yi!TkoG5P>Ofp+n z(v~rW+(5L96L{vBb^g51B=(o)?%%xhvT*A5btOpw(TKh^g^4c zw>0%X!_0`{iN%RbVk+A^f{w-4-SSf*fu@FhruNL##F~sF24O~u zyYF<3el2b$$wZ_|uW#@Ak+VAGk#e|kS8nL1g>2B-SNMjMp^8;-FfeofY2fphFHO!{ z*!o4oTb{4e;S<|JEs<1_hPsmAlVNk?_5-Fp5KKU&d#FiNW~Y+pVFk@Cua1I{T+1|+ zHx6rFMor)7L)krbilqsWwy@T+g3DiH5MyVf8Wy}XbEaoFIDr~y;@r&I>FMW{ z?Q+(IgyebZ)-i4jNoXQhq4Muy9Fv+OxU;9_Jmn+<`mEC#%2Q_2bpcgzcinygNI!&^ z=V$)o2&Yz04~+&pPWWn`rrWxJ&}8khR)6B(--!9Q zubo}h+1T)>a@c)H^i``@<^j?|r4*{;tQf78(xn0g39IoZw0(CwY1f<%F>kEaJ zp9u|IeMY5mRdAlw*+gSN^5$Q)ShM<~E=(c8QM+T-Qk)FyKz#Sw0EJ*edYcuOtO#~Cx^(M7w5 z3)rl#L)rF|(Vun2LkFr!rg8Q@=r>9p>(t3Gf_auiJ2Xx9HmxYTa|=MH_SUlYL`mz9 zTTS$`%;D-|Jt}AP1&k7PcnfFNTH0A-*FmxstjBDiZX?}%u%Yq94$fUT&z6od+(Uk> zuqsld#G(b$G8tus=M!N#oPd|PVFX)?M?tCD0tS%2IGTfh}3YA3f&UM)W$_GNV8 zQo+a(ml2Km4o6O%gKTCSDNq+#zCTIQ1*`TIJh~k6Gp;htHBFnne))rlFdGqwC6dx2+La1&Mnko*352k0y z+tQcwndQlX`nc6nb$A9?<-o|r*%aWXV#=6PQic0Ok_D;q>wbv&j7cKc!w4~KF#-{6 z(S%6Za)WpGIWf7jZ3svNG5OLs0>vCL9{V7cgO%zevIVMH{WgP*^D9ws&OqA{yr|m| zKD4*07dGXshJHd#e%x%J+qmS^lS|0Bp?{drv;{@{l9ArPO&?Q5=?OO9=}h$oVe#3b z3Yofj&Cb}WC$PxmRRS)H%&$1-)z7jELS}!u!zQ?A^Y{Tv4QVt*vd@uj-^t2fYRzQj zfxGR>-q|o$3sGn^#VzZ!QQx?h9`njeJry}@x?|k0-GTTA4y3t2E`3DZ!A~D?GiJup z)8%PK2^9OVRlP(24P^4_<|D=H^7}WlWu#LgsdHzB%cPy|f8dD3|A^mh4WXxhLTVu_ z@abE{6Saz|Y{rXYPd4$tfPYo}ef(oQWZ=4Bct-=_9`#Qgp4ma$n$`tOwq#&E18$B; z@Bp)bn3&rEi0>fWWZ@7k5WazfoX`SCO4jQWwVuo+$PmSZn^Hz?O(-tW@*DGxuf)V1 zO_xm&;NVCaHD4dqt(-MlszI3F-p?0!-e$fbiCeuaw66h^TTDLWuaV<@C-`=Xe5WL) zwooG7h>4&*)p3pKMS3O!4>-4jQUN}iAMQ)2*70?hP~)TzzR?-f@?Aqy$$1Iy8VGG$ zMM?8;j!pUX7QQD$gRc_#+=raAS577ga-w?jd`vCiN5lu)dEUkkUPl9!?{$IJNxQys z*E4e$eF&n&+AMRQR2gcaFEjAy*r)G!s(P6D&TfoApMFC_*Ftx0|D0@E-=B7tezU@d zZ{hGiN;YLIoSeRS;9o%dEua4b%4R3;$SugDjP$x;Z!M!@QibuSBb)HY!3zJ7M;^jw zlx6AD50FD&p3JyP*>o+t9YWW8(7P2t!VQQ21pHJOcG_SXQD;(5aX#M6x##5H_Re>6lPyDCjxr*R(+HE%c&QN+b^tbT zXBJk?p)zhJj#I?&Y2n&~XiytG9!1ox;bw5Rbj~)7c(MFBb4>IiRATdhg zmiEFlj@S_hwYYI(ki{}&<;_7(Z0Qkfq>am z&LtL=2qc7rWguk3BtE4zL41@#S;NN*-jWw|7Kx7H7~_%7fPt;TIX}Ubo>;Rmj94V> zNB1=;-9AR7s`Pxn}t_6^3ahlq53e&!Lh85uG zec0vJY_6e`tg7LgfrJ3k!DjR)Bi#L@DHIrZ`sK=<5O0Ip!fxGf*OgGSpP@Hbbe&$9 z;ZI}8lEoC2_7;%L2=w?tb%1oL0V+=Z`7b=P&lNGY;yVBazXRYu;+cQDKvm*7NCxu&i;zub zAJh#11%?w>E2rf2e~C4+rAb-&$^vsdACs7 z@|Ra!OfVM(ke{vyiqh7puf&Yp6cd6{DptUteYfIRWG3pI+5< zBVBI_xkBAc<(pcb$!Y%dTW(b;B;2pOI-(QCsLv@U-D1XJ z(Gk8Q3l7Ws46Aktuj>|s{$6zA&xCPuXL-kB`CgYMs}4IeyG*P51IDwW?8UNQd+$i~ zlxOPtSi5L|gJcF@DwmJA5Ju8HEJ>o{{upwIpb!f{2(vLNBw`7xMbvcw<^{Fj@E~1( z?w`iIMieunS#>nXlmUcSMU+D3rX28f?s7z;X=se6bo8;5vM|O^(D6{A9*ChnGH!RG zP##3>LDC3jZPE4PH32AxrqPk|yIIrq~`aL-=}`okhNu9aT%q z1b)7iJ)CN=V#Ly84N_r7U^SH2FGdE5FpTO2 z630TF$P>GNMu8`rOytb(lB2};`;P4YNwW1<5d3Q~AX#P0aX}R2b2)`rgkp#zTxcGj zAV^cvFbhP|JgWrq_e`~exr~sIR$6p5V?o4Wym3kQ3HA+;Pr$bQ0(PmADVO%MKL!^q z?zAM8j1l4jrq|5X+V!8S*2Wl@=7*pPgciTVK6kS1Ge zMsd_u6DFK$jTnvVtE;qa+8(1sGBu~n&F%dh(&c(Zs4Fc#A=gG^^%^AyH}1^?|8quj zl@Z47h$){PlELJgYZCIHHL= z{U8O>Tw4x3<1{?$8>k-P<}1y9DmAZP_;(3Y*{Sk^H^A=_iSJ@+s5ktgwTXz_2$~W9>VVZsfwCm@s0sQ zeB50_yu@uS+e7QoPvdCwDz{prjo(AFwR%C?z`EL{1`|coJHQTk^nX=tvs1<0arUOJ z!^`*x&&BvTYmemyZ)2p~{%eYX=JVR?DYr(rNgqRMA5E1PR1Iw=prk=L2ldy3r3Vg@27IZx43+ywyzr-X*p*d@tZV+!U#~$-q=8c zgdSuh#r?b4GhEGNai)ayHQpk>5(%j5c@C1K3(W1pb~HeHpaqijJZa-e6vq_8t-^M^ zBJxq|MqZc?pjXPIH}70a5vt!IUh;l}<>VX<-Qcv^u@5(@@M2CHSe_hD$VG-eiV^V( zj7*9T0?di?P$FaD6oo?)<)QT>Npf6Og!GO^GmPV(Km0!=+dE&bk#SNI+C9RGQ|{~O*VC+tXK3!n`5 zHfl6>lwf_aEVV3`0T!aHNZLsj$paS$=LL(?b!Czaa5bbSuZ6#$_@LK<(7yrrl+80| z{tOFd=|ta2Z`^ssozD9BINn45NxUeCQis?-BKmU*Kt=FY-NJ+)8S1ecuFtN-M?&42 zl2$G>u!iNhAk*HoJ^4v^9#ORYp5t^wDj6|lx~5w45#E5wVqI1JQ~9l?nPp1YINf++ zMAdSif~_ETv@Er(EFBI^@L4BULFW>)NI+ejHFP*T}UhWNN`I)RRS8za? z*@`1>9ZB}An%aT5K=_2iQmfE;GcBVHLF!$`I99o5GO`O%O_zLr9AG18>&^HkG(;=V z%}c!OBQ~?MX(9h~tajX{=x)+!cbM7$YzTlmsPOdp2L-?GoW`@{lY9U3f;OUo*BwRB z8A+nv(br0-SH#VxGy#ZrgnGD(=@;HME;yd46EgWJ`EL%oXc&lFpc@Y}^>G(W>h_v_ zlN!`idhX+OjL+~T?19sroAFVGfa5tX-D49w$1g2g_-T|EpHL6}K_aX4$K=LTvwtlF zL*z}j{f+Uoe7{-px3_5iKPA<_7W=>Izkk)!l9ez2w%vi(?Y;i8AxRNLSOGDzNoqoI zP!1uAl}r=_871(G?y`i&)-7{u=%nxk7CZ_Qh#!|ITec zwQn`33GTUM`;D2POWnkqngqJhJRlM>CTONzTG}>^Q0wUunQyn|TAiHzyX2_%ATx%P z%7gW)%4rA9^)M<_%k@`Y?RbC<29sWU&5;@|9thf2#zf8z12$hRcZ!CSb>kUp=4N#y zl3hE#y6>kkA8VY2`W`g5Ip?2qC_BY$>R`iGQLhz2-S>x(RuWv)SPaGdl^)gGw7tjR zH@;jwk!jIaCgSg_*9iF|a);sRUTq30(8I(obh^|}S~}P4U^BIGYqcz;MPpC~Y@k_m zaw4WG1_vz2GdCAX!$_a%GHK**@IrHSkGoN>)e}>yzUTm52on`hYot7cB=oA-h1u|R ztH$11t?54Qg2L+i33FPFKKRm1aOjKST{l1*(nps`>sv%VqeVMWjl5+Gh+9);hIP8? zA@$?}Sc z3qIRpba+y5yf{R6G(u8Z^vkg0Fu&D-7?1s=QZU`Ub{-!Y`I?AGf1VNuc^L3v>)>i# z{DV9W$)>34wnzAXUiV^ZpYKw>UElrN_5Xj6{r_3| z$X5PK`e5$7>~9Dj7gK5ash(dvs`vwfk}&RD`>04;j62zoXESkFBklYaKm5seyiX(P zqQ-;XxlV*yg?Dhlx%xt!b0N3GHp@(p$A;8|%# zZ5m2KL|{on4nr>2_s9Yh=r5ScQ0;aMF)G$-9-Ca6%wA`Pa)i?NGFA|#Yi?{X-4ZO_ z^}%7%vkzvUHa$-^Y#aA+aiR5sa%S|Ebyn`EV<3Pc?ax_f>@sBZF1S;7y$CXd5t5=WGsTKBk8$OfH4v|0?0I=Yp}7c=WBSCg!{0n)XmiU;lfx)**zZaYqmDJelxk$)nZyx5`x$6R|fz(;u zEje5Dtm|a%zK!!tk3{i9$I2b{vXNFy%Bf{50X!x{98+BsDr_u9i>G5%*sqEX|06J0 z^IY{UcEbj6LDwuMh7cH`H@9sVt1l1#8kEQ(LyT@&+K}(ReE`ux8gb0r6L_#bDUo^P z3Ka2lRo52Hdtl_%+pwVs14=q`{d^L58PsU@AMf(hENumaxM{7iAT5sYmWh@hQCO^ zK&}ijo=`VqZ#a3vE?`7QW0ZREL17ZvDfdqKGD?0D4fg{7v%|Yj&_jcKJAB)>=*RS* zto8p6@k%;&^ZF>hvXm&$PCuEp{uqw3VPG$9VMdW5$w-fy2CNNT>E;>ejBgy-m_6`& z97L1p{%srn@O_JQgFpa_#f(_)eb#YS>o>q3(*uB;uZb605(iqM$=NK{nHY=+X2*G) zO3-_Xh%aG}fHWe*==58zBwp%&`mge<8uq8;xIxOd=P%9EK!34^E9sk|(Zq1QSz-JVeP12Fp)-`F|KY$LPwUE?rku zY@OJ)Z9A!ojfzfeyJ9;zv2EM7ZQB)AR5xGa-tMn^bl)FmoIiVyJ@!~@%{}qXXD&Ns zPnfe5U+&ohKefILu_1mPfLGuapX@btta5C#gPB2cjk5m4T}Nfi+Vfka!Yd(L?-c~5 z#ZK4VeQEXNPc4r$K00Fg>g#_W!YZ)cJ?JTS<&68_$#cZT-ME`}tcwqg3#``3M3UPvn+pi}(VNNx6y zFIMVb6OwYU(2`at$gHba*qrMVUl8xk5z-z~fb@Q3Y_+aXuEKH}L+>eW__!IAd@V}L zkw#s%H0v2k5-=vh$^vPCuAi22Luu3uKTf6fPo?*nvj$9(u)4$6tvF-%IM+3pt*cgs z_?wW}J7VAA{_~!?))?s6{M=KPpVhg4fNuU*|3THp@_(q!b*hdl{fjRVFWtu^1dV(f z6iOux9hi&+UK=|%M*~|aqFK{Urfl!TA}UWY#`w(0P!KMe1Si{8|o))Gy6d7;!JQYhgMYmXl?3FfOM2nQGN@~Ap6(G z3+d_5y@=nkpKAhRqf{qQ~k7Z$v&l&@m7Ppt#FSNzKPZM z8LhihcE6i=<(#87E|Wr~HKvVWhkll4iSK$^mUHaxgy8*K$_Zj;zJ`L$naPj+^3zTi z-3NTaaKnD5FPY-~?Tq6QHnmDDRxu0mh0D|zD~Y=vv_qig5r-cIbCpxlju&8Sya)@{ zsmv6XUSi)@(?PvItkiZEeN*)AE~I_?#+Ja-r8$(XiXei2d@Hi7Rx8+rZZb?ZLa{;@*EHeRQ-YDadz~M*YCM4&F-r;E#M+@CSJMJ0oU|PQ^ z=E!HBJDMQ2TN*Y(Ag(ynAL8%^v;=~q?s4plA_hig&5Z0x_^Oab!T)@6kRN$)qEJ6E zNuQjg|G7iwU(N8pI@_6==0CL;lRh1dQF#wePhmu@hADFd3B5KIH#dx(2A zp~K&;Xw}F_N6CU~0)QpQk7s$a+LcTOj1%=WXI(U=Dv!6 z{#<#-)2+gCyyv=Jw?Ab#PVkxPDeH|sAxyG`|Ys}A$PW4TdBv%zDz z^?lwrxWR<%Vzc8Sgt|?FL6ej_*e&rhqJZ3Y>k=X(^dytycR;XDU16}Pc9Vn0>_@H+ zQ;a`GSMEG64=JRAOg%~L)x*w{2re6DVprNp+FcNra4VdNjiaF0M^*>CdPkt(m150rCue?FVdL0nFL$V%5y6N z%eLr5%YN7D06k5ji5*p4v$UMM)G??Q%RB27IvH7vYr_^3>1D-M66#MN8tWGw>WED} z5AhlsanO=STFYFs)Il_0i)l)f<8qn|$DW7ZXhf5xI;m+7M5-%P63XFQrG9>DMqHc} zsgNU9nR`b}E^mL5=@7<1_R~j@q_2U^3h|+`7YH-?C=vme1C3m`Fe0HC>pjt6f_XMh zy~-i-8R46QNYneL4t@)<0VU7({aUO?aH`z4V2+kxgH5pYD5)wCh75JqQY)jIPN=U6 z+qi8cGiOtXG2tXm;_CfpH9ESCz#i5B(42}rBJJF$jh<1sbpj^8&L;gzGHb8M{of+} zzF^8VgML2O9nxBW7AvdEt90vp+#kZxWf@A)o9f9}vKJy9NDBjBW zSt=Hcs=YWCwnfY1UYx*+msp{g!w0HC<_SM!VL1(I2PE?CS}r(eh?{I)mQixmo5^p# zV?2R!R@3GV6hwTCrfHiK#3Orj>I!GS2kYhk1S;aFBD_}u2v;0HYFq}Iz1Z(I4oca4 zxquja8$+8JW_EagDHf$a1OTk5S97umGSDaj)gH=fLs9>_=XvVj^Xj9a#gLdk=&3tl zfmK9MNnIX9v{?%xdw7568 zNrZ|roYs(vC4pHB5RJ8>)^*OuyNC>x7ad)tB_}3SgQ96+-JT^Qi<`xi=)_=$Skwv~ zdqeT9Pa`LYvCAn&rMa2aCDV(TMI#PA5g#RtV|CWpgDYRA^|55LLN^uNh*gOU>Z=a06qJ;$C9z8;n-Pq=qZnc1zUwJ@t)L;&NN+E5m zRkQ(SeM8=l-aoAKGKD>!@?mWTW&~)uF2PYUJ;tB^my`r9n|Ly~0c%diYzqs9W#FTjy?h&X3TnH zXqA{QI82sdjPO->f=^K^f>N`+B`q9&rN0bOXO79S&a9XX8zund(kW7O76f4dcWhIu zER`XSMSFbSL>b;Rp#`CuGJ&p$s~G|76){d?xSA5wVg##_O0DrmyEYppyBr%fyWbbv zp`K84JwRNP$d-pJ!Qk|(RMr?*!wi1if-9G#0p>>1QXKXWFy)eB3ai)l3601q8!9JC zvU#ZWWDNKq9g6fYs?JQ)Q4C_cgTy3FhgKb8s&m)DdmL5zhNK#8wWg!J*7G7Qhe9VU zha?^AQTDpYcuN!B+#1dE*X{<#!M%zfUQbj=zLE{dW0XeQ7-oIsGY6RbkP2re@Q{}r_$iiH0xU%iN*ST`A)-EH6eaZB$GA#v)cLi z*MpA(3bYk$oBDKAzu^kJoSUsDd|856DApz={3u8sbQV@JnRkp2nC|)m;#T=DvIL-O zI4vh;g7824l}*`_p@MT4+d`JZ2%6NQh=N9bmgJ#q!hK@_<`HQq3}Z8Ij>3%~<*= zcv=!oT#5xmeGI92lqm9sGVE%#X$ls;St|F#u!?5Y7syhx6q#MVRa&lBmmn%$C0QzU z);*ldgwwCmzM3uglr}!Z2G+?& zf%Dpo&mD%2ZcNFiN-Z0f;c_Q;A%f@>26f?{d1kxIJD}LxsQkB47SAdwinfMILZdN3 zfj^HmTzS3Ku5BxY>ANutS8WPQ-G>v4^_Qndy==P3pDm+Xc?>rUHl-4+^%Sp5atOja z2oP}ftw-rqnb}+khR3CrRg^ibi6?QYk1*i^;kQGirQ=uB9Sd1NTfT-Rbv;hqnY4neE5H1YUrjS2m+2&@uXiAo- zrKUX|Ohg7(6F(AoP~tj;NZlV#xsfo-5reuQHB$&EIAhyZk;bL;k9ouDmJNBAun;H& zn;Of1z_Qj`x&M;5X;{s~iGzBQTY^kv-k{ksbE*Dl%Qf%N@hQCfY~iUw!=F-*$cpf2 z3wix|aLBV0b;W@z^%7S{>9Z^T^fLOI68_;l@+Qzaxo`nAI8emTV@rRhEKZ z?*z_{oGdI~R*#<2{bkz$G~^Qef}$*4OYTgtL$e9q!FY7EqxJ2`zk6SQc}M(k(_MaV zSLJnTXw&@djco1~a(vhBl^&w=$fa9{Sru>7g8SHahv$&Bl(D@(Zwxo_3r=;VH|uc5 zi1Ny)J!<(KN-EcQ(xlw%PNwK8U>4$9nVOhj(y0l9X^vP1TA>r_7WtSExIOsz`nDOP zs}d>Vxb2Vo2e5x8p(n~Y5ggAyvib>d)6?)|E@{FIz?G3PVGLf7-;BxaP;c?7ddH$z zA+{~k^V=bZuXafOv!RPsE1GrR3J2TH9uB=Z67gok+u`V#}BR86hB1xl}H4v`F+mRfr zYhortD%@IGfh!JB(NUNSDh+qDz?4ztEgCz&bIG-Wg7w-ua4ChgQR_c+z8dT3<1?uX z*G(DKy_LTl*Ea!%v!RhpCXW1WJO6F`bgS-SB;Xw9#! z<*K}=#wVu9$`Yo|e!z-CPYH!nj7s9dEPr-E`DXUBu0n!xX~&|%#G=BeM?X@shQQMf zMvr2!y7p_gD5-!Lnm|a@z8Of^EKboZsTMk%5VsJEm>VsJ4W7Kv{<|#4f-qDE$D-W>gWT%z-!qXnDHhOvLk=?^a1*|0j z{pW{M0{#1VcR5;F!!fIlLVNh_Gj zbnW(_j?0c2q$EHIi@fSMR{OUKBcLr{Y&$hrM8XhPByyZaXy|dd&{hYQRJ9@Fn%h3p7*VQolBIV@Eq`=y%5BU~3RPa^$a?ixp^cCg z+}Q*X+CW9~TL29@OOng(#OAOd!)e$d%sr}^KBJ-?-X&|4HTmtemxmp?cT3uA?md4% zT8yZ0U;6Rg6JHy3fJae{6TMGS?ZUX6+gGTT{Q{)SI85$5FD{g-eR%O0KMpWPY`4@O zx!hen1*8^E(*}{m^V_?}(b5k3hYo=T+$&M32+B`}81~KKZhY;2H{7O-M@vbCzuX0n zW-&HXeyr1%I3$@ns-V1~Lb@wIpkmx|8I~ob1Of7i6BTNysEwI}=!nU%q7(V_^+d*G z7G;07m(CRTJup!`cdYi93r^+LY+`M*>aMuHJm(A8_O8C#A*$!Xvddgpjx5)?_EB*q zgE8o5O>e~9IiSC@WtZpF{4Bj2J5eZ>uUzY%TgWF7wdDE!fSQIAWCP)V{;HsU3ap?4 znRsiiDbtN7i9hapO;(|Ew>Ip2TZSvK9Z^N21%J?OiA_&eP1{(Pu_=%JjKy|HOardq ze?zK^K zA%sjF64*Wufad%H<) z^|t>e*h+Z1#l=5wHexzt9HNDNXgM=-OPWKd^5p!~%SIl>Fo&7BvNpbf8{NXmH)o{r zO=aBJ;meX1^{O%q;kqdw*5k!Y7%t_30 zy{nGRVc&5qt?dBwLs+^Sfp;f`YVMSB#C>z^a9@fpZ!xb|b-JEz1LBX7ci)V@W+kvQ89KWA0T~Lj$aCcfW#nD5bt&Y_< z-q{4ZXDqVg?|0o)j1%l0^_it0WF*LCn-+)c!2y5yS7aZIN$>0LqNnkujV*YVes(v$ zY@_-!Q;!ZyJ}Bg|G-~w@or&u0RO?vlt5*9~yeoPV_UWrO2J54b4#{D(D>jF(R88u2 zo#B^@iF_%S>{iXSol8jpmsZuJ?+;epg>k=$d`?GSegAVp3n$`GVDvK${N*#L_1`44 z{w0fL{2%)0|E+qgZtjX}itZz^KJt4Y;*8uSK}Ft38+3>j|K(PxIXXR-t4VopXo#9# zt|F{LWr-?34y`$nLBVV_*UEgA6AUI65dYIbqpNq9cl&uLJ0~L}<=ESlOm?Y-S@L*d z<7vt}`)TW#f%Rp$Q}6@3=j$7Tze@_uZO@aMn<|si{?S}~maII`VTjs&?}jQ4_cut9$)PEqMukwoXobzaKx^MV z2fQwl+;LSZ$qy%Tys0oo^K=jOw$!YwCv^ei4NBVauL)tN%=wz9M{uf{IB(BxK|lT*pFkmNK_1tV`nb%jH=a0~VNq2RCKY(rG7jz!-D^k)Ec)yS%17pE#o6&eY+ z^qN(hQT$}5F(=4lgNQhlxj?nB4N6ntUY6(?+R#B?W3hY_a*)hnr4PA|vJ<6p`K3Z5Hy z{{8(|ux~NLUW=!?9Qe&WXMTAkQnLXg(g=I@(VG3{HE13OaUT|DljyWXPs2FE@?`iU z4GQlM&Q=T<4&v@Fe<+TuXiZQT3G~vZ&^POfmI1K2h6t4eD}Gk5XFGpbj1n_g*{qmD6Xy z`6Vv|lLZtLmrnv*{Q%xxtcWVj3K4M%$bdBk_a&ar{{GWyu#ljM;dII;*jP;QH z#+^o-A4np{@|Mz+LphTD0`FTyxYq#wY)*&Ls5o{0z9yg2K+K7ZN>j1>N&;r+Z`vI| zDzG1LJZ+sE?m?>x{5LJx^)g&pGEpY=fQ-4}{x=ru;}FL$inHemOg%|R*ZXPodU}Kh zFEd5#+8rGq$Y<_?k-}r5zgQ3jRV=ooHiF|@z_#D4pKVEmn5CGV(9VKCyG|sT9nc=U zEoT67R`C->KY8Wp-fEcjjFm^;Cg(ls|*ABVHq8clBE(;~K^b+S>6uj70g? z&{XQ5U&!Z$SO7zfP+y^8XBbiu*Cv-yJG|l-oe*!s5$@Lh_KpxYL2sx`B|V=dETN>5K+C+CU~a_3cI8{vbu$TNVdGf15*>D zz@f{zIlorkY>TRh7mKuAlN9A0>N>SV`X)+bEHms=mfYTMWt_AJtz_h+JMmrgH?mZt zm=lfdF`t^J*XLg7v+iS)XZROygK=CS@CvUaJo&w2W!Wb@aa?~Drtf`JV^cCMjngVZ zv&xaIBEo8EYWuML+vxCpjjY^s1-ahXJzAV6hTw%ZIy!FjI}aJ+{rE&u#>rs)vzuxz z+$5z=7W?zH2>Eb32dvgHYZtCAf!=OLY-pb4>Ae79rd68E2LkVPj-|jFeyqtBCCwiW zkB@kO_(3wFq)7qwV}bA=zD!*@UhT`geq}ITo%@O(Z5Y80nEX~;0-8kO{oB6|(4fQh z);73T!>3@{ZobPwRv*W?7m0Ml9GmJBCJd&6E?hdj9lV= z4flNfsc(J*DyPv?RCOx!MSvk(M952PJ-G|JeVxWVjN~SNS6n-_Ge3Q;TGE;EQvZg86%wZ`MB zSMQua(i*R8a75!6$QRO^(o7sGoomb+Y{OMy;m~Oa`;P9Yqo>?bJAhqXxLr7_3g_n>f#UVtxG!^F#1+y@os6x(sg z^28bsQ@8rw%Gxk-stAEPRbv^}5sLe=VMbkc@Jjimqjvmd!3E7+QnL>|(^3!R} zD-l1l7*Amu@j+PWLGHXXaFG0Ct2Q=}5YNUxEQHCAU7gA$sSC<5OGylNnQUa>>l%sM zyu}z6i&({U@x^hln**o6r2s-(C-L50tQvz|zHTqW!ir?w&V23tuYEDJVV#5pE|OJu z7^R!A$iM$YCe?8n67l*J-okwfZ+ZTkGvZ)tVPfR;|3gyFjF)8V zyXXN=!*bpyRg9#~Bg1+UDYCt0 ztp4&?t1X0q>uz;ann$OrZs{5*r`(oNvw=$7O#rD|Wuv*wIi)4b zGtq4%BX+kkagv3F9Id6~-c+1&?zny%w5j&nk9SQfo0k4LhdSU_kWGW7axkfpgR`8* z!?UTG*Zi_baA1^0eda8S|@&F z{)Rad0kiLjB|=}XFJhD(S3ssKlveFFmkN{Vl^_nb!o5M!RC=m)V&v2%e?ZoRC@h3> zJ(?pvToFd`*Zc@HFPL#=otWKwtuuQ_dT-Hr{S%pQX<6dqVJ8;f(o)4~VM_kEQkMR+ zs1SCVi~k>M`u1u2xc}>#D!V&6nOOh-E$O&SzYrjJdZpaDv1!R-QGA141WjQe2s0J~ zQ;AXG)F+K#K8_5HVqRoRM%^EduqOnS(j2)|ctA6Q^=|s_WJYU;Z%5bHp08HPL`YF2 zR)Ad1z{zh`=sDs^&V}J z%$Z$!jd7BY5AkT?j`eqMs%!Gm@T8)4w3GYEX~IwgE~`d|@T{WYHkudy(47brgHXx& zBL1yFG6!!!VOSmDxBpefy2{L_u5yTwja&HA!mYA#wg#bc-m%~8aRR|~AvMnind@zs zy>wkShe5&*un^zvSOdlVu%kHsEo>@puMQ`b1}(|)l~E{5)f7gC=E$fP(FC2=F<^|A zxeIm?{EE!3sO!Gr7e{w)Dx(uU#3WrFZ>ibmKSQ1tY?*-Nh1TDHLe+k*;{Rp!Bmd_m zb#^kh`Y*8l|9Cz2e{;RL%_lg{#^Ar+NH|3z*Zye>!alpt{z;4dFAw^^H!6ING*EFc z_yqhr8d!;%nHX9AKhFQZBGrSzfzYCi%C!(Q5*~hX>)0N`vbhZ@N|i;_972WSx*>LH z87?en(;2_`{_JHF`Sv6Wlps;dCcj+8IJ8ca6`DsOQCMb3n# z3)_w%FuJ3>fjeOOtWyq)ag|PmgQbC-s}KRHG~enBcIwqIiGW8R8jFeBNY9|YswRY5 zjGUxdGgUD26wOpwM#8a!Nuqg68*dG@VM~SbOroL_On0N6QdT9?)NeB3@0FCC?Z|E0 z6TPZj(AsPtwCw>*{eDEE}Gby>0q{*lI+g2e&(YQrsY&uGM{O~}(oM@YWmb*F zA0^rr5~UD^qmNljq$F#ARXRZ1igP`MQx4aS6*MS;Ot(1L5jF2NJ;de!NujUYg$dr# z=TEL_zTj2@>ZZN(NYCeVX2==~=aT)R30gETO{G&GM4XN<+!&W&(WcDP%oL8PyIVUC zs5AvMgh6qr-2?^unB@mXK*Dbil^y-GTC+>&N5HkzXtozVf93m~xOUHn8`HpX=$_v2 z61H;Z1qK9o;>->tb8y%#4H)765W4E>TQ1o0PFj)uTOPEvv&}%(_mG0ISmyhnQV33Z$#&yd{ zc{>8V8XK$3u8}04CmAQ#I@XvtmB*s4t8va?-IY4@CN>;)mLb_4!&P3XSw4pA_NzDb zORn!blT-aHk1%Jpi>T~oGLuh{DB)JIGZ9KOsciWs2N7mM1JWM+lna4vkDL?Q)z_Ct z`!mi0jtr+4*L&N7jk&LodVO#6?_qRGVaucqVB8*us6i3BTa^^EI0x%EREQSXV@f!lak6Wf1cNZ8>*artIJ(ADO*=<-an`3zB4d*oO*8D1K!f z*A@P1bZCNtU=p!742MrAj%&5v%Xp_dSX@4YCw%F|%Dk=u|1BOmo)HsVz)nD5USa zR~??e61sO(;PR)iaxK{M%QM_rIua9C^4ppVS$qCT9j2%?*em?`4Z;4@>I(c%M&#cH z>4}*;ej<4cKkbCAjjDsyKS8rIm90O)Jjgyxj5^venBx&7B!xLmzxW3jhj7sR(^3Fz z84EY|p1NauwXUr;FfZjdaAfh%ivyp+^!jBjJuAaKa!yCq=?T_)R!>16?{~p)FQ3LDoMyG%hL#pR!f@P%*;#90rs_y z@9}@r1BmM-SJ#DeuqCQk=J?ixDSwL*wh|G#us;dd{H}3*-Y7Tv5m=bQJMcH+_S`zVtf;!0kt*(zwJ zs+kedTm!A}cMiM!qv(c$o5K%}Yd0|nOd0iLjus&;s0Acvoi-PFrWm?+q9f^FslxGi z6ywB`QpL$rJzWDg(4)C4+!2cLE}UPCTBLa*_=c#*$b2PWrRN46$y~yST3a2$7hEH= zNjux+wna^AzQ=KEa_5#9Ph=G1{S0#hh1L3hQ`@HrVnCx{!fw_a0N5xV(iPdKZ-HOM za)LdgK}1ww*C_>V7hbQnTzjURJL`S%`6nTHcgS+dB6b_;PY1FsrdE8(2K6FN>37!62j_cBlui{jO^$dPkGHV>pXvW0EiOA zqW`YaSUBWg_v^Y5tPJfWLcLpsA8T zG)!x>pKMpt!lv3&KV!-um= zKCir6`bEL_LCFx4Z5bAFXW$g3Cq`?Q%)3q0r852XI*Der*JNuKUZ`C{cCuu8R8nkt z%pnF>R$uY8L+D!V{s^9>IC+bmt<05h**>49R*#vpM*4i0qRB2uPbg8{{s#9yC;Z18 zD7|4m<9qneQ84uX|J&f-g8a|nFKFt34@Bt{CU`v(SYbbn95Q67*)_Esl_;v291s=9 z+#2F2apZU4Tq=x+?V}CjwD(P=U~d<=mfEFuyPB`Ey82V9G#Sk8H_Ob_RnP3s?)S_3 zr%}Pb?;lt_)Nf>@zX~D~TBr;-LS<1I##8z`;0ZCvI_QbXNh8Iv)$LS=*gHr;}dgb=w5$3k2la1keIm|=7<-JD>)U%=Avl0Vj@+&vxn zt-)`vJxJr88D&!}2^{GPXc^nmRf#}nb$4MMkBA21GzB`-Or`-3lq^O^svO7Vs~FdM zv`NvzyG+0T!P8l_&8gH|pzE{N(gv_tgDU7SWeiI-iHC#0Ai%Ixn4&nt{5y3(GQs)i z&uA;~_0shP$0Wh0VooIeyC|lak__#KVJfxa7*mYmZ22@(<^W}FdKjd*U1CqSjNKW% z*z$5$=t^+;Ui=MoDW~A7;)Mj%ibX1_p4gu>RC}Z_pl`U*{_z@+HN?AF{_W z?M_X@o%w8fgFIJ$fIzBeK=v#*`mtY$HC3tqw7q^GCT!P$I%=2N4FY7j9nG8aIm$c9 zeKTxVKN!UJ{#W)zxW|Q^K!3s;(*7Gbn;e@pQBCDS(I|Y0euK#dSQ_W^)sv5pa%<^o zyu}3d?Lx`)3-n5Sy9r#`I{+t6x%I%G(iewGbvor&I^{lhu-!#}*Q3^itvY(^UWXgvthH52zLy&T+B)Pw;5>4D6>74 zO_EBS)>l!zLTVkX@NDqyN2cXTwsUVao7$HcqV2%t$YzdAC&T)dwzExa3*kt9d(}al zA~M}=%2NVNUjZiO7c>04YH)sRelXJYpWSn^aC$|Ji|E13a^-v2MB!Nc*b+=KY7MCm zqIteKfNkONq}uM;PB?vvgQvfKLPMB8u5+Am=d#>g+o&Ysb>dX9EC8q?D$pJH!MTAqa=DS5$cb+;hEvjwVfF{4;M{5U&^_+r zvZdu_rildI!*|*A$TzJ&apQWV@p{!W`=?t(o0{?9y&vM)V)ycGSlI3`;ps(vf2PUq zX745#`cmT*ra7XECC0gKkpu2eyhFEUb?;4@X7weEnLjXj_F~?OzL1U1L0|s6M+kIhmi%`n5vvDALMagi4`wMc=JV{XiO+^ z?s9i7;GgrRW{Mx)d7rj)?(;|b-`iBNPqdwtt%32se@?w4<^KU&585_kZ=`Wy^oLu9 z?DQAh5z%q;UkP48jgMFHTf#mj?#z|=w= z(q6~17Vn}P)J3M?O)x))%a5+>TFW3No~TgP;f}K$#icBh;rSS+R|}l鯊%1Et zwk~hMkhq;MOw^Q5`7oC{CUUyTw9x>^%*FHx^qJw(LB+E0WBX@{Ghw;)6aA-KyYg8p z7XDveQOpEr;B4je@2~usI5BlFadedX^ma{b{ypd|RNYqo#~d*mj&y`^iojR}s%~vF z(H!u`yx68D1Tj(3(m;Q+Ma}s2n#;O~bcB1`lYk%Irx60&-nWIUBr2x&@}@76+*zJ5 ze&4?q8?m%L9c6h=J$WBzbiTf1Z-0Eb5$IZs>lvm$>1n_Mezp*qw_pr8<8$6f)5f<@ zyV#tzMCs51nTv_5ca`x`yfE5YA^*%O_H?;tWYdM_kHPubA%vy47i=9>Bq) zRQ&0UwLQHeswmB1yP)+BiR;S+Vc-5TX84KUA;8VY9}yEj0eESSO`7HQ4lO z4(CyA8y1G7_C;6kd4U3K-aNOK!sHE}KL_-^EDl(vB42P$2Km7$WGqNy=%fqB+ zSLdrlcbEH=T@W8V4(TgoXZ*G1_aq$K^@ek=TVhoKRjw;HyI&coln|uRr5mMOy2GXP zwr*F^Y|!Sjr2YQXX(Fp^*`Wk905K%$bd03R4(igl0&7IIm*#f`A!DCarW9$h$z`kYk9MjjqN&5-DsH@8xh63!fTNPxWsFQhNv z#|3RjnP$Thdb#Ys7M+v|>AHm0BVTw)EH}>x@_f4zca&3tXJhTZ8pO}aN?(dHo)44Z z_5j+YP=jMlFqwvf3lq!57-SAuRV2_gJ*wsR_!Y4Z(trO}0wmB9%f#jNDHPdQGHFR; zZXzS-$`;7DQ5vF~oSgP3bNV$6Z(rwo6W(U07b1n3UHqml>{=6&-4PALATsH@Bh^W? z)ob%oAPaiw{?9HfMzpGb)@Kys^J$CN{uf*HX?)z=g`J(uK1YO^8~s1(ZIbG%Et(|q z$D@_QqltVZu9Py4R0Ld8!U|#`5~^M=b>fnHthzKBRr=i+w@0Vr^l|W;=zFT#PJ?*a zbC}G#It}rQP^Ait^W&aa6B;+0gNvz4cWUMzpv(1gvfw-X4xJ2Sv;mt;zb2Tsn|kSS zo*U9N?I{=-;a-OybL4r;PolCfiaL=y@o9{%`>+&FI#D^uy#>)R@b^1ue&AKKwuI*` zx%+6r48EIX6nF4o;>)zhV_8(IEX})NGU6Vs(yslrx{5fII}o3SMHW7wGtK9oIO4OM&@@ECtXSICLcPXoS|{;=_yj>hh*%hP27yZwOmj4&Lh z*Nd@OMkd!aKReoqNOkp5cW*lC)&C$P?+H3*%8)6HcpBg&IhGP^77XPZpc%WKYLX$T zsSQ$|ntaVVOoRat$6lvZO(G-QM5s#N4j*|N_;8cc2v_k4n6zx9c1L4JL*83F-C1Cn zaJhd;>rHXB%%ZN=3_o3&Qd2YOxrK~&?1=UuN9QhL$~OY-Qyg&})#ez*8NpQW_*a&kD&ANjedxT0Ar z<6r{eaVz3`d~+N~vkMaV8{F?RBVemN(jD@S8qO~L{rUw#=2a$V(7rLE+kGUZ<%pdr z?$DP|Vg#gZ9S}w((O2NbxzQ^zTot=89!0^~hE{|c9q1hVzv0?YC5s42Yx($;hAp*E zyoGuRyphQY{Q2ee0Xx`1&lv(l-SeC$NEyS~8iil3_aNlnqF_G|;zt#F%1;J)jnPT& z@iU0S;wHJ2$f!juqEzPZeZkjcQ+Pa@eERSLKsWf=`{R@yv7AuRh&ALRTAy z8=g&nxsSJCe!QLchJ=}6|LshnXIK)SNd zRkJNiqHwKK{SO;N5m5wdL&qK`v|d?5<4!(FAsDxR>Ky#0#t$8XCMptvNo?|SY?d8b z`*8dVBlXTUanlh6n)!EHf2&PDG8sXNAt6~u-_1EjPI1|<=33T8 zEnA00E!`4Ave0d&VVh0e>)Dc}=FfAFxpsC1u9ATfQ`-Cu;mhc8Z>2;uyXtqpLb7(P zd2F9<3cXS} znMg?{&8_YFTGRQZEPU-XPq55%51}RJpw@LO_|)CFAt62-_!u_Uq$csc+7|3+TV_!h z+2a7Yh^5AA{q^m|=KSJL+w-EWDBc&I_I1vOr^}P8i?cKMhGy$CP0XKrQzCheG$}G# zuglf8*PAFO8%xop7KSwI8||liTaQ9NCAFarr~psQt)g*pC@9bORZ>m`_GA`_K@~&% zijH0z;T$fd;-Liw8%EKZas>BH8nYTqsK7F;>>@YsE=Rqo?_8}UO-S#|6~CAW0Oz1} z3F(1=+#wrBJh4H)9jTQ_$~@#9|Bc1Pd3rAIA_&vOpvvbgDJOM(yNPhJJq2%PCcMaI zrbe~toYzvkZYQ{ea(Wiyu#4WB#RRN%bMe=SOk!CbJZv^m?Flo5p{W8|0i3`hI3Np# zvCZqY%o258CI=SGb+A3yJe~JH^i{uU`#U#fvSC~rWTq+K`E%J@ zasU07&pB6A4w3b?d?q}2=0rA#SA7D`X+zg@&zm^iA*HVi z009#PUH<%lk4z~p^l0S{lCJk1Uxi=F4e_DwlfHA`X`rv(|JqWKAA5nH+u4Da+E_p+ zVmH@lg^n4ixs~*@gm_dgQ&eDmE1mnw5wBz9Yg?QdZwF|an67Xd*x!He)Gc8&2!urh z4_uXzbYz-aX)X1>&iUjGp;P1u8&7TID0bTH-jCL&Xk8b&;;6p2op_=y^m@Nq*0{#o!!A;wNAFG@0%Z9rHo zcJs?Th>Ny6+hI`+1XoU*ED$Yf@9f91m9Y=#N(HJP^Y@ZEYR6I?oM{>&Wq4|v0IB(p zqX#Z<_3X(&{H+{3Tr|sFy}~=bv+l=P;|sBz$wk-n^R`G3p0(p>p=5ahpaD7>r|>pm zv;V`_IR@tvZreIuv2EM7ZQHhO+qUgw#kOs%*ekY^n|=1#x9&c;Ro&I~{rG-#_3ZB1 z?|9}IFdbP}^DneP*T-JaoYHt~r@EfvnPE5EKUwIxjPbsr$% zfWW83pgWST7*B(o=kmo)74$8UU)v0{@4DI+ci&%=#90}!CZz|rnH+Mz=HN~97G3~@ z;v5(9_2%eca(9iu@J@aqaMS6*$TMw!S>H(b z4(*B!|H|8&EuB%mITr~O?vVEf%(Gr)6E=>H~1VR z&1YOXluJSG1!?TnT)_*YmJ*o_Q@om~(GdrhI{$Fsx_zrkupc#y{DK1WOUR>tk>ZE) ziOLoBkhZZ?0Uf}cm>GsA>Rd6V8@JF)J*EQlQ<=JD@m<)hyElXR0`pTku*3MU`HJn| zIf7$)RlK^pW-$87U;431;Ye4Ie+l~_B3*bH1>*yKzn23cH0u(i5pXV! z4K?{3oF7ZavmmtTq((wtml)m6i)8X6ot_mrE-QJCW}Yn!(3~aUHYG=^fA<^~`e3yc z-NWTb{gR;DOUcK#zPbN^D*e=2eR^_!(!RKkiwMW@@yYtEoOp4XjOGgzi`;=8 zi3`Ccw1%L*y(FDj=C7Ro-V?q)-%p?Ob2ZElu`eZ99n14-ZkEV#y5C+{Pq87Gu3&>g zFy~Wk7^6v*)4pF3@F@rE__k3ikx(hzN3@e*^0=KNA6|jC^B5nf(XaoQaZN?Xi}Rn3 z$8&m*KmWvPaUQ(V<#J+S&zO|8P-#!f%7G+n_%sXp9=J%Z4&9OkWXeuZN}ssgQ#Tcj z8p6ErJQJWZ+fXLCco=RN8D{W%+*kko*2-LEb))xcHwNl~Xmir>kmAxW?eW50Osw3# zki8Fl$#fvw*7rqd?%E?}ZX4`c5-R&w!Y0#EBbelVXSng+kUfeUiqofPehl}$ormli zg%r)}?%=?_pHb9`Cq9Z|B`L8b>(!+8HSX?`5+5mm81AFXfnAt1*R3F z%b2RPIacKAddx%JfQ8l{3U|vK@W7KB$CdLqn@wP^?azRks@x8z59#$Q*7q!KilY-P zHUbs(IFYRGG1{~@RF;Lqyho$~7^hNC`NL3kn^Td%A7dRgr_&`2k=t+}D-o9&C!y^? z6MsQ=tc3g0xkK(O%DzR9nbNB(r@L;1zQrs8mzx&4dz}?3KNYozOW5;=w18U6$G4U2 z#2^qRLT*Mo4bV1Oeo1PKQ2WQS2Y-hv&S|C7`xh6=Pj7MNLC5K-zokZ67S)C;(F0Dd zloDK2_o1$Fmza>EMj3X9je7e%Q`$39Dk~GoOj89-6q9|_WJlSl!!+*{R=tGp z8u|MuSwm^t7K^nUe+^0G3dkGZr3@(X+TL5eah)K^Tn zXEtHmR9UIaEYgD5Nhh(s*fcG_lh-mfy5iUF3xxpRZ0q3nZ=1qAtUa?(LnT9I&~uxX z`pV?+=|-Gl(kz?w!zIieXT}o}7@`QO>;u$Z!QB${a08_bW0_o@&9cjJUXzVyNGCm8 zm=W+$H!;_Kzp6WQqxUI;JlPY&`V}9C$8HZ^m?NvI*JT@~BM=()T()Ii#+*$y@lTZBkmMMda>7s#O(1YZR+zTG@&}!EXFG{ zEWPSDI5bFi;NT>Yj*FjH((=oe%t%xYmE~AGaOc4#9K_XsVpl<4SP@E!TgC0qpe1oi zNpxU2b0(lEMcoibQ-G^cxO?ySVW26HoBNa;n0}CWL*{k)oBu1>F18X061$SP{Gu67 z-v-Fa=Fl^u3lnGY^o5v)Bux}bNZ~ z5pL+7F_Esoun8^5>z8NFoIdb$sNS&xT8_|`GTe8zSXQzs4r^g0kZjg(b0bJvz`g<70u9Z3fQILX1Lj@;@+##bP|FAOl)U^9U>0rx zGi)M1(Hce)LAvQO-pW!MN$;#ZMX?VE(22lTlJrk#pB0FJNqVwC+*%${Gt#r_tH9I_ z;+#)#8cWAl?d@R+O+}@1A^hAR1s3UcW{G+>;X4utD2d9X(jF555}!TVN-hByV6t+A zdFR^aE@GNNgSxxixS2p=on4(+*+f<8xrwAObC)D5)4!z7)}mTpb7&ofF3u&9&wPS< zB62WHLGMhmrmOAgmJ+|c>qEWTD#jd~lHNgT0?t-p{T=~#EMcB| z=AoDKOL+qXCfk~F)-Rv**V}}gWFl>liXOl7Uec_8v)(S#av99PX1sQIVZ9eNLkhq$ zt|qu0b?GW_uo}TbU8!jYn8iJeIP)r@;!Ze_7mj{AUV$GEz6bDSDO=D!&C9!M@*S2! zfGyA|EPlXGMjkH6x7OMF?gKL7{GvGfED=Jte^p=91FpCu)#{whAMw`vSLa`K#atdN zThnL+7!ZNmP{rc=Z>%$meH;Qi1=m1E3Lq2D_O1-X5C;!I0L>zur@tPAC9*7Jeh)`;eec}1`nkRP(%iv-`N zZ@ip-g|7l6Hz%j%gcAM}6-nrC8oA$BkOTz^?dakvX?`^=ZkYh%vUE z9+&)K1UTK=ahYiaNn&G5nHUY5niLGus@p5E2@RwZufRvF{@$hW{;{3QhjvEHMvduO z#Wf-@oYU4ht?#uP{N3utVzV49mEc9>*TV_W2TVC`6+oI)zAjy$KJrr=*q##&kobiQ z1vNbya&OVjK`2pdRrM?LuK6BgrLN7H_3m z!qpNKg~87XgCwb#I=Q&0rI*l$wM!qTkXrx1ko5q-f;=R2fImRMwt5Qs{P*p^z@9ex z`2#v(qE&F%MXlHpdO#QEZyZftn4f05ab^f2vjxuFaat2}jke{j?5GrF=WYBR?gS(^ z9SBiNi}anzBDBRc+QqizTTQuJrzm^bNA~A{j%ugXP7McZqJ}65l10({wk++$=e8O{ zxWjG!Qp#5OmI#XRQQM?n6?1ztl6^D40hDJr?4$Wc&O_{*OfMfxe)V0=e{|N?J#fgE>j9jAajze$iN!*yeF%jJU#G1c@@rm zolGW!j?W6Q8pP=lkctNFdfgUMg92wlM4E$aks1??M$~WQfzzzXtS)wKrr2sJeCN4X zY(X^H_c^PzfcO8Bq(Q*p4c_v@F$Y8cHLrH$`pJ2}=#*8%JYdqsqnGqEdBQMpl!Ot04tUGSXTQdsX&GDtjbWD=prcCT9(+ z&UM%lW%Q3yrl1yiYs;LxzIy>2G}EPY6|sBhL&X&RAQrSAV4Tlh2nITR?{6xO9ujGu zr*)^E`>o!c=gT*_@6S&>0POxcXYNQd&HMw6<|#{eSute2C3{&h?Ah|cw56-AP^f8l zT^kvZY$YiH8j)sk7_=;gx)vx-PW`hbSBXJGCTkpt;ap(}G2GY=2bbjABU5)ty%G#x zAi07{Bjhv}>OD#5zh#$0w;-vvC@^}F! z#X$@)zIs1L^E;2xDAwEjaXhTBw2<{&JkF*`;c3<1U@A4MaLPe{M5DGGkL}#{cHL%* zYMG+-Fm0#qzPL#V)TvQVI|?_M>=zVJr9>(6ib*#z8q@mYKXDP`k&A4A};xMK0h=yrMp~JW{L?mE~ph&1Y1a#4%SO)@{ zK2juwynUOC)U*hVlJU17%llUxAJFuKZh3K0gU`aP)pc~bE~mM!i1mi!~LTf>1Wp< zuG+ahp^gH8g8-M$u{HUWh0m^9Rg@cQ{&DAO{PTMudV6c?ka7+AO& z746QylZ&Oj`1aqfu?l&zGtJnpEQOt;OAFq19MXTcI~`ZcoZmyMrIKDFRIDi`FH)w; z8+*8tdevMDv*VtQi|e}CnB_JWs>fhLOH-+Os2Lh!&)Oh2utl{*AwR)QVLS49iTp{6 z;|172Jl!Ml17unF+pd+Ff@jIE-{Oxv)5|pOm@CkHW?{l}b@1>Pe!l}VccX#xp@xgJ zyE<&ep$=*vT=}7vtvif0B?9xw_3Gej7mN*dOHdQPtW5kA5_zGD zpA4tV2*0E^OUimSsV#?Tg#oiQ>%4D@1F5@AHwT8Kgen$bSMHD3sXCkq8^(uo7CWk`mT zuslYq`6Yz;L%wJh$3l1%SZv#QnG3=NZ=BK4yzk#HAPbqXa92;3K5?0kn4TQ`%E%X} z&>Lbt!!QclYKd6+J7Nl@xv!uD%)*bY-;p`y^ZCC<%LEHUi$l5biu!sT3TGGSTPA21 zT8@B&a0lJHVn1I$I3I1I{W9fJAYc+8 zVj8>HvD}&O`TqU2AAb={?eT;0hyL(R{|h23=4fDSZKC32;wWxsVj`P z3J3{M$PwdH!ro*Cn!D&=jnFR>BNGR<<|I8CI@+@658Dy(lhqbhXfPTVecY@L8%`3Q z1Fux2w?2C3th60jI~%OC9BtpNF$QPqcG+Pz96qZJ71_`0o0w_q7|h&O>`6U+^BA&5 zXd5Zp1Xkw~>M%RixTm&OqpNl8Q+ue=92Op_>T~_9UON?ZM2c0aGm=^A4ejrXj3dV9 zhh_bCt-b9`uOX#cFLj!vhZ#lS8Tc47OH>*)y#{O9?AT~KR9LntM|#l#Dlm^8{nZdk zjMl#>ZM%#^nK2TPzLcKxqx24P7R1FPlBy7LSBrRvx>fE$9AJ;7{PQm~^LBX^k#6Zq zw*Z(zJC|`!6_)EFR}8|n8&&Rbj8y028~P~sFXBFRt+tmqH-S3<%N;C&WGH!f3{7cm zy_fCAb9@HqaXa1Y5vFbxWf%#zg6SI$C+Uz5=CTO}e|2fjWkZ;Dx|84Ow~bkI=LW+U zuq;KSv9VMboRvs9)}2PAO|b(JCEC_A0wq{uEj|3x@}*=bOd zwr{TgeCGG>HT<@Zeq8y}vTpwDg#UBvD)BEs@1KP$^3$sh&_joQPn{hjBXmLPJ{tC) z*HS`*2+VtJO{|e$mM^|qv1R*8i(m1`%)}g=SU#T#0KlTM2RSvYUc1fP+va|4;5}Bfz98UvDCpq7}+SMV&;nX zQw~N6qOX{P55{#LQkrZk(e5YGzr|(B;Q;ju;2a`q+S9bsEH@i1{_Y0;hWYn1-79jl z5c&bytD*k)GqrVcHn6t-7kinadiD>B{Tl`ZY@`g|b~pvHh5!gKP4({rp?D0aFd_cN zhHRo4dd5^S6ViN(>(28qZT6E>??aRhc($kP`>@<+lIKS5HdhjVU;>f7<4))E*5|g{ z&d1}D|vpuV^eRj5j|xx9nwaCxXFG?Qbjn~_WSy=N}P0W>MP zG-F%70lX5Xr$a)2i6?i|iMyM|;Jtf*hO?=Jxj12oz&>P=1#h~lf%#fc73M2_(SUM- zf&qnjS80|_Y0lDgl&I?*eMumUklLe_=Td!9G@eR*tcPOgIShJipp3{A10u(4eT~DY zHezEj8V+7m!knn7)W!-5QI3=IvC^as5+TW1@Ern@yX| z7Nn~xVx&fGSr+L%4iohtS3w^{-H1A_5=r&x8}R!YZvp<2T^YFvj8G_vm}5q;^UOJf ztl=X3iL;;^^a#`t{Ae-%5Oq{?M#s6Npj+L(n-*LMI-yMR{)qki!~{5z{&`-iL}lgW zxo+tnvICK=lImjV$Z|O_cYj_PlEYCzu-XBz&XC-JVxUh9;6*z4fuBG+H{voCC;`~GYV|hj%j_&I zDZCj>Q_0RCwFauYoVMiUSB+*Mx`tg)bWmM^SwMA+?lBg12QUF_x2b)b?qb88K-YUd z0dO}3k#QirBV<5%jL$#wlf!60dizu;tsp(7XLdI=eQs?P`tOZYMjVq&jE)qK*6B^$ zBe>VvH5TO>s>izhwJJ$<`a8fakTL!yM^Zfr2hV9`f}}VVUXK39p@G|xYRz{fTI+Yq z20d=)iwjuG9RB$%$^&8#(c0_j0t_C~^|n+c`Apu|x7~;#cS-s=X1|C*YxX3ailhg_|0`g!E&GZJEr?bh#Tpb8siR=JxWKc{#w7g zWznLwi;zLFmM1g8V5-P#RsM@iX>TK$xsWuujcsVR^7TQ@!+vCD<>Bk9tdCo7Mzgq5 zv8d>dK9x8C@Qoh01u@3h0X_`SZluTb@5o;{4{{eF!-4405x8X7hewZWpz z2qEi4UTiXTvsa(0X7kQH{3VMF>W|6;6iTrrYD2fMggFA&-CBEfSqPlQDxqsa>{e2M z(R5PJ7uOooFc|9GU0ELA%m4&4Ja#cQpNw8i8ACAoK6?-px+oBl_yKmenZut#Xumjz zk8p^OV2KY&?5MUwGrBOo?ki`Sxo#?-Q4gw*Sh0k`@ zFTaYK2;}%Zk-68`#5DXU$2#=%YL#S&MTN8bF+!J2VT6x^XBci6O)Q#JfW{YMz) zOBM>t2rSj)n#0a3cjvu}r|k3od6W(SN}V-cL?bi*Iz-8uOcCcsX0L>ZXjLqk zZu2uHq5B|Kt>e+=pPKu=1P@1r9WLgYFq_TNV1p9pu0erHGd!+bBp!qGi+~4A(RsYN@CyXNrC&hxGmW)u5m35OmWwX`I+0yByglO`}HC4nGE^_HUs^&A(uaM zKPj^=qI{&ayOq#z=p&pnx@@k&I1JI>cttJcu@Ihljt?6p^6{|ds`0MoQwp+I{3l6` zB<9S((RpLG^>=Kic`1LnhpW2=Gu!x`m~=y;A`Qk!-w`IN;S8S930#vBVMv2vCKi}u z6<-VPrU0AnE&vzwV(CFC0gnZYcpa-l5T0ZS$P6(?9AM;`Aj~XDvt;Jua=jIgF=Fm? zdp=M$>`phx%+Gu};;-&7T|B1AcC#L4@mW5SV_^1BRbo6;2PWe$r+npRV`yc;T1mo& z+~_?7rA+(Um&o@Tddl zL_hxvWk~a)yY}%j`Y+200D%9$bWHy&;(yj{jpi?Rtz{J66ANw)UyPOm;t6FzY3$hx zcn)Ir79nhFvNa7^a{SHN7XH*|Vlsx`CddPnA&Qvh8aNhEA;mPVv;Ah=k<*u!Zq^7 z<=xs*iQTQOMMcg|(NA_auh@x`3#_LFt=)}%SQppP{E>mu_LgquAWvh<>L7tf9+~rO znwUDS52u)OtY<~!d$;m9+87aO+&`#2ICl@Y>&F{jI=H(K+@3M1$rr=*H^dye#~TyD z!){#Pyfn+|ugUu}G;a~!&&0aqQ59U@UT3|_JuBlYUpT$2+11;}JBJ`{+lQN9T@QFY z5+`t;6(TS0F?OlBTE!@7D`8#URDNqx2t6`GZ{ZgXeS@v%-eJzZOHz18aS|svxII$a zZeFjrJ*$IwX$f-Rzr_G>xbu@euGl)B7pC&S+CmDJBg$BoV~jxSO#>y z33`bupN#LDoW0feZe0%q8un0rYN|eRAnwDHQ6e_)xBTbtoZtTA=Fvk){q}9Os~6mQ zKB80VI_&6iSq`LnK7*kfHZoeX6?WE}8yjuDn=2#JG$+;-TOA1%^=DnXx%w{b=w}tS zQbU3XxtOI8E(!%`64r2`zog;5<0b4i)xBmGP^jiDZ2%HNSxIf3@wKs~uk4%3Mxz;~ zts_S~E4>W+YwI<-*-$U8*^HKDEa8oLbmqGg?3vewnaNg%Mm)W=)lcC_J+1ov^u*N3 zXJ?!BrH-+wGYziJq2Y#vyry6Z>NPgkEk+Ke`^DvNRdb>Q2Nlr#v%O@<5hbflI6EKE z9dWc0-ORk^T}jP!nkJ1imyjdVX@GrjOs%cpgA8-c&FH&$(4od#x6Y&=LiJZPINVyW z0snY$8JW@>tc2}DlrD3StQmA0Twck~@>8dSix9CyQOALcREdxoM$Sw*l!}bXKq9&r zysMWR@%OY24@e`?+#xV2bk{T^C_xSo8v2ZI=lBI*l{RciPwuE>L5@uhz@{!l)rtVlWC>)6(G)1~n=Q|S!{E9~6*fdpa*n z!()-8EpTdj=zr_Lswi;#{TxbtH$8*G=UM`I+icz7sr_SdnHXrv=?iEOF1UL+*6O;% zPw>t^kbW9X@oEXx<97%lBm-9?O_7L!DeD)Me#rwE54t~UBu9VZ zl_I1tBB~>jm@bw0Aljz8! zXBB6ATG6iByKIxs!qr%pz%wgqbg(l{65DP4#v(vqhhL{0b#0C8mq`bnqZ1OwFV z7mlZZJFMACm>h9v^2J9+^_zc1=JjL#qM5ZHaThH&n zXPTsR8(+)cj&>Un{6v*z?@VTLr{TmZ@-fY%*o2G}*G}#!bmqpoo*Ay@U!JI^Q@7gj;Kg-HIrLj4}#ec4~D2~X6vo;ghep-@&yOivYP zC19L0D`jjKy1Yi-SGPAn94(768Tcf$urAf{)1)9W58P`6MA{YG%O?|07!g9(b`8PXG1B1Sh0?HQmeJtP0M$O$hI z{5G`&9XzYhh|y@qsF1GnHN|~^ru~HVf#)lOTSrv=S@DyR$UKQk zjdEPFDz{uHM&UM;=mG!xKvp;xAGHOBo~>_=WFTmh$chpC7c`~7?36h)7$fF~Ii}8q zF|YXxH-Z?d+Q+27Rs3X9S&K3N+)OBxMHn1u(vlrUC6ckBY@@jl+mgr#KQUKo#VeFm zFwNYgv0<%~Wn}KeLeD9e1$S>jhOq&(e*I@L<=I5b(?G(zpqI*WBqf|Zge0&aoDUsC zngMRA_Kt0>La+Erl=Uv_J^p(z=!?XHpenzn$%EA`JIq#yYF?JLDMYiPfM(&Csr#f{ zdd+LJL1by?xz|D8+(fgzRs~(N1k9DSyK@LJygwaYX8dZl0W!I&c^K?7)z{2is;OkE zd$VK-(uH#AUaZrp=1z;O*n=b?QJkxu`Xsw&7yrX0?(CX=I-C#T;yi8a<{E~?vr3W> zQrpPqOW2M+AnZ&p{hqmHZU-;Q(7?- zP8L|Q0RM~sB0w1w53f&Kd*y}ofx@c z5Y6B8qGel+uT1JMot$nT1!Tim6{>oZzJXdyA+4euOLME?5Fd_85Uk%#E*ln%y{u8Q z$|?|R@Hpb~yTVK-Yr_S#%NUy7EBfYGAg>b({J|5b+j-PBpPy$Ns`PaJin4JdRfOaS zE|<HjH%NuJgsd2wOlv>~y=np%=2)$M9LS|>P)zJ+Fei5vYo_N~B0XCn+GM76 z)Xz3tg*FRVFgIl9zpESgdpWAavvVViGlU8|UFY{{gVJskg*I!ZjWyk~OW-Td4(mZ6 zB&SQreAAMqwp}rjy`HsG({l2&q5Y52<@AULVAu~rWI$UbFuZs>Sc*x+XI<+ez%$U)|a^unjpiW0l0 zj1!K0(b6$8LOjzRqQ~K&dfbMIE=TF}XFAi)$+h}5SD3lo z%%Qd>p9se=VtQG{kQ;N`sI)G^u|DN#7{aoEd zkksYP%_X$Rq08);-s6o>CGJ<}v`qs%eYf+J%DQ^2k68C%nvikRsN?$ap--f+vCS`K z#&~)f7!N^;sdUXu54gl3L=LN>FB^tuK=y2e#|hWiWUls__n@L|>xH{%8lIJTd5`w? zSwZbnS;W~DawT4OwSJVdAylbY+u5S+ZH{4hAi2&}Iv~W(UvHg(1GTZRPz`@{SOqzy z(8g&Dz=$PfRV=6FgxN~zo+G8OoPI&d-thcGVR*_^(R8COTM@bq?fDwY{}WhsQS1AK zF6R1t8!RdFmfocpJ6?9Yv~;WYi~XPgs(|>{5})j!AR!voO7y9&cMPo#80A(`za@t>cx<0;qxM@S*m(jYP)dMXr*?q0E`oL;12}VAep179uEr8c<=D zr5?A*C{eJ`z9Ee;E$8)MECqatHkbHH z&Y+ho0B$31MIB-xm&;xyaFCtg<{m~M-QDbY)fQ>Q*Xibb~8ytxZQ?QMf9!%cV zU0_X1@b4d+Pg#R!`OJ~DOrQz3@cpiGy~XSKjZQQ|^4J1puvwKeScrH8o{bscBsowomu z^f12kTvje`yEI3eEXDHJ6L+O{Jv$HVj%IKb|J{IvD*l6IG8WUgDJ*UGz z3!C%>?=dlfSJ>4U88)V+`U-!9r^@AxJBx8R;)J4Fn@`~k>8>v0M9xp90OJElWP&R5 zM#v*vtT}*Gm1^)Bv!s72T3PB0yVIjJW)H7a)ilkAvoaH?)jjb`MP>2z{%Y?}83 zUIwBKn`-MSg)=?R)1Q0z3b>dHE^)D8LFs}6ASG1|daDly_^lOSy&zIIhm*HXm1?VS=_iacG);_I9c zUQH1>i#*?oPIwBMJkzi_*>HoUe}_4o>2(SHWzqQ=;TyhAHS;Enr7!#8;sdlty&(>d zl%5cjri8`2X^Ds`jnw7>A`X|bl=U8n+3LKLy(1dAu8`g@9=5iw$R0qk)w8Vh_Dt^U zIglK}sn^)W7aB(Q>HvrX=rxB z+*L)3DiqpQ_%~|m=44LcD4-bxO3OO*LPjsh%p(k?&jvLp0py57oMH|*IMa(<|{m1(0S|x)?R-mqJ=I;_YUZA>J z62v*eSK;5w!h8J+6Z2~oyGdZ68waWfy09?4fU&m7%u~zi?YPHPgK6LDwphgaYu%0j zurtw)AYOpYKgHBrkX189mlJ`q)w-f|6>IER{5Lk97%P~a-JyCRFjejW@L>n4vt6#hq;!|m;hNE||LK3nw1{bJOy+eBJjK=QqNjI;Q6;Rp5 z&035pZDUZ#%Oa;&_7x0T<7!RW`#YBOj}F380Bq?MjjEhrvlCATPdkCTTl+2efTX$k zH&0zR1n^`C3ef~^sXzJK-)52(T}uTG%OF8yDhT76L~|^+hZ2hiSM*QA9*D5odI1>& z9kV9jC~twA5MwyOx(lsGD_ggYmztXPD`2=_V|ks_FOx!_J8!zM zTzh^cc+=VNZ&(OdN=y4Juw)@8-85lwf_#VMN!Ed(eQiRiLB2^2e`4dp286h@v@`O%_b)Y~A; zv}r6U?zs&@uD_+(_4bwoy7*uozNvp?bXFoB8?l8yG0qsm1JYzIvB_OH4_2G*IIOwT zVl%HX1562vLVcxM_RG*~w_`FbIc!(T=3>r528#%mwwMK}uEhJ()3MEby zQQjzqjWkwfI~;Fuj(Lj=Ug0y`>~C7`w&wzjK(rPw+Hpd~EvQ-ufQOiB4OMpyUKJhw zqEt~jle9d7S~LI~$6Z->J~QJ{Vdn3!c}g9}*KG^Kzr^(7VI5Gk(mHLL{itj_hG?&K4Ws0+T4gLfi3eu$N=`s36geNC?c zm!~}vG6lx9Uf^5M;bWntF<-{p^bruy~f?sk9 zcETAPQZLoJ8JzMMg<-=ju4keY@SY%Wo?u9Gx=j&dfa6LIAB|IrbORLV1-H==Z1zCM zeZcOYpm5>U2fU7V*h;%n`8 zN95QhfD994={1*<2vKLCNF)feKOGk`R#K~G=;rfq}|)s20&MCa65 zUM?xF5!&e0lF%|U!#rD@I{~OsS_?=;s_MQ_b_s=PuWdC)q|UQ&ea)DMRh5>fpQjXe z%9#*x=7{iRCtBKT#H>#v%>77|{4_slZ)XCY{s3j_r{tdpvb#|r|sbS^dU1x70$eJMU!h{Y7Kd{dl}9&vxQl6Jt1a` zHQZrWyY0?!vqf@u-fxU_@+}u(%Wm>0I#KP48tiAPYY!TdW(o|KtVI|EUB9V`CBBNaBLVih7+yMVF|GSoIQD0Jfb{ z!OXq;(>Z?O`1gap(L~bUcp>Lc@Jl-})^=6P%<~~9ywY=$iu8pJ0m*hOPzr~q`23eX zgbs;VOxxENe0UMVeN*>uCn9Gk!4siN-e>x)pIKAbQz!G)TcqIJ0`JBBaX>1-4_XO_-HCS^vr2vjv#7KltDZdyQ{tlWh4$Gm zB>|O1cBDC)yG(sbnc*@w6e%e}r*|IhpXckx&;sQCwGdKH+3oSG-2)Bf#x`@<4ETAr z0My%7RFh6ZLiZ_;X6Mu1YmXx7C$lSZ^}1h;j`EZd6@%JNUe=btBE z%s=Xmo1Ps?8G`}9+6>iaB8bgjUdXT?=trMu|4yLX^m0Dg{m7rpKNJey|EwHI+nN1e zL^>qN%5Fg)dGs4DO~uwIdXImN)QJ*Jhpj7$fq_^`{3fwpztL@WBB}OwQ#Epo-mqMO zsM$UgpFiG&d#)lzEQ{3Q;)&zTw;SzGOah-Dpm{!q7<8*)Ti_;xvV2TYXa}=faXZy? z3y?~GY@kl)>G&EvEijk9y1S`*=zBJSB1iet>0;x1Ai)*`^{pj0JMs)KAM=@UyOGtO z3y0BouW$N&TnwU6!%zS%nIrnANvZF&vB1~P5_d`x-giHuG zPJ;>XkVoghm#kZXRf>qxxEix;2;D1CC~NrbO6NBX!`&_$iXwP~P*c($EVV|669kDO zKoTLZNF4Cskh!Jz5ga9uZ`3o%7Pv`d^;a=cXI|>y;zC3rYPFLQkF*nv(r>SQvD*## z(Vo%^9g`%XwS0t#94zPq;mYGLKu4LU3;txF26?V~A0xZbU4Lmy`)>SoQX^m7fd^*E z+%{R4eN!rIk~K)M&UEzxp9dbY;_I^c} zOc{wlIrN_P(PPqi51k_$>Lt|X6A^|CGYgKAmoI#Li?;Wq%q~q*L7ehZkUrMxW67Jl zhsb~+U?33QS>eqyN{(odAkbopo=Q$Az?L+NZW>j;#~@wCDX?=L5SI|OxI~7!Pli;e zELMFcZtJY3!|=Gr2L4>z8yQ-{To>(f80*#;6`4IAiqUw`=Pg$%C?#1 z_g@hIGerILSU>=P>z{gM|DS91A4cT@PEIB^hSop!uhMo#2G;+tQSpDO_6nOnPWSLU zS;a9m^DFMXR4?*X=}d7l;nXuHk&0|m`NQn%d?8|Ab3A9l9Jh5s120ibWBdB z$5YwsK3;wvp!Kn@)Qae{ef`0#NwlRpQ}k^r>yos_Ne1;xyKLO?4)t_G4eK~wkUS2A&@_;)K0-03XGBzU+5f+uMDxC z(s8!8!RvdC#@`~fx$r)TKdLD6fWEVdEYtV#{ncT-ZMX~eI#UeQ-+H(Z43vVn%Yj9X zLdu9>o%wnWdvzA-#d6Z~vzj-}V3FQ5;axDIZ;i(95IIU=GQ4WuU{tl-{gk!5{l4_d zvvb&uE{%!iFwpymz{wh?bKr1*qzeZb5f6e6m_ozRF&zux2mlK=v_(_s^R6b5lu?_W4W3#<$zeG~Pd)^!4tzhs}-Sx$FJP>)ZGF(hVTH|C3(U zs0PO&*h_ zNA-&qZpTP$$LtIgfiCn07}XDbK#HIXdmv8zdz4TY;ifNIH-0jy(gMSByG2EF~Th#eb_TueZC` zE?3I>UTMpKQ})=C;6p!?G)M6w^u*A57bD?2X`m3X^6;&4%i_m(uGJ3Z5h`nwxM<)H z$I5m?wN>O~8`BGnZ=y^p6;0+%_0K}Dcg|K;+fEi|qoBqvHj(M&aHGqNF48~XqhtU? z^ogwBzRlOfpAJ+Rw7IED8lRbTdBdyEK$gPUpUG}j-M42xDj_&qEAQEtbs>D#dRd7Y z<&TpSZ(quQDHiCFn&0xsrz~4`4tz!CdL8m~HxZM_agu@IrBpyeL1Ft}V$HX_ZqDPm z-f89)pjuEzGdq-PRu`b1m+qBGY{zr_>{6Ss>F|xHZlJj9dt5HD$u`1*WZe)qEIuDSR)%z+|n zatVlhQ?$w#XRS7xUrFE;Y8vMGhQS5*T{ZnY=q1P?w5g$OKJ#M&e??tAmPWHMj3xhS ziGxapy?kn@$~2%ZY;M8Bc@%$pkl%Rvj!?o%agBvpQ-Q61n9kznC4ttrRNQ4%GFR5u zyv%Yo9~yxQJWJSfj z?#HY$y=O~F|2pZs22pu|_&Ajd+D(Mt!nPUG{|1nlvP`=R#kKH zO*s$r_%ss5h1YO7k0bHJ2CXN)Yd6CHn~W!R=SqkWe=&nAZu(Q1G!xgcUilM@YVei@2@a`8he z9@pM`)VB*=e7-MWgLlXlc)t;fF&-AwM{E-EX}pViFn0I0CNw2bNEnN2dj!^4(^zS3 zobUm1uQnpqk_4q{pl*n06=TfK_C>UgurKFjRXsK_LEn};=79`TB12tv6KzwSu*-C8 z;=~ohDLZylHQ|Mpx-?yql>|e=vI1Z!epyUpAcDCp4T|*RV&X`Q$0ogNwy6mFALo^@ z9=&(9txO8V@E!@6^(W0{*~CT>+-MA~vnJULBxCTUW>X5>r7*eXYUT0B6+w@lzw%n> z_VjJ<2qf|(d6jYq2(x$(ZDf!yVkfnbvNmb5c|hhZ^2TV_LBz`9w!e_V*W_(MiA7|= z&EeIIkw*+$Xd!)j8<@_<}A5;~A_>3JT*kX^@}cDoLd>Qj<`Se^wdUa(j0dp+Tl8EptwBm{9OGsdFEq zM`!pjf(Lm(`$e3FLOjqA5LnN5o!}z{ zNf}rJuZh@yUtq&ErjHeGzX4(!luV!jB&;FAP|!R_QHYw#^Z1LwTePAKJ6X&IDNO#; z)#I@Xnnzyij~C@UH~X51JCgQeF0&hTXnuoElz#m{heZRexWc0k4<>0+ClX7%0 zEBqCCld1tD9Zwkr4{?Nor19#E5-YKfB8d?qgR82-Ow2^AuNevly2*tHA|sK!ybYkX zm-sLQH72P&{vEAW6+z~O5d0qd=xW~rua~5a?ymYFSD@8&gV)E5@RNNBAj^C99+Z5Z zR@Pq55mbCQbz+Mn$d_CMW<-+?TU960agEk1J<>d>0K=pF19yN))a~4>m^G&tc*xR+yMD*S=yip-q=H zIlredHpsJV8H(32@Zxc@bX6a21dUV95Th--8pE6C&3F>pk=yv$yd6@Haw;$v4+Fcb zRwn{Qo@0`7aPa2LQOP}j9v>sjOo5Kqvn|`FLizX zB+@-u4Lw|jsvz{p^>n8Vo8H2peIqJJnMN}A)q6%$Tmig7eu^}K2 zrh$X?T|ZMsoh{6pdw1G$_T<`Ds-G=jc;qcGdK4{?dN2-XxjDNbb(7pk|3JUVCU4y; z)?LXR>f+AAu)JEiti_Zy#z5{RgsC}R(@jl%9YZ>zu~hKQ*AxbvhC378-I@{~#%Y`Z zy=a=9YpewPIC+gkEUUwtUL7|RU7=!^Aa}Mk^6uxOgRGA#JXjWLsjFUnix|Mau{hDT z7mn*z1m5g`vP(#tjT0Zy4eAY(br&!RiiXE=ZI!{sE1#^#%x^Z7t1U)b<;%Y}Q9=5v z;wpDCEZ@OE36TWT=|gxigT@VaW9BvHS05;_P(#s z8zI4XFQys}q)<`tkX$WnSarn{3e!s}4(J!=Yf>+Y>cP3f;vr63f2{|S^`_pWc)^5_!R z*(x-fuBxL51@xe!lnDBKi}Br$c$BMZ3%f2Sa6kLabiBS{pq*yj;q|k(86x`PiC{p6 z_bxCW{>Q2BA8~Ggz&0jkrcU+-$ANBsOop*ms>34K9lNYil@}jC;?cYP(m^P}nR6FV zk(M%48Z&%2Rx$A&FhOEirEhY0(dn;-k(qkTU)sFQ`+-ih+s@A8g?r8Pw+}2;35WYf zi}VO`jS`p(tc)$X$a>-#WXoW!phhatC*$}|rk>|wUU71eUJG^$c6_jwX?iSHM@6__ zvV|6%U*$sSXJu9SX?2%M^kK|}a2QJ8AhF{fuXrHZxXsI~O zGKX45!K7p*MCPEQ=gp?eu&#AW*pR{lhQR##P_*{c_DjMGL|3T3-bSJ(o$|M{ytU}> zAV>wq*uE*qFo9KvnA^@juy{x<-u*#2NvkV={Ly}ysKYB-k`K3@K#^S1Bb$8Y#0L0# z`6IkSG&|Z$ODy|VLS+y5pFJx&8tvPmMd8c9FhCyiU8~k6FwkakUd^(_ml8`rnl>JS zZV){9G*)xBqPz^LDqRwyS6w86#D^~xP4($150M)SOZRe9sn=>V#aG0Iy(_^YcPpIz8QYM-#s+n% z@Jd?xQq?Xk6=<3xSY7XYP$$yd&Spu{A#uafiIfy8gRC`o0nk{ezEDjb=q_qRAlR1d zFq^*9Gn)yTG4b}R{!+3hWQ+u3GT~8nwl2S1lpw`s0X_qpxv)g+JIkVKl${sYf_nV~B>Em>M;RlqGb5WVil(89 zs=ld@|#;dq1*vQGz=7--Br-|l) zZ%Xh@v8>B7P?~}?Cg$q9_={59l%m~O&*a6TKsCMAzG&vD>k2WDzJ6!tc!V)+oxF;h zJH;apM=wO?r_+*#;ulohuP=E>^zon}a$NnlcQ{1$SO*i=jnGVcQa^>QOILc)e6;eNTI>os=eaJ{*^DE+~jc zS}TYeOykDmJ=6O%>m`i*>&pO_S;qMySJIyP=}4E&J%#1zju$RpVAkZbEl+p%?ZP^C z*$$2b4t%a(e+%>a>d_f_<JjxI#J1x;=hPd1zFPx=6T$;;X1TD*2(edZ3f46zaAoW>L53vS_J*N8TMB|n+;LD| zC=GkQPpyDY#Am4l49chDv*gojhRj_?63&&8#doW`INATAo(qY#{q}%nf@eTIXmtU< zdB<7YWfyCmBs|c)cK>1)v&M#!yNj#4d$~pVfDWQc_ke1?fw{T1Nce_b`v|Vp5ig(H zJvRD^+ps46^hLX;=e2!2e;w9y1D@!D$c@Jc&%%%IL=+xzw55&2?darw=9g~>P z9>?Kdc$r?6c$m%x2S$sdpPl>GQZ{rC9mPS63*qjCVa?OIBj!fW zm|g?>CVfGXNjOfcyqImXR_(tXS(F{FcoNzKvG5R$IgGaxC@)i(e+$ME}vPVIhd|mx2IIE+f zM?9opQHIVgBWu)^A|RzXw!^??S!x)SZOwZaJkGjc<_}2l^eSBm!eAJG9T>EC6I_sy z?bxzDIAn&K5*mX)$RQzDA?s)-no-XF(g*yl4%+GBf`##bDXJ==AQk*xmnatI;SsLp zP9XTHq5mmS=iWu~9ES>b%Q=1aMa|ya^vj$@qz9S!ih{T8_PD%Sf_QrNKwgrXw9ldm zHRVR98*{C?_XNpJn{abA!oix_mowRMu^2lV-LPi;0+?-F(>^5#OHX-fPED zCu^l7u3E%STI}c4{J2!)9SUlGP_@!d?5W^QJXOI-Ea`hFMKjR7TluLvzC-ozCPn1`Tpy z!vlv@_Z58ILX6>nDjTp-1LlFMx~-%GA`aJvG$?8*Ihn;mH37eK**rmOEwqegf-Ccx zrIX4;{c~RK>XuTXxYo5kMiWMy)!IC{*DHG@E$hx?RwP@+wuad(P1{@%tRkyJRqD)3 zMHHHZ4boqDn>-=DgR5VlhQTpfVy182Gk;A_S8A1-;U1RR>+$62>(MUx@Nox$vTjHq z%QR=j!6Gdyb5wu7y(YUktwMuW5<@jl?m4cv4BODiT5o8qVdC0MBqGr@-YBIwnpZAY znX9(_uQjP}JJ=!~Ve9#5I~rUnN|P_3D$LqZcvBnywYhjlMSFHm`;u9GPla{5QD7(7*6Tb3Svr8;(nuAd81q$*uq6HC_&~je*Ca7hP4sJp0av{M8480wF zxASi7Qv+~@2U%Nu1Ud;s-G4CTVWIPyx!sg&8ZG0Wq zG_}i3C(6_1>q3w!EH7$Kwq8uBp2F2N7}l65mk1p*9v0&+;th=_E-W)E;w}P(j⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc literal 0 HcmV?d00001 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..ac72c34e8ac --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew new file mode 100755 index 00000000000..0adc8e1a532 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat new file mode 100644 index 00000000000..93e3f59f135 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle b/java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle new file mode 100644 index 00000000000..227c1aae87a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/settings.gradle @@ -0,0 +1,8 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation. + */ + +rootProject.name = 'buildless-gradle' diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java b/java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java new file mode 100644 index 00000000000..f5698a14e5a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/src/main/java/com/fractestexample/Test.java @@ -0,0 +1,9 @@ +package com.fractestexample; + +import org.apache.commons.math3.fraction.Fraction; + +public class Test { + + public Fraction test() { return Fraction.ONE; } + +} diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected new file mode 100644 index 00000000000..05792cb19fc --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.expected @@ -0,0 +1 @@ +| src/main/java/com/fractestexample/Test.java:0:0:0:0 | Test | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py new file mode 100644 index 00000000000..bfff65b2fc2 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.py @@ -0,0 +1,8 @@ +from create_database_utils import * +from diagnostics_test_utils import * +from buildless_test_utils import * + +run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) + +check_diagnostics() +check_buildless_fetches() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql new file mode 100644 index 00000000000..8317a5a022f --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/test.ql @@ -0,0 +1,5 @@ +import java + +from File f +where f.isSourceFile() +select f diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.actual b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.actual new file mode 100644 index 00000000000..e3710cc4cb9 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.actual @@ -0,0 +1,26 @@ +https://repo.maven.apache.org/maven2/com/feiniaojin/naaf/naaf-graceful-response-example/1.0/naaf-graceful-response-example-1.0.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/avro-registry-in-source-tests/1.8/avro-registry-in-source-tests-1.8.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/example-project/1.5/example-project-1.5.jar +https://repo.maven.apache.org/maven2/com/intuit/benten/benten-examples/0.1.5/benten-examples-0.1.5.jar +https://repo.maven.apache.org/maven2/com/jakewharton/twirl/sample-runtime/1.2.0/sample-runtime-1.2.0.jar +https://repo.maven.apache.org/maven2/com/mattunderscore/code/generation/specky/plugin-example/0.8.0/plugin-example-0.8.0.jar +https://repo.maven.apache.org/maven2/com/microsoft/tang/tang-test-jarAB/0.9/tang-test-jarAB-0.9.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/rx-redis-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar +https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-mustache/0.5.10/minijax-example-mustache-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-petclinic/0.5.10/minijax-example-petclinic-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-security/0.5.10/minijax-example-security-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-ssl/0.5.10/minijax-example-ssl-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-todo-backend/0.5.10/minijax-example-todo-backend-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.10/minijax-example-websocket-0.5.10.jar +https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar +https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar +https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar +https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar +https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected new file mode 100644 index 00000000000..e3710cc4cb9 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/buildless-fetches.expected @@ -0,0 +1,26 @@ +https://repo.maven.apache.org/maven2/com/feiniaojin/naaf/naaf-graceful-response-example/1.0/naaf-graceful-response-example-1.0.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/avro-registry-in-source-tests/1.8/avro-registry-in-source-tests-1.8.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/example-project/1.5/example-project-1.5.jar +https://repo.maven.apache.org/maven2/com/intuit/benten/benten-examples/0.1.5/benten-examples-0.1.5.jar +https://repo.maven.apache.org/maven2/com/jakewharton/twirl/sample-runtime/1.2.0/sample-runtime-1.2.0.jar +https://repo.maven.apache.org/maven2/com/mattunderscore/code/generation/specky/plugin-example/0.8.0/plugin-example-0.8.0.jar +https://repo.maven.apache.org/maven2/com/microsoft/tang/tang-test-jarAB/0.9/tang-test-jarAB-0.9.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/rx-redis-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar +https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-mustache/0.5.10/minijax-example-mustache-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-petclinic/0.5.10/minijax-example-petclinic-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-security/0.5.10/minijax-example-security-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-ssl/0.5.10/minijax-example-ssl-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-todo-backend/0.5.10/minijax-example-todo-backend-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.10/minijax-example-websocket-0.5.10.jar +https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar +https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar +https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar +https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar +https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.actual b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.actual new file mode 100644 index 00000000000..cbd09bcf554 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.actual @@ -0,0 +1,10 @@ +#select +| src/main/java/com/example/App.java:0:0:0:0 | App | +| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | +xmlFiles +| pom.xml:0:0:0:0 | pom.xml | +| src/main/resources/page.xml:0:0:0:0 | src/main/resources/page.xml | +| src/main/resources/struts.xml:0:0:0:0 | src/main/resources/struts.xml | +propertiesFiles +| src/main/resources/my-app.properties:0:0:0:0 | src/main/resources/my-app.properties | +| test-db/log/ext/javac.properties:0:0:0:0 | test-db/log/ext/javac.properties | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py index 9b787b196e0..bfff65b2fc2 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/test.py @@ -1,8 +1,8 @@ -import sys - from create_database_utils import * from diagnostics_test_utils import * +from buildless_test_utils import * run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}) check_diagnostics() +check_buildless_fetches() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected new file mode 100644 index 00000000000..b3ab098777e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/buildless-fetches.expected @@ -0,0 +1 @@ +http://localhost:9427/snapshots/com/github/my/snapshot/test/snapshottest/1.0-SNAPSHOT/snapshottest-1.0-20230901.050514-100.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py index 55f8f639eae..5fc07d8bd06 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py +++ b/java/ql/integration-tests/all-platforms/java/buildless-snapshot-repository/test.py @@ -1,6 +1,7 @@ import sys from create_database_utils import * +from buildless_test_utils import * import subprocess repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9427"], cwd = "repo") @@ -10,3 +11,4 @@ try: finally: repo_server_process.kill() +check_buildless_fetches() From 4a1fcde649bf5e257d76b16e75fb3f3d34c7fac6 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 23:42:29 +0100 Subject: [PATCH 097/205] Python: abandon synthetic node for `CapturingClosureArgumentNode`. Unless we define it for every single `CallNode`, we need a more sophisticated mutual recursion with the call graph construction. There is built-in support for that, but we are currently not using it. --- .../new/internal/DataFlowDispatch.qll | 23 +++++++++++++++---- .../dataflow/new/internal/DataFlowPublic.qll | 4 +--- .../dataflow/new/internal/VariableCapture.qll | 4 ++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index f1a3bc9464e..c684e090935 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -179,6 +179,8 @@ class ArgumentPosition extends TArgumentPosition { string toString() { this.isSelf() and result = "self" or + this.isLambdaSelf() and result = "lambda self" + or exists(int pos | this.isPositional(pos) and result = "position " + pos) or exists(string name | this.isKeyword(name) and result = "keyword " + name) @@ -1647,23 +1649,34 @@ private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptur * separate node and parameter/argument positions in order to distinguish * "lambda self" from "normal self", as lambdas may also access outer `self` * variables (through variable capture). + * + * TODO: + * We might want a synthetic node here, but currently that incurs problems + * with non-monotonic recursion, because of the use of `resolveCall` in the + * char pred. This may be solvable by using + * `CallGraphConstruction::Make` in staed of + * `CallGraphConstruction::Simple::Make` appropriately. */ -class SynthCaptureArgumentNode extends TSynthCapturingClosureArgumentNode, ArgumentNode { +class CapturingClosureArgumentNode extends CfgNode, ArgumentNode { CallNode callNode; - SynthCaptureArgumentNode() { - this = TSynthCapturingClosureArgumentNode(callNode) and - // We would prefer to put this restriction in the charpred for the branch, - // but that incurs non-monotonic recursion. + CapturingClosureArgumentNode() { + this.getNode() = callNode.getFunction() and exists(Function target | resolveCall(callNode, target, _) | target = any(VariableCapture::CapturedVariable v).getACapturingScope() ) } + override string toString() { result = "Capturing closure argument" } + + // final override Location getLocation() { result = callNode.getLocation() } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { callNode = call.getNode() and pos.isLambdaSelf() } + + /** Gets the `CallNode` that is being passed as an argument to itself. */ + CallNode getCallNode() { result = callNode } } /** Gets a viable run-time target for the call `call`. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 26b357d2388..53103327fc6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -120,9 +120,7 @@ newtype TNode = /** A synthetic node representing the heap of a function. Used for variable capture. */ TSynthCapturingClosureParameterNode(Function f) { f = any(VariableCapture::CapturedVariable v).getACapturingScope() - } or - /** A synthetic node representing the heap of a function. Used for variable capture. */ - TSynthCapturingClosureArgumentNode(CallNode callNode) + } private import semmle.python.internal.CachedStages 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 ae218e95d09..80ae6f005cd 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -188,4 +188,8 @@ private module Debug { Flow::localFlowStep(closureNodeFrom, closureNodeTo) and not flowValueStep(_, closureNodeFrom, closureNodeTo, _) } + + predicate unmappedFlowClosureNode(Flow::ClosureNode closureNode) { + not exists(Node node | closureNode = asClosureNode(node)) + } } From 5de17256488952fe05b480d05497f2fedbf7dee2 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 15 Dec 2023 23:50:29 +0100 Subject: [PATCH 098/205] Python: update class name --- python/ql/consistency-queries/DataFlowConsistency.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index b56bfb2906f..bda82c039e4 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -132,7 +132,7 @@ private module Input implements InputSig { or // The capture argument node will be reused for every call to the same callable. arg = call.getArgument(_) and - arg instanceof SynthCaptureArgumentNode + arg instanceof CapturingClosureArgumentNode } } From b02bac5190818e71ddccdb01cc39e1127b38155a Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 15 Dec 2023 22:55:10 +0000 Subject: [PATCH 099/205] Test run --- .../Security/CWE-643/XPathInjection.expected | 266 +++++++++--------- 1 file changed, 133 insertions(+), 133 deletions(-) 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 dbf177fc5d3..15294abb8de 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -1,149 +1,149 @@ 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:33:14:33:19 | selection of Form | tst.go:33:14:33:35 | call to Get | -| tst.go:33:14:33:35 | call to Get | tst.go:36:23:36:85 | ...+... | -| tst.go:33:14:33:35 | call to Get | tst.go:39:24:39:86 | ...+... | -| tst.go:33:14:33:35 | call to Get | tst.go:42:24:42:82 | ...+... | -| tst.go:47:14:47:19 | selection of Form | tst.go:47:14:47:35 | call to Get | -| tst.go:47:14:47:35 | call to Get | tst.go:50:26:50:84 | ...+... | -| tst.go:47:14:47:35 | call to Get | tst.go:53:29:53:87 | ...+... | -| tst.go:47:14:47:35 | call to Get | tst.go:56:33:56:91 | ...+... | -| tst.go:47:14:47:35 | call to Get | tst.go:59:30:59:88 | ...+... | -| tst.go:64:14:64:19 | selection of Form | tst.go:64:14:64:35 | call to Get | -| tst.go:64:14:64:35 | call to Get | tst.go:67:25:67:83 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:70:28:70:86 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:73:25:73:83 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:76:34:76:92 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:79:32:79:90 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:82:29:82:87 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:85:23:85:85 | ...+... | -| tst.go:64:14:64:35 | call to Get | tst.go:88:22:88:84 | ...+... | -| tst.go:93:14:93:19 | selection of Form | tst.go:93:14:93:35 | call to Get | -| tst.go:93:14:93:35 | call to Get | tst.go:96:26:96:84 | ...+... | -| tst.go:93:14:93:35 | call to Get | tst.go:99:29:99:87 | ...+... | -| tst.go:93:14:93:35 | call to Get | tst.go:102:33:102:91 | ...+... | -| tst.go:93:14:93:35 | call to Get | tst.go:105:30:105:88 | ...+... | -| tst.go:110:14:110:19 | selection of Form | tst.go:110:14:110:35 | call to Get | -| tst.go:110:14:110:35 | call to Get | tst.go:113:25:113:87 | ...+... | -| tst.go:110:14:110:35 | call to Get | tst.go:116:26:116:88 | ...+... | -| tst.go:121:14:121:19 | selection of Form | tst.go:121:14:121:35 | call to Get | -| tst.go:121:14:121:35 | call to Get | tst.go:125:23:125:126 | ...+... | -| tst.go:121:14:121:35 | call to Get | tst.go:128:24:128:127 | ...+... | -| tst.go:121:14:121:35 | call to Get | tst.go:131:27:131:122 | ...+... | +| 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:125:23:125:126 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:128:24:128:127 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:131:27:131:122 | ...+... | -| tst.go:139:14:139:19 | selection of Form | tst.go:139:14:139:35 | call to Get | -| tst.go:139:14:139:35 | call to Get | tst.go:142:27:142:89 | ...+... | -| tst.go:139:14:139:35 | call to Get | tst.go:145:28:145:90 | ...+... | -| tst.go:150:14:150:19 | selection of Form | tst.go:150:14:150:35 | call to Get | -| tst.go:150:14:150:35 | call to Get | tst.go:154:33:154:136 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:157:18:157:121 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:163:31:163:126 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:172:21:172:116 | ...+... | -| tst.go:150:14:150:35 | call to Get | tst.go:181:27:181:122 | ...+... | +| 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:154:33:154:136 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:157:18:157:121 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:163:31:163:126 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:172:21:172:116 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:181:27:181:122 | ...+... | +| 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 | ...+... | 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 | | XPathInjection.go:16:29:16:91 | ...+... | semmle.label | ...+... | -| tst.go:33:14:33:19 | selection of Form | semmle.label | selection of Form | -| tst.go:33:14:33:35 | call to Get | semmle.label | call to Get | -| tst.go:36:23:36:85 | ...+... | semmle.label | ...+... | -| tst.go:39:24:39:86 | ...+... | semmle.label | ...+... | -| tst.go:42:24:42:82 | ...+... | semmle.label | ...+... | -| tst.go:47:14:47:19 | selection of Form | semmle.label | selection of Form | -| tst.go:47:14:47:35 | call to Get | semmle.label | call to Get | -| tst.go:50:26:50:84 | ...+... | semmle.label | ...+... | -| tst.go:53:29:53:87 | ...+... | semmle.label | ...+... | -| tst.go:56:33:56:91 | ...+... | semmle.label | ...+... | -| tst.go:59:30:59:88 | ...+... | semmle.label | ...+... | -| tst.go:64:14:64:19 | selection of Form | semmle.label | selection of Form | -| tst.go:64:14:64:35 | call to Get | semmle.label | call to Get | -| tst.go:67:25:67:83 | ...+... | semmle.label | ...+... | -| tst.go:70:28:70:86 | ...+... | semmle.label | ...+... | -| tst.go:73:25:73:83 | ...+... | semmle.label | ...+... | -| tst.go:76:34:76:92 | ...+... | semmle.label | ...+... | -| tst.go:79:32:79:90 | ...+... | semmle.label | ...+... | -| tst.go:82:29:82:87 | ...+... | semmle.label | ...+... | -| tst.go:85:23:85:85 | ...+... | semmle.label | ...+... | -| tst.go:88:22:88:84 | ...+... | semmle.label | ...+... | -| tst.go:93:14:93:19 | selection of Form | semmle.label | selection of Form | -| tst.go:93:14:93:35 | call to Get | semmle.label | call to Get | -| tst.go:96:26:96:84 | ...+... | semmle.label | ...+... | -| tst.go:99:29:99:87 | ...+... | semmle.label | ...+... | -| tst.go:102:33:102:91 | ...+... | semmle.label | ...+... | -| tst.go:105:30:105:88 | ...+... | semmle.label | ...+... | -| tst.go:110:14:110:19 | selection of Form | semmle.label | selection of Form | -| tst.go:110:14:110:35 | call to Get | semmle.label | call to Get | -| tst.go:113:25:113:87 | ...+... | semmle.label | ...+... | -| tst.go:116:26:116:88 | ...+... | semmle.label | ...+... | -| tst.go:121:14:121:19 | selection of Form | semmle.label | selection of Form | -| tst.go:121:14:121:35 | call to Get | semmle.label | call to Get | +| tst.go:34:14:34:19 | selection of Form | semmle.label | selection of Form | +| tst.go:34:14:34:35 | call to Get | semmle.label | call to Get | +| tst.go:37:23:37:85 | ...+... | semmle.label | ...+... | +| tst.go:40:24:40:86 | ...+... | semmle.label | ...+... | +| tst.go:43:24:43:82 | ...+... | semmle.label | ...+... | +| tst.go:48:14:48:19 | selection of Form | semmle.label | selection of Form | +| tst.go:48:14:48:35 | call to Get | semmle.label | call to Get | +| tst.go:51:26:51:84 | ...+... | semmle.label | ...+... | +| tst.go:54:29:54:87 | ...+... | semmle.label | ...+... | +| tst.go:57:33:57:91 | ...+... | semmle.label | ...+... | +| tst.go:60:30:60:88 | ...+... | semmle.label | ...+... | +| tst.go:65:14:65:19 | selection of Form | semmle.label | selection of Form | +| tst.go:65:14:65:35 | call to Get | semmle.label | call to Get | +| tst.go:68:25:68:83 | ...+... | semmle.label | ...+... | +| tst.go:71:28:71:86 | ...+... | semmle.label | ...+... | +| tst.go:74:25:74:83 | ...+... | semmle.label | ...+... | +| tst.go:77:34:77:92 | ...+... | semmle.label | ...+... | +| tst.go:80:32:80:90 | ...+... | semmle.label | ...+... | +| tst.go:83:29:83:87 | ...+... | semmle.label | ...+... | +| tst.go:86:23:86:85 | ...+... | semmle.label | ...+... | +| tst.go:89:22:89:84 | ...+... | semmle.label | ...+... | +| tst.go:94:14:94:19 | selection of Form | semmle.label | selection of Form | +| tst.go:94:14:94:35 | call to Get | semmle.label | call to Get | +| tst.go:97:26:97:84 | ...+... | semmle.label | ...+... | +| tst.go:100:29:100:87 | ...+... | semmle.label | ...+... | +| tst.go:103:33:103:91 | ...+... | semmle.label | ...+... | +| tst.go:106:30:106:88 | ...+... | semmle.label | ...+... | +| tst.go:111:14:111:19 | selection of Form | semmle.label | selection of Form | +| tst.go:111:14:111:35 | call to Get | semmle.label | call to Get | +| tst.go:114:25:114:87 | ...+... | semmle.label | ...+... | +| tst.go:117:26:117:88 | ...+... | semmle.label | ...+... | | tst.go:122:14:122:19 | selection of Form | semmle.label | selection of Form | | tst.go:122:14:122:35 | call to Get | semmle.label | call to Get | -| tst.go:125:23:125:126 | ...+... | semmle.label | ...+... | -| tst.go:128:24:128:127 | ...+... | semmle.label | ...+... | -| tst.go:131:27:131:122 | ...+... | semmle.label | ...+... | -| tst.go:139:14:139:19 | selection of Form | semmle.label | selection of Form | -| tst.go:139:14:139:35 | call to Get | semmle.label | call to Get | -| tst.go:142:27:142:89 | ...+... | semmle.label | ...+... | -| tst.go:145:28:145:90 | ...+... | semmle.label | ...+... | -| tst.go:150:14:150:19 | selection of Form | semmle.label | selection of Form | -| tst.go:150:14:150:35 | call to Get | semmle.label | call to Get | +| tst.go:123:14:123:19 | selection of Form | semmle.label | selection of Form | +| tst.go:123:14:123:35 | call to Get | semmle.label | call to Get | +| tst.go:126:23:126:126 | ...+... | semmle.label | ...+... | +| tst.go:129:24:129:127 | ...+... | semmle.label | ...+... | +| tst.go:132:27:132:122 | ...+... | semmle.label | ...+... | +| tst.go:140:14:140:19 | selection of Form | semmle.label | selection of Form | +| tst.go:140:14:140:35 | call to Get | semmle.label | call to Get | +| tst.go:143:27:143:89 | ...+... | semmle.label | ...+... | +| tst.go:146:28:146:90 | ...+... | semmle.label | ...+... | | tst.go:151:14:151:19 | selection of Form | semmle.label | selection of Form | | tst.go:151:14:151:35 | call to Get | semmle.label | call to Get | -| tst.go:154:33:154:136 | ...+... | semmle.label | ...+... | -| tst.go:157:18:157:121 | ...+... | semmle.label | ...+... | -| tst.go:163:31:163:126 | ...+... | semmle.label | ...+... | -| tst.go:172:21:172:116 | ...+... | semmle.label | ...+... | -| tst.go:181:27:181:122 | ...+... | semmle.label | ...+... | +| tst.go:152:14:152:19 | selection of Form | semmle.label | selection of Form | +| tst.go:152:14:152:35 | call to Get | semmle.label | call to Get | +| tst.go:155:33:155:136 | ...+... | semmle.label | ...+... | +| tst.go:158:18:158:121 | ...+... | semmle.label | ...+... | +| tst.go:164:31:164:126 | ...+... | semmle.label | ...+... | +| tst.go:173:21:173:116 | ...+... | semmle.label | ...+... | +| tst.go:182:27:182:122 | ...+... | semmle.label | ...+... | subpaths #select | XPathInjection.go:16:29:16:91 | ...+... | XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:16:29:16:91 | ...+... | XPath expression depends on a $@. | XPathInjection.go:13:14:13:19 | selection of Form | user-provided value | -| tst.go:36:23:36:85 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:36:23:36:85 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | -| tst.go:39:24:39:86 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:39:24:39:86 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | -| tst.go:42:24:42:82 | ...+... | tst.go:33:14:33:19 | selection of Form | tst.go:42:24:42:82 | ...+... | XPath expression depends on a $@. | tst.go:33:14:33:19 | selection of Form | user-provided value | -| tst.go:50:26:50:84 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:50:26:50:84 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | -| tst.go:53:29:53:87 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:53:29:53:87 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | -| tst.go:56:33:56:91 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:56:33:56:91 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | -| tst.go:59:30:59:88 | ...+... | tst.go:47:14:47:19 | selection of Form | tst.go:59:30:59:88 | ...+... | XPath expression depends on a $@. | tst.go:47:14:47:19 | selection of Form | user-provided value | -| tst.go:67:25:67:83 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:67:25:67:83 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:70:28:70:86 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:70:28:70:86 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:73:25:73:83 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:73:25:73:83 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:76:34:76:92 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:76:34:76:92 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:79:32:79:90 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:79:32:79:90 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:82:29:82:87 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:82:29:82:87 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:85:23:85:85 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:85:23:85:85 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:88:22:88:84 | ...+... | tst.go:64:14:64:19 | selection of Form | tst.go:88:22:88:84 | ...+... | XPath expression depends on a $@. | tst.go:64:14:64:19 | selection of Form | user-provided value | -| tst.go:96:26:96:84 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:96:26:96:84 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | -| tst.go:99:29:99:87 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:99:29:99:87 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | -| tst.go:102:33:102:91 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:102:33:102:91 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | -| tst.go:105:30:105:88 | ...+... | tst.go:93:14:93:19 | selection of Form | tst.go:105:30:105:88 | ...+... | XPath expression depends on a $@. | tst.go:93:14:93:19 | selection of Form | user-provided value | -| tst.go:113:25:113:87 | ...+... | tst.go:110:14:110:19 | selection of Form | tst.go:113:25:113:87 | ...+... | XPath expression depends on a $@. | tst.go:110:14:110:19 | selection of Form | user-provided value | -| tst.go:116:26:116:88 | ...+... | tst.go:110:14:110:19 | selection of Form | tst.go:116:26:116:88 | ...+... | XPath expression depends on a $@. | tst.go:110:14:110:19 | selection of Form | user-provided value | -| tst.go:125:23:125:126 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:125:23:125:126 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:125:23:125:126 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:125:23:125:126 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | -| tst.go:128:24:128:127 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:128:24:128:127 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:128:24:128:127 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:128:24:128:127 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | -| tst.go:131:27:131:122 | ...+... | tst.go:121:14:121:19 | selection of Form | tst.go:131:27:131:122 | ...+... | XPath expression depends on a $@. | tst.go:121:14:121:19 | selection of Form | user-provided value | -| tst.go:131:27:131:122 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:131:27:131:122 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | -| tst.go:142:27:142:89 | ...+... | tst.go:139:14:139:19 | selection of Form | tst.go:142:27:142:89 | ...+... | XPath expression depends on a $@. | tst.go:139:14:139:19 | selection of Form | user-provided value | -| tst.go:145:28:145:90 | ...+... | tst.go:139:14:139:19 | selection of Form | tst.go:145:28:145:90 | ...+... | XPath expression depends on a $@. | tst.go:139:14:139:19 | selection of Form | user-provided value | -| tst.go:154:33:154:136 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:154:33:154:136 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:154:33:154:136 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:154:33:154:136 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | -| tst.go:157:18:157:121 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:157:18:157:121 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:157:18:157:121 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:157:18:157:121 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | -| tst.go:163:31:163:126 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:163:31:163:126 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:163:31:163:126 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:163:31:163:126 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | -| tst.go:172:21:172:116 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:172:21:172:116 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:172:21:172:116 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:172:21:172:116 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | -| tst.go:181:27:181:122 | ...+... | tst.go:150:14:150:19 | selection of Form | tst.go:181:27:181:122 | ...+... | XPath expression depends on a $@. | tst.go:150:14:150:19 | selection of Form | user-provided value | -| tst.go:181:27:181:122 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:181:27:181:122 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:37:23:37:85 | ...+... | tst.go:34:14:34:19 | selection of Form | tst.go:37:23:37:85 | ...+... | XPath expression depends on a $@. | tst.go:34:14:34:19 | selection of Form | user-provided value | +| tst.go:40:24:40:86 | ...+... | tst.go:34:14:34:19 | selection of Form | tst.go:40:24:40:86 | ...+... | XPath expression depends on a $@. | tst.go:34:14:34:19 | selection of Form | user-provided value | +| tst.go:43:24:43:82 | ...+... | tst.go:34:14:34:19 | selection of Form | tst.go:43:24:43:82 | ...+... | XPath expression depends on a $@. | tst.go:34:14:34:19 | selection of Form | user-provided value | +| tst.go:51:26:51:84 | ...+... | tst.go:48:14:48:19 | selection of Form | tst.go:51:26:51:84 | ...+... | XPath expression depends on a $@. | tst.go:48:14:48:19 | selection of Form | user-provided value | +| tst.go:54:29:54:87 | ...+... | tst.go:48:14:48:19 | selection of Form | tst.go:54:29:54:87 | ...+... | XPath expression depends on a $@. | tst.go:48:14:48:19 | selection of Form | user-provided value | +| tst.go:57:33:57:91 | ...+... | tst.go:48:14:48:19 | selection of Form | tst.go:57:33:57:91 | ...+... | XPath expression depends on a $@. | tst.go:48:14:48:19 | selection of Form | user-provided value | +| tst.go:60:30:60:88 | ...+... | tst.go:48:14:48:19 | selection of Form | tst.go:60:30:60:88 | ...+... | XPath expression depends on a $@. | tst.go:48:14:48:19 | selection of Form | user-provided value | +| tst.go:68:25:68:83 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:68:25:68:83 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:71:28:71:86 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:71:28:71:86 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:74:25:74:83 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:74:25:74:83 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:77:34:77:92 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:77:34:77:92 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:80:32:80:90 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:80:32:80:90 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:83:29:83:87 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:83:29:83:87 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:86:23:86:85 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:86:23:86:85 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:89:22:89:84 | ...+... | tst.go:65:14:65:19 | selection of Form | tst.go:89:22:89:84 | ...+... | XPath expression depends on a $@. | tst.go:65:14:65:19 | selection of Form | user-provided value | +| tst.go:97:26:97:84 | ...+... | tst.go:94:14:94:19 | selection of Form | tst.go:97:26:97:84 | ...+... | XPath expression depends on a $@. | tst.go:94:14:94:19 | selection of Form | user-provided value | +| tst.go:100:29:100:87 | ...+... | tst.go:94:14:94:19 | selection of Form | tst.go:100:29:100:87 | ...+... | XPath expression depends on a $@. | tst.go:94:14:94:19 | selection of Form | user-provided value | +| tst.go:103:33:103:91 | ...+... | tst.go:94:14:94:19 | selection of Form | tst.go:103:33:103:91 | ...+... | XPath expression depends on a $@. | tst.go:94:14:94:19 | selection of Form | user-provided value | +| tst.go:106:30:106:88 | ...+... | tst.go:94:14:94:19 | selection of Form | tst.go:106:30:106:88 | ...+... | XPath expression depends on a $@. | tst.go:94:14:94:19 | selection of Form | user-provided value | +| tst.go:114:25:114:87 | ...+... | tst.go:111:14:111:19 | selection of Form | tst.go:114:25:114:87 | ...+... | XPath expression depends on a $@. | tst.go:111:14:111:19 | selection of Form | user-provided value | +| tst.go:117:26:117:88 | ...+... | tst.go:111:14:111:19 | selection of Form | tst.go:117:26:117:88 | ...+... | XPath expression depends on a $@. | tst.go:111:14:111:19 | selection of Form | user-provided value | +| tst.go:126:23:126:126 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:126:23:126:126 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:126:23:126:126 | ...+... | tst.go:123:14:123:19 | selection of Form | tst.go:126:23:126:126 | ...+... | XPath expression depends on a $@. | tst.go:123:14:123:19 | selection of Form | user-provided value | +| tst.go:129:24:129:127 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:129:24:129:127 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:129:24:129:127 | ...+... | tst.go:123:14:123:19 | selection of Form | tst.go:129:24:129:127 | ...+... | XPath expression depends on a $@. | tst.go:123:14:123:19 | selection of Form | user-provided value | +| tst.go:132:27:132:122 | ...+... | tst.go:122:14:122:19 | selection of Form | tst.go:132:27:132:122 | ...+... | XPath expression depends on a $@. | tst.go:122:14:122:19 | selection of Form | user-provided value | +| tst.go:132:27:132:122 | ...+... | tst.go:123:14:123:19 | selection of Form | tst.go:132:27:132:122 | ...+... | XPath expression depends on a $@. | tst.go:123:14:123:19 | selection of Form | user-provided value | +| tst.go:143:27:143:89 | ...+... | tst.go:140:14:140:19 | selection of Form | tst.go:143:27:143:89 | ...+... | XPath expression depends on a $@. | tst.go:140:14:140:19 | selection of Form | user-provided value | +| tst.go:146:28:146:90 | ...+... | tst.go:140:14:140:19 | selection of Form | tst.go:146:28:146:90 | ...+... | XPath expression depends on a $@. | tst.go:140:14:140:19 | selection of Form | user-provided value | +| tst.go:155:33:155:136 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:155:33:155:136 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:155:33:155:136 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:155:33:155:136 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | +| tst.go:158:18:158:121 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:158:18:158:121 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:158:18:158:121 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:158:18:158:121 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | +| tst.go:164:31:164:126 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:164:31:164:126 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:164:31:164:126 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:164:31:164:126 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | +| tst.go:173:21:173:116 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:173:21:173:116 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:173:21:173:116 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:173:21:173:116 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | +| tst.go:182:27:182:122 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:182:27:182:122 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | +| tst.go:182:27:182:122 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:182:27:182:122 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | From 661ba1ca7b7708b800dca96af85ab939c324a1df Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Sat, 16 Dec 2023 00:33:11 +0100 Subject: [PATCH 100/205] Python: move restriction into branch predicate Otherwise we get loads of nodes with missing locations from the brnach nodes that are not matched. --- .../python/dataflow/new/internal/DataFlowDispatch.qll | 9 ++------- .../python/dataflow/new/internal/DataFlowPublic.qll | 4 +++- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index c684e090935..8df2a7020d3 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1534,11 +1534,7 @@ class SynthCapturingClosureParameterNode extends ParameterNodeImpl, { private Function callable; - SynthCapturingClosureParameterNode() { - this = TSynthCapturingClosureParameterNode(callable) and - // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions - exists(TFunction(callable)) - } + SynthCapturingClosureParameterNode() { this = TSynthCapturingClosureParameterNode(callable) } final Function getCallable() { result = callable } @@ -1661,7 +1657,7 @@ class CapturingClosureArgumentNode extends CfgNode, ArgumentNode { CallNode callNode; CapturingClosureArgumentNode() { - this.getNode() = callNode.getFunction() and + node = callNode.getFunction() and exists(Function target | resolveCall(callNode, target, _) | target = any(VariableCapture::CapturedVariable v).getACapturingScope() ) @@ -1669,7 +1665,6 @@ class CapturingClosureArgumentNode extends CfgNode, ArgumentNode { override string toString() { result = "Capturing closure argument" } - // final override Location getLocation() { result = callNode.getLocation() } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { callNode = call.getNode() and pos.isLambdaSelf() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 53103327fc6..9fd1c8a82d4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -119,7 +119,9 @@ newtype TNode = TSynthCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or /** A synthetic node representing the heap of a function. Used for variable capture. */ TSynthCapturingClosureParameterNode(Function f) { - f = any(VariableCapture::CapturedVariable v).getACapturingScope() + f = any(VariableCapture::CapturedVariable v).getACapturingScope() and + // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions + exists(TFunction(f)) } private import semmle.python.internal.CachedStages From b505778bc8969b78e0299c75a670c1ee3f8c1787 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Sat, 16 Dec 2023 01:03:27 +0100 Subject: [PATCH 101/205] Python: remove non-local steps --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 6d0b69c5c2d..9a1d58b1fb7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -304,7 +304,9 @@ module LocalFlow { // These are not covered by the `AssignmentDefinition`s in the case above, // as they are not necessarily live. nodeFrom.(CfgNode).getNode() = nodeTo.(CfgNode).getNode().(DefinitionNode).getValue() and - nodeTo.asExpr() = any(VariableCapture::CapturedVariable c).getAStore() + nodeTo.asExpr() = any(VariableCapture::CapturedVariable c).getAStore() and + // Exclude assignments to parameters. These are from default values and not local. + not nodeTo instanceof ParameterNode or // With definition // `with f(42) as x:` From 64655a0ea87209e450cd2e2d59b5b538c20b53ce Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Sat, 16 Dec 2023 01:36:46 +0100 Subject: [PATCH 102/205] Python: Use enw class name --- python/ql/test/experimental/dataflow/typetracking/tracked.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index 9416701de0f..4a8dc5d9196 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -27,8 +27,8 @@ module TrackedTest implements TestSig { // We do not wish to annotate scope entry definitions, // as they do not appear in the source code. not e.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() and - // ...same for CaptureNodes - not e instanceof DataFlow::CaptureNode and + // ...same for `SynthCaptureNode`s + not e instanceof DataFlow::SynthCaptureNode and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and From 99b273d308db07c0a15d822b5dbcec6d52ef18b8 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Sat, 16 Dec 2023 12:00:45 +0800 Subject: [PATCH 103/205] Apply suggestions from code review Added suggestion from atorralba. Co-authored-by: Tony Torralba --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 92 +++++++------------ 1 file changed, 33 insertions(+), 59 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 30fbe5bbce9..5e11a6c41d1 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -6,6 +6,7 @@ * potentially leading to arbitrary code execution. * @problem.severity error * @precision high + * @kind problem * @id java/unsafe-reflection * @tags security * experimental @@ -16,55 +17,39 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking -ControlFlowNode getControlFlowNodeSuccessor(ControlFlowNode node) -{ - result = node.getASuccessor() -} MethodAccess getClassLoaderReachableMethodAccess(DataFlow::Node node) { - exists( - MethodAccess maGetClassLoader, ControlFlowNode cfnGetClassLoader, ControlFlowNode cfnSuccessor | + exists(MethodCall maGetClassLoader | maGetClassLoader.getCallee().getName() = "getClassLoader" and maGetClassLoader.getQualifier() = node.asExpr() and - maGetClassLoader.getControlFlowNode() = cfnGetClassLoader and - //cfnGetClassLoader.getASuccessor+() = cfnSuccessor and - getControlFlowNodeSuccessor+(cfnGetClassLoader) = cfnSuccessor and - cfnSuccessor instanceof MethodAccess and - result = cfnSuccessor.(MethodAccess) + result = maGetClassLoader.getControlFlowNode().getASuccessor+() ) } MethodAccess getDangerousReachableMethodAccess(MethodAccess ma) { - (ma.getCallee().hasName("getMethod") or - ma.getCallee().hasName("getDeclaredMethod")) and - (( - exists(MethodAccess maInvoke | - //ma.getControlFlowNode().getASuccessor*() = maInvoke and - getControlFlowNodeSuccessor+(ma.getControlFlowNode()) = maInvoke and - maInvoke.getCallee().hasName("invoke") and - result = maInvoke - ) - ) or - ( - exists(AssignExpr ae, VarAccess va1, VarAccess va2, MethodAccess maInvoke | - ae.getSource() = ma and - ae.getDest() = va1 and - maInvoke.getQualifier() = va2 and - va1.getVariable() = va2.getVariable() and - result = maInvoke - ) - )) + ma.getCallee().hasName(["getMethod", "getDeclaredMethod"]) and + ( + result = ma.getControlFlowNode().getASuccessor*() and + result.getCallee().hasName("invoke") + or + exists(AssignExpr ae | + ae.getSource() = ma and + ae.getDest().(VarAccess).getVariable() = + result.getQualifier().(VarAccess).getVariable() + ) + ) } module SignaturePackageConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - exists(MethodAccess maCheckSignatures | - maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and - maCheckSignatures.getCallee().getName() = "checkSignatures" and - source.asExpr() = maCheckSignatures.getArgument(0) - ) +exists(MethodCall maCheckSignatures | + maCheckSignatures + .getMethod() + .hasQualifiedName("android.content.pm", "PackageManager", "checkSignatures") and + source.asExpr() = maCheckSignatures.getArgument(0) + ) } predicate isSink(DataFlow::Node sink) { @@ -81,31 +66,20 @@ module SigPkgCfg = TaintTracking::Global; predicate isSignaturesChecked(MethodAccess maCreatePackageContext) { - exists(DataFlow::Node source, DataFlow::Node sink | - SigPkgCfg::flow(source, sink) and - sink.asExpr() = maCreatePackageContext.getArgument(0) - ) + SigPkgCfg::flowToExpr(maCreatePackageContext.getArgument(0)) } -from - MethodAccess maCreatePackageContext, - LocalVariableDeclExpr lvdePackageContext, - DataFlow::Node sinkPackageContext, - MethodAccess maGetMethod, - MethodAccess maInvoke +from + MethodCall maCreatePackageContext, LocalVariableDeclExpr lvdePackageContext, + Expr sinkPackageContext, MethodCall maGetMethod, MethodCall maInvoke where - (maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" or - maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.Context") and - maCreatePackageContext.getCallee().getName() = "createPackageContext" and - not isSignaturesChecked(maCreatePackageContext) and - lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and - TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and - getClassLoaderReachableMethodAccess(sinkPackageContext) = maGetMethod and - getDangerousReachableMethodAccess(maGetMethod) = maInvoke -select - lvdePackageContext, - sinkPackageContext, - maGetMethod, - maInvoke, - "Potential arbitary code execution due to class loading without package signature checking." + maCreatePackageContext + .getMethod() + .hasQualifiedName("android.content", ["ContextWrapper", "Context"], "createPackageContext") and + not isSignaturesChecked(maCreatePackageContext) and + lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and + TaintTracking::localExprTaint(lvdePackageContext.getAnAccess(), sinkPackageContext) and + getClassLoaderReachableMethodCall(sinkPackageContext) = maGetMethod and + getGetMethodMethodCall(maGetMethod) = maInvoke +select maInvoke, "Potential arbitary code execution due to $@ without $@ signature checking.", sinkPackageContext, "class loading", sinkPackageContext, "package" From 4a77f45aa6bf8ad51c391b2af7eac641b95f19a3 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Sat, 16 Dec 2023 12:41:39 +0800 Subject: [PATCH 104/205] Minor adjustment to resolve error for codeql version 2.15.4 --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 5e11a6c41d1..1b949716406 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -20,7 +20,7 @@ import semmle.code.java.dataflow.TaintTracking MethodAccess getClassLoaderReachableMethodAccess(DataFlow::Node node) { - exists(MethodCall maGetClassLoader | + exists(MethodAccess maGetClassLoader | maGetClassLoader.getCallee().getName() = "getClassLoader" and maGetClassLoader.getQualifier() = node.asExpr() and result = maGetClassLoader.getControlFlowNode().getASuccessor+() @@ -44,7 +44,7 @@ MethodAccess getDangerousReachableMethodAccess(MethodAccess ma) module SignaturePackageConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { -exists(MethodCall maCheckSignatures | +exists(MethodAccess maCheckSignatures | maCheckSignatures .getMethod() .hasQualifiedName("android.content.pm", "PackageManager", "checkSignatures") and @@ -70,16 +70,16 @@ predicate isSignaturesChecked(MethodAccess maCreatePackageContext) } from - MethodCall maCreatePackageContext, LocalVariableDeclExpr lvdePackageContext, - Expr sinkPackageContext, MethodCall maGetMethod, MethodCall maInvoke + MethodAccess maCreatePackageContext, LocalVariableDeclExpr lvdePackageContext, + DataFlow::Node sinkPackageContext, MethodAccess maGetMethod, MethodAccess maInvoke where maCreatePackageContext .getMethod() .hasQualifiedName("android.content", ["ContextWrapper", "Context"], "createPackageContext") and not isSignaturesChecked(maCreatePackageContext) and lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and - TaintTracking::localExprTaint(lvdePackageContext.getAnAccess(), sinkPackageContext) and - getClassLoaderReachableMethodCall(sinkPackageContext) = maGetMethod and - getGetMethodMethodCall(maGetMethod) = maInvoke + TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and + getClassLoaderReachableMethodAccess(sinkPackageContext) = maGetMethod and + getDangerousReachableMethodAccess(maGetMethod) = maInvoke select maInvoke, "Potential arbitary code execution due to $@ without $@ signature checking.", sinkPackageContext, "class loading", sinkPackageContext, "package" From 0524289a739b353b8822830e38fa0f52e0eeaf7b Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 18 Dec 2023 08:50:10 +0100 Subject: [PATCH 105/205] Update java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql --- .../ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index 2004462942e..25ab8a0c813 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -21,8 +21,8 @@ import InsecureCryptoFlow::PathGraph /** * Get the string value represented by the given expression. * - * If the value is a string literal, return the literal value. - * If the value is a call to `java.util.Properties::getProperty`, return the potential values of the property. + * If the value is a string literal, get the literal value. + * If the value is a call to `java.util.Properties::getProperty`, get the potential values of the property. */ string getStringValue(DataFlow::Node algo) { result = algo.asExpr().(StringLiteral).getValue() From 3897befbe20ed23e5529bebfcd6791ae8e6c9a1d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Dec 2023 09:47:41 +0100 Subject: [PATCH 106/205] C++: Fix joins in 'cpp/wrong-type-format-argument'. --- .../semmle/code/cpp/models/interfaces/FormattingFunction.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll index 66f0a1dae01..7c1ea723193 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll @@ -9,8 +9,9 @@ import semmle.code.cpp.models.interfaces.ArrayFunction import semmle.code.cpp.models.interfaces.Taint +pragma[nomagic] private Type stripTopLevelSpecifiersOnly(Type t) { - result = stripTopLevelSpecifiersOnly(t.(SpecifiedType).getBaseType()) + result = stripTopLevelSpecifiersOnly(pragma[only_bind_out](t.(SpecifiedType).getBaseType())) or result = t and not t instanceof SpecifiedType From 3f843d820c43bb9f76b1f546286edec5bde98618 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Dec 2023 10:02:32 +0100 Subject: [PATCH 107/205] Add telemetry query for known/unknown expression kinds --- csharp/ql/src/Telemetry/ExtractorInformation.ql | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql index c3b97add436..99ef23e8385 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -145,6 +145,16 @@ module AccessTargetStats implements StatsSig { string getNotOkText() { result = "access with missing target" } } +module ExprStats implements StatsSig { + int getNumberOfOk() { result = count(Expr e | not e instanceof @unknown_expr) } + + int getNumberOfNotOk() { result = count(Expr e | e instanceof @unknown_expr) } + + string getOkText() { result = "expressions with known kind" } + + string getNotOkText() { result = "expressions with unknown kind" } +} + module CallTargetStatsReport = ReportStats; module ExprTypeStatsReport = ReportStats; @@ -153,6 +163,8 @@ module TypeMentionTypeStatsReport = ReportStats; module AccessTargetStatsReport = ReportStats; +module ExprStatsReport = ReportStats; + from string key, float value where fileCount(key, value) or @@ -176,5 +188,8 @@ where TypeMentionTypeStatsReport::percentageOfOk(key, value) or AccessTargetStatsReport::numberOfOk(key, value) or AccessTargetStatsReport::numberOfNotOk(key, value) or - AccessTargetStatsReport::percentageOfOk(key, value) + AccessTargetStatsReport::percentageOfOk(key, value) or + ExprStatsReport::numberOfOk(key, value) or + ExprStatsReport::numberOfNotOk(key, value) or + ExprStatsReport::percentageOfOk(key, value) select key, value From de1134ac4827a505bc19959d87efc1cfe6fd8443 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Dec 2023 10:55:11 +0100 Subject: [PATCH 108/205] C#: Add linux-only integration test --- .../standalone_dependencies_non_utf8_filename/Program.cs | 6 ++++++ .../standalone_dependencies_non_utf8_filename/global.json | 5 +++++ .../standalone_dependencies_non_utf8_filename/test.csproj | 8 ++++++++ .../standalone_dependencies_non_utf8_filename/test.py | 3 +++ 4 files changed, 22 insertions(+) create mode 100644 csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/Program.cs create mode 100644 csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/global.json create mode 100644 csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj create mode 100644 csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/Program.cs b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/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/linux-only/standalone_dependencies_non_utf8_filename/global.json b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/global.json new file mode 100644 index 00000000000..48e1c84489a --- /dev/null +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.100" + } +} diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj new file mode 100644 index 00000000000..a269962b552 --- /dev/null +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.csproj @@ -0,0 +1,8 @@ + + + + Exe + net8.0 + + + 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 new file mode 100644 index 00000000000..58074b430b2 --- /dev/null +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) From b10137c24c76cac62af6338310ce36de90d6ab2b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 18 Dec 2023 10:40:10 +0100 Subject: [PATCH 109/205] C#: Pick the first version number encountered. --- csharp/scripts/stubs/helpers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/csharp/scripts/stubs/helpers.py b/csharp/scripts/stubs/helpers.py index 3c6bb8bdd3b..aa82ad3f36b 100644 --- a/csharp/scripts/stubs/helpers.py +++ b/csharp/scripts/stubs/helpers.py @@ -3,6 +3,7 @@ import os import subprocess import json import shutil +import re def run_cmd(cmd, msg="Failed to run command"): print('Running ' + ' '.join(cmd)) @@ -191,7 +192,8 @@ class Generator: if 'dependencies' in data['targets'][target][package]: for dependency in data['targets'][target][package]['dependencies'].keys(): - depVersion = data['targets'][target][package]['dependencies'][dependency] + depString = data['targets'][target][package]['dependencies'][dependency] + depVersion = re.search("(\d+\.\d+\.\d+(-[a-z]+)?)", depString).group(0) pf.write(' \n') From f5c52ac496f01041afdf96e55a561c0cb614af59 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Dec 2023 12:02:33 +0100 Subject: [PATCH 110/205] C++: Fix joins in 'isModifiableAtImpl'. --- .../code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 3 ++- .../ir/dataflow/internal/SsaInternalsCommon.qll | 12 ++++++++---- cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll | 14 +++++++++++++- 3 files changed, 23 insertions(+), 6 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 4e8acfe8187..5221276ccd7 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 @@ -997,7 +997,8 @@ private Type getTypeImpl0(Type t, int indirectionIndex) { * * If `indirectionIndex` cannot be stripped off `t`, an `UnknownType` is returned. */ -bindingset[indirectionIndex] +bindingset[t, indirectionIndex] +pragma[inline_late] Type getTypeImpl(Type t, int indirectionIndex) { result = getTypeImpl0(t, indirectionIndex) or 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 ce3a5fbccd3..e349367fed4 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 @@ -418,6 +418,11 @@ class BaseCallVariable extends AbstractBaseSourceVariable, TBaseCallVariable { } private module IsModifiableAtImpl { + pragma[nomagic] + private predicate isUnderlyingIndirectionType(Type t) { + t = any(Indirection ind).getUnderlyingType() + } + /** * Holds if the `indirectionIndex`'th dereference of a value of type * `cppType` is a type that can be modified (either by modifying the value @@ -445,10 +450,9 @@ private module IsModifiableAtImpl { bindingset[cppType, indirectionIndex] pragma[inline_late] private predicate impl(CppType cppType, int indirectionIndex) { - exists(Type pointerType, Type base, Type t | - pointerType = t.getUnderlyingType() and - pointerType = any(Indirection ind).getUnderlyingType() and - cppType.hasType(t, _) and + exists(Type pointerType, Type base | + isUnderlyingIndirectionType(pointerType) and + cppType.hasUnderlyingType(pointerType, _) and base = getTypeImpl(pointerType, indirectionIndex) | // The value cannot be modified if it has a const specifier, diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll index 315db83a5cc..c1d97d36360 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/CppType.qll @@ -227,7 +227,7 @@ class CppType extends TCppType { predicate hasType(Type type, boolean isGLValue) { none() } /** - * Holds if this type represents the C++ type `type`. If `isGLValue` is `true`, then this type + * Holds if this type represents the C++ unspecified type `type`. If `isGLValue` is `true`, then this type * represents a glvalue of type `type`. Otherwise, it represents a prvalue of type `type`. */ final predicate hasUnspecifiedType(Type type, boolean isGLValue) { @@ -236,6 +236,18 @@ class CppType extends TCppType { type = specifiedType.getUnspecifiedType() ) } + + /** + * Holds if this type represents the C++ type `type` (after resolving + * typedefs). If `isGLValue` is `true`, then this type represents a glvalue + * of type `type`. Otherwise, it represents a prvalue of type `type`. + */ + final predicate hasUnderlyingType(Type type, boolean isGLValue) { + exists(Type typedefType | + this.hasType(typedefType, isGLValue) and + type = typedefType.getUnderlyingType() + ) + } } /** From 1a8857dab8bcda3391101fdeeb1e3672ba64feda Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Dec 2023 12:32:24 +0100 Subject: [PATCH 111/205] Create problematic additional file in integration test --- .../standalone_dependencies_non_utf8_filename/test.py | 5 +++++ 1 file changed, 5 insertions(+) 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 58074b430b2..2a7f375abba 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 @@ -1,3 +1,8 @@ from create_database_utils import * +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"]) From 452b8d22a36ec54197903fa6e9a124b378904777 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 13 Dec 2023 15:32:06 +0100 Subject: [PATCH 112/205] Bazel/CMake: use bazelisk to use correct bazel version (cherry picked from commit 819fc52854993c9fcbafe80a11a5637208ca9a7e) --- misc/bazel/cmake/setup.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/misc/bazel/cmake/setup.cmake b/misc/bazel/cmake/setup.cmake index 81e5aeeb8b5..79314d76f85 100644 --- a/misc/bazel/cmake/setup.cmake +++ b/misc/bazel/cmake/setup.cmake @@ -5,8 +5,12 @@ if (CREATE_COMPILATION_DATABASE_LINK) set(CMAKE_EXPORT_COMPILE_COMMANDS 1) endif () +if (NOT DEFINED BAZEL_BIN) + set(BAZEL_BIN "bazelisk") +endif () + macro(bazel) - execute_process(COMMAND bazel ${ARGN} + execute_process(COMMAND ${BAZEL_BIN} ${ARGN} COMMAND_ERROR_IS_FATAL ANY OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) From a776132a10cdeff479ef051d07f0daf313dbd920 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 18 Dec 2023 13:05:17 +0100 Subject: [PATCH 113/205] Python: Deprecate more predicates --- .../new/internal/TypeTrackerSpecific.qll | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll index 298153490b2..c31cfeb5331 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackerSpecific.qll @@ -4,9 +4,7 @@ private import python private import semmle.python.dataflow.new.internal.DataFlowPublic as DataFlowPublic -private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate private import TypeTrackingImpl as TypeTrackingImpl -import semmle.python.internal.CachedStages deprecated class Node = DataFlowPublic::Node; @@ -44,15 +42,16 @@ deprecated predicate compatibleContents( storeContent = loadContent } -predicate simpleLocalFlowStep = TypeTrackingImpl::TypeTrackingInput::simpleLocalSmallStep/2; +deprecated predicate simpleLocalFlowStep = + TypeTrackingImpl::TypeTrackingInput::simpleLocalSmallStep/2; -predicate jumpStep = TypeTrackingImpl::TypeTrackingInput::jumpStep/2; +deprecated predicate jumpStep = TypeTrackingImpl::TypeTrackingInput::jumpStep/2; /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which may depend on the call graph. */ deprecated predicate levelStepCall(Node nodeFrom, Node nodeTo) { none() } /** Holds if there is a level step from `nodeFrom` to `nodeTo`, which does not depend on the call graph. */ -predicate levelStepNoCall = TypeTrackingImpl::TypeTrackingInput::levelStepNoCall/2; +deprecated predicate levelStepNoCall = TypeTrackingImpl::TypeTrackingInput::levelStepNoCall/2; /** * Holds if `nodeFrom` steps to `nodeTo` by being passed as a parameter in a call. @@ -61,25 +60,25 @@ predicate levelStepNoCall = TypeTrackingImpl::TypeTrackingInput::levelStepNoCall * recursion (or, at best, terrible performance), since identifying calls to library * methods is done using API graphs (which uses type tracking). */ -predicate callStep = TypeTrackingImpl::TypeTrackingInput::callStep/2; +deprecated predicate callStep = TypeTrackingImpl::TypeTrackingInput::callStep/2; /** Holds if `nodeFrom` steps to `nodeTo` by being returned from a call. */ -predicate returnStep = TypeTrackingImpl::TypeTrackingInput::returnStep/2; +deprecated predicate returnStep = TypeTrackingImpl::TypeTrackingInput::returnStep/2; /** * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ -predicate basicStoreStep = TypeTrackingImpl::TypeTrackingInput::storeStep/3; +deprecated predicate basicStoreStep = TypeTrackingImpl::TypeTrackingInput::storeStep/3; /** * Holds if `nodeTo` is the result of accessing the `content` content of `nodeFrom`. */ -predicate basicLoadStep = TypeTrackingImpl::TypeTrackingInput::loadStep/3; +deprecated predicate basicLoadStep = TypeTrackingImpl::TypeTrackingInput::loadStep/3; /** * Holds if the `loadContent` of `nodeFrom` is stored in the `storeContent` of `nodeTo`. */ -predicate basicLoadStoreStep = TypeTrackingImpl::TypeTrackingInput::loadStoreStep/4; +deprecated predicate basicLoadStoreStep = TypeTrackingImpl::TypeTrackingInput::loadStoreStep/4; /** * Holds if type-tracking should step from `nodeFrom` to `nodeTo` but block flow of contents matched by `filter` through here. From b14d26ab620e74549ec453511c81616bc5cc1f0b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Dec 2023 14:10:56 +0100 Subject: [PATCH 114/205] C#: Exclude not existing or problematic files from extraction --- .../DependencyManager.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 1b8ed7c3366..012cc9eb66c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -439,6 +439,25 @@ namespace Semmle.Extraction.CSharp.DependencyFetching files = files.Where(f => !f.FullName.StartsWith(options.DotNetPath, StringComparison.OrdinalIgnoreCase)); } + files = files.Where(f => + { + try + { + if (f.Exists) + { + return true; + } + + progressMonitor.Log(Severity.Warning, $"File {f.FullName} could not be processed."); + return false; + } + catch (Exception ex) + { + progressMonitor.Log(Severity.Warning, $"File {f.FullName} could not be processed: {ex.Message}"); + return false; + } + }); + files = new FilePathFilter(sourceDir, progressMonitor).Filter(files); return files; } From 6cbf8abf590547e714ada473de66cdeba5cfb010 Mon Sep 17 00:00:00 2001 From: Alex Denisov Date: Mon, 18 Dec 2023 12:48:34 +0100 Subject: [PATCH 115/205] Swift: do not trace codesign binary --- swift/tools/tracing-config.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/swift/tools/tracing-config.lua b/swift/tools/tracing-config.lua index 06be53bc33c..b52c5f03a45 100644 --- a/swift/tools/tracing-config.lua +++ b/swift/tools/tracing-config.lua @@ -119,6 +119,8 @@ function RegisterExtractorPack(id) SwiftMatcher, CreatePatternMatcher({ '^lsregister$' }, MatchCompilerName, nil, { trace = false }), + CreatePatternMatcher({ '^codesign$' }, MatchCompilerName, nil, + { trace = false }), CreatePatternMatcher({ '^sandbox%-exec$' }, MatchCompilerName, nil, { trace = false }), } From f9c6d5e8082ebfdc5616893bc5b552f436c3f9b2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 18 Dec 2023 14:39:02 +0100 Subject: [PATCH 116/205] Ensure files are only enumerated once --- .../DependencyManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 012cc9eb66c..7412c3ba340 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -72,7 +72,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching this.progressMonitor.FindingFiles(srcDir); - var allFiles = GetAllFiles(); + var allFiles = GetAllFiles().ToList(); var binaryFileExtensions = new HashSet(new[] { ".dll", ".exe" }); // TODO: add more binary file extensions. var allNonBinaryFiles = allFiles.Where(f => !binaryFileExtensions.Contains(f.Extension.ToLowerInvariant())).ToList(); var smallNonBinaryFiles = allNonBinaryFiles.SelectSmallFiles(progressMonitor).SelectFileNames(); From aafde4d18d0ff4864e2e192af4e01a3057ceba7a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 18 Dec 2023 13:46:12 +0100 Subject: [PATCH 117/205] C++: Fix joins in 'cpp/use-after-free'. --- cpp/ql/src/Critical/UseAfterFree.ql | 44 +++++++++++++++++------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/cpp/ql/src/Critical/UseAfterFree.ql b/cpp/ql/src/Critical/UseAfterFree.ql index 228761de5c0..4b27369074c 100644 --- a/cpp/ql/src/Critical/UseAfterFree.ql +++ b/cpp/ql/src/Critical/UseAfterFree.ql @@ -101,35 +101,43 @@ module ParameterSinks { ) } - private CallInstruction getAnAlwaysReachedCallInstruction(IRFunction f) { - result.getBlock().postDominates(f.getEntryBlock()) + private CallInstruction getAnAlwaysReachedCallInstruction() { + exists(IRFunction f | result.getBlock().postDominates(f.getEntryBlock())) } pragma[nomagic] - predicate callHasTargetAndArgument(Function f, int i, CallInstruction call, Instruction argument) { - call.getStaticCallTarget() = f and - call.getArgument(i) = argument + private predicate callHasTargetAndArgument(Function f, int i, Instruction argument) { + exists(CallInstruction call | + call.getStaticCallTarget() = f and + call.getArgument(i) = argument and + call = getAnAlwaysReachedCallInstruction() + ) } pragma[nomagic] - predicate initializeParameterInFunction(Function f, int i, InitializeParameterInstruction init) { - pragma[only_bind_out](init.getEnclosingFunction()) = f and - init.hasIndex(i) + private predicate initializeParameterInFunction(Function f, int i) { + exists(InitializeParameterInstruction init | + pragma[only_bind_out](init.getEnclosingFunction()) = f and + init.hasIndex(i) and + init = getAnAlwaysDereferencedParameter() + ) + } + + pragma[nomagic] + private predicate alwaysDereferencedArgumentHasValueNumber(ValueNumber vn) { + exists(int i, Function f, Instruction argument | + callHasTargetAndArgument(f, i, argument) and + initializeParameterInFunction(pragma[only_bind_into](f), pragma[only_bind_into](i)) and + vn.getAnInstruction() = argument + ) } InitializeParameterInstruction getAnAlwaysDereferencedParameter() { result = getAnAlwaysDereferencedParameter0() or - exists( - CallInstruction call, int i, InitializeParameterInstruction p, Instruction argument, - Function f - | - callHasTargetAndArgument(f, i, call, argument) and - initializeParameterInFunction(f, i, p) and - p = getAnAlwaysDereferencedParameter() and - result = - pragma[only_bind_out](pragma[only_bind_into](valueNumber(argument)).getAnInstruction()) and - call = getAnAlwaysReachedCallInstruction(_) + exists(ValueNumber vn | + alwaysDereferencedArgumentHasValueNumber(vn) and + vn.getAnInstruction() = result ) } } From d6544cc5505f9cac8f4f2477e035cf2b9755f84d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 15:24:49 +0100 Subject: [PATCH 118/205] Python: remove consistency exclusion --- python/ql/consistency-queries/DataFlowConsistency.ql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index bda82c039e4..f0a0d0356ca 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -129,10 +129,6 @@ private module Input implements InputSig { arg = other.getArgument(any(ArgumentPosition p | p.isSelf())) and other.getNode().getScope() = f ) - or - // The capture argument node will be reused for every call to the same callable. - arg = call.getArgument(_) and - arg instanceof CapturingClosureArgumentNode } } From c88d686ce492694fc36874552234c11999c9bd1a Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 21:37:52 +0100 Subject: [PATCH 119/205] Python: move `SynthCapturePostUpdateNode` next to `SynthCaptureNode` --- .../python/dataflow/new/internal/DataFlowDispatch.qll | 11 ----------- .../python/dataflow/new/internal/DataFlowPublic.qll | 11 +++++++++++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 8df2a7020d3..2549aa268d8 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1626,17 +1626,6 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl override Node getPreUpdateNode() { result = pre } } -private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptureNode { - private SynthCaptureNode pre; - - SynthCapturePostUpdateNode() { - VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), - pre.getSynthesizedCaptureNode()) - } - - override Node getPreUpdateNode() { result = pre } -} - /** * The value of a closure itself being passed to the funciton, viewed as a node in a data * flow graph. diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 9fd1c8a82d4..2c295e42fbc 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -498,6 +498,17 @@ class SynthCaptureNode extends Node, TSynthCaptureNode { override string toString() { result = cn.toString() } } +private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptureNode { + private SynthCaptureNode pre; + + SynthCapturePostUpdateNode() { + VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), + pre.getSynthesizedCaptureNode()) + } + + override Node getPreUpdateNode() { result = pre } +} + /** * Gets a node that controls whether other nodes are evaluated. * From bf1ad236786a24bdf18bac03f30c2e530037215e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:00:13 +0100 Subject: [PATCH 120/205] Python: add comments - on debug predicates - on JS implementation --- .../python/dataflow/new/internal/VariableCapture.qll | 8 ++++++++ 1 file changed, 8 insertions(+) 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 80ae6f005cd..e234bb29e14 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -5,6 +5,11 @@ private import DataFlowPublic private import semmle.python.dataflow.new.internal.DataFlowPrivate private import codeql.dataflow.VariableCapture as Shared +// Note: The Javascript implementation (on the branch https://github.com/github/codeql/pull/14412) +// had some tweaks related to performance. See these two commits: +// - JS: Capture flow: https://github.com/github/codeql/pull/14412/commits/7bcf8b858babfea0a3e36ce61145954c249e13ac +// - JS: Disallow consecutive captured contents: https://github.com/github/codeql/pull/14412/commits/46e4cdc6232604ea7f58138a336d5a222fad8567 +// The first is the main implementation, the second is a performance motivated restriction. private module CaptureInput implements Shared::InputSig { private import python as PY @@ -142,6 +147,9 @@ predicate valueStep(Node nodeFrom, Node nodeTo) { /** * Provides predicates to understand the behaviour of the variable capture * library instantiation on Python code bases. + * + * The predicates in here are meant to be run by quick-eval on databases of + * interest. The `unmapped*`-predicates should ideally be empty. */ private module Debug { predicate flowStoreStep( From 25c83dc70df7fb646ff855ecb19802113d0b5360 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:15:37 +0100 Subject: [PATCH 121/205] Python: adjust comment --- .../python/dataflow/new/internal/DataFlowDispatch.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 2549aa268d8..b691aabb81e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1521,7 +1521,7 @@ abstract class ParameterNodeImpl extends Node { } /** - * The value of a closure itself at function entry, viewed as a node in a data + * The value of a closure itself at function entry, viewed as a node in the data * flow graph. * * This is used for tracking flow through captured variables, and we use @@ -1627,8 +1627,8 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl } /** - * The value of a closure itself being passed to the funciton, viewed as a node in a data - * flow graph. + * The value of a closure itself being passed to the funciton, viewed as a + * node in the data flow graph. * * This is used for tracking flow through captured variables, and we use a * separate node and parameter/argument positions in order to distinguish From 7324177786b0e81ae57bcf70e12cd57165571bc1 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:20:28 +0100 Subject: [PATCH 122/205] Python: address QL alerts --- .../semmle/python/dataflow/new/internal/VariableCapture.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e234bb29e14..a6e34374c64 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -145,7 +145,7 @@ predicate valueStep(Node nodeFrom, Node nodeTo) { } /** - * Provides predicates to understand the behaviour of the variable capture + * Provides predicates to understand the behavior of the variable capture * library instantiation on Python code bases. * * The predicates in here are meant to be run by quick-eval on databases of @@ -198,6 +198,6 @@ private module Debug { } predicate unmappedFlowClosureNode(Flow::ClosureNode closureNode) { - not exists(Node node | closureNode = asClosureNode(node)) + not closureNode = asClosureNode(_) } } From 19af35b29aed102805842fc137af22261b416d45 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 18 Dec 2023 21:22:44 +0000 Subject: [PATCH 123/205] Release preparation for version 2.15.5 --- cpp/ql/lib/CHANGELOG.md | 4 ++++ cpp/ql/lib/change-notes/released/0.12.2.md | 3 +++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 4 ++++ cpp/ql/src/change-notes/released/0.9.1.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../campaigns/Solorigate/lib/change-notes/released/1.7.5.md | 3 +++ csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../campaigns/Solorigate/src/change-notes/released/1.7.5.md | 3 +++ csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 4 ++++ csharp/ql/lib/change-notes/released/0.8.5.md | 3 +++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ++++ csharp/ql/src/change-notes/released/0.8.5.md | 3 +++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ go/ql/consistency-queries/change-notes/released/0.0.4.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.5.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.5.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/automodel/src/CHANGELOG.md | 4 ++++ java/ql/automodel/src/change-notes/released/0.0.10.md | 3 +++ java/ql/automodel/src/codeql-pack.release.yml | 2 +- java/ql/automodel/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 ++++ java/ql/lib/change-notes/released/0.8.5.md | 3 +++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/0.8.5.md | 3 +++ 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.5.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.5.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.5.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 4 ++++ python/ql/lib/change-notes/released/0.11.5.md | 3 +++ 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.5.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 4 ++++ ruby/ql/lib/change-notes/released/0.8.5.md | 3 +++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/0.8.5.md | 3 +++ 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.5.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.5.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.5.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ shared/rangeanalysis/change-notes/released/0.0.4.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.5.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.5.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ shared/threat-models/change-notes/released/0.0.4.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.5.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ shared/typetracking/change-notes/released/0.2.5.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.5.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.5.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.5.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.5.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.5.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 132 files changed, 297 insertions(+), 66 deletions(-) create mode 100644 cpp/ql/lib/change-notes/released/0.12.2.md create mode 100644 cpp/ql/src/change-notes/released/0.9.1.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.5.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.5.md create mode 100644 csharp/ql/lib/change-notes/released/0.8.5.md create mode 100644 csharp/ql/src/change-notes/released/0.8.5.md create mode 100644 go/ql/consistency-queries/change-notes/released/0.0.4.md create mode 100644 go/ql/lib/change-notes/released/0.7.5.md create mode 100644 go/ql/src/change-notes/released/0.7.5.md create mode 100644 java/ql/automodel/src/change-notes/released/0.0.10.md create mode 100644 java/ql/lib/change-notes/released/0.8.5.md create mode 100644 java/ql/src/change-notes/released/0.8.5.md create mode 100644 javascript/ql/lib/change-notes/released/0.8.5.md create mode 100644 javascript/ql/src/change-notes/released/0.8.5.md create mode 100644 misc/suite-helpers/change-notes/released/0.7.5.md create mode 100644 python/ql/lib/change-notes/released/0.11.5.md create mode 100644 python/ql/src/change-notes/released/0.9.5.md create mode 100644 ruby/ql/lib/change-notes/released/0.8.5.md create mode 100644 ruby/ql/src/change-notes/released/0.8.5.md create mode 100644 shared/controlflow/change-notes/released/0.1.5.md create mode 100644 shared/dataflow/change-notes/released/0.1.5.md create mode 100644 shared/mad/change-notes/released/0.2.5.md create mode 100644 shared/rangeanalysis/change-notes/released/0.0.4.md create mode 100644 shared/regex/change-notes/released/0.2.5.md create mode 100644 shared/ssa/change-notes/released/0.2.5.md create mode 100644 shared/threat-models/change-notes/released/0.0.4.md create mode 100644 shared/tutorial/change-notes/released/0.2.5.md create mode 100644 shared/typetracking/change-notes/released/0.2.5.md create mode 100644 shared/typos/change-notes/released/0.2.5.md create mode 100644 shared/util/change-notes/released/0.2.5.md create mode 100644 shared/yaml/change-notes/released/0.2.5.md create mode 100644 swift/ql/lib/change-notes/released/0.3.5.md create mode 100644 swift/ql/src/change-notes/released/0.3.5.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 39e7da98714..1466e7ce645 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.2 + +No user-facing changes. + ## 0.12.1 ### New Features diff --git a/cpp/ql/lib/change-notes/released/0.12.2.md b/cpp/ql/lib/change-notes/released/0.12.2.md new file mode 100644 index 00000000000..4b3a79937f7 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.2.md @@ -0,0 +1,3 @@ +## 0.12.2 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 58783ccb26c..8baa46a6150 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.1 +lastReleaseVersion: 0.12.2 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 119831d6471..b2da7fcf6a2 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.2-dev +version: 0.12.2 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index c771f8bd03e..e1485b43676 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.1 + +No user-facing changes. + ## 0.9.0 ### Breaking Changes diff --git a/cpp/ql/src/change-notes/released/0.9.1.md b/cpp/ql/src/change-notes/released/0.9.1.md new file mode 100644 index 00000000000..5ab7a1ee037 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.1.md @@ -0,0 +1,3 @@ +## 0.9.1 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 8b9fc185202..6789dcd18b7 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.0 +lastReleaseVersion: 0.9.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index d6adec1bbda..ab0b9d07d1f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.1-dev +version: 0.9.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index cebd2a51e84..881ef60c7c7 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.5 + +No user-facing changes. + ## 1.7.4 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.5.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.5.md new file mode 100644 index 00000000000..f17d9279e0d --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.5.md @@ -0,0 +1,3 @@ +## 1.7.5 + +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 f4f3a4d5120..83aebd7c12a 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.4 +lastReleaseVersion: 1.7.5 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index affb356bca6..c6fb31e2c4b 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.5-dev +version: 1.7.5 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index cebd2a51e84..881ef60c7c7 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.5 + +No user-facing changes. + ## 1.7.4 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.5.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.5.md new file mode 100644 index 00000000000..f17d9279e0d --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.5.md @@ -0,0 +1,3 @@ +## 1.7.5 + +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 f4f3a4d5120..83aebd7c12a 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.4 +lastReleaseVersion: 1.7.5 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 0a318269550..1d740da39fe 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.5-dev +version: 1.7.5 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 09826df60f4..fe7cf2a05a5 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/0.8.5.md b/csharp/ql/lib/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 8cc4f6e56a9..eb8b2f01371 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.5-dev +version: 0.8.5 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 06f83675355..0318549742f 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/0.8.5.md b/csharp/ql/src/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 8c65f6ad44c..24380e49ee9 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.5-dev +version: 0.8.5 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index d7831747b12..4ffbff1e0c4 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4 + +No user-facing changes. + ## 0.0.3 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.4.md b/go/ql/consistency-queries/change-notes/released/0.0.4.md new file mode 100644 index 00000000000..eefe286a4d8 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.4.md @@ -0,0 +1,3 @@ +## 0.0.4 + +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 a24b693d1e7..ec411a674bc 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.3 +lastReleaseVersion: 0.0.4 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index c9ca3e11a00..58facab8d99 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.4-dev +version: 0.0.4 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index e457697b68b..87ef5eb3443 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.5 + +No user-facing changes. + ## 0.7.4 ### Bug Fixes diff --git a/go/ql/lib/change-notes/released/0.7.5.md b/go/ql/lib/change-notes/released/0.7.5.md new file mode 100644 index 00000000000..b2759d5bd80 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.5.md @@ -0,0 +1,3 @@ +## 0.7.5 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index e388f34b4ec..b5108ee0bda 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.4 +lastReleaseVersion: 0.7.5 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 56ef80ceacf..25b59f9f274 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.5-dev +version: 0.7.5 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index b1ec0f86f3a..504a9aefdde 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.5 + +No user-facing changes. + ## 0.7.4 No user-facing changes. diff --git a/go/ql/src/change-notes/released/0.7.5.md b/go/ql/src/change-notes/released/0.7.5.md new file mode 100644 index 00000000000..b2759d5bd80 --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.5.md @@ -0,0 +1,3 @@ +## 0.7.5 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index e388f34b4ec..b5108ee0bda 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.4 +lastReleaseVersion: 0.7.5 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 06a786b8ee9..7503037da91 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.5-dev +version: 0.7.5 groups: - go - queries diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index 0ca6c4f537e..7af25d5379b 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.10 + +No user-facing changes. + ## 0.0.9 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.10.md b/java/ql/automodel/src/change-notes/released/0.0.10.md new file mode 100644 index 00000000000..22391080fd4 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.10.md @@ -0,0 +1,3 @@ +## 0.0.10 + +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 ecdd64fbab8..b740014e5ae 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.9 +lastReleaseVersion: 0.0.10 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 046ab6531f2..e857df9d3de 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.10-dev +version: 0.0.10 groups: - java - automodel diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 945b167bec6..bc07396977a 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/released/0.8.5.md b/java/ql/lib/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index f5a7a85efe2..aa3602f3bd3 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.5-dev +version: 0.8.5 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 3559cb95b4a..58799c443cc 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 No user-facing changes. diff --git a/java/ql/src/change-notes/released/0.8.5.md b/java/ql/src/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index b37f21a5f23..837a5344e62 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.5-dev +version: 0.8.5 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index b21f356f7e7..7a9d08a50f2 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/0.8.5.md b/javascript/ql/lib/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index f210c4ba9f9..df4c1e6a29d 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.5-dev +version: 0.8.5 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 2911e1f07cc..1af40bc77b5 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 ### Minor Analysis Improvements diff --git a/javascript/ql/src/change-notes/released/0.8.5.md b/javascript/ql/src/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/javascript/ql/src/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 759a1684b19..ea41e8b9830 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.5-dev +version: 0.8.5 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index fe73a080afb..4048fb51cd9 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.5 + +No user-facing changes. + ## 0.7.4 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/0.7.5.md b/misc/suite-helpers/change-notes/released/0.7.5.md new file mode 100644 index 00000000000..b2759d5bd80 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/0.7.5.md @@ -0,0 +1,3 @@ +## 0.7.5 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index e388f34b4ec..b5108ee0bda 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.4 +lastReleaseVersion: 0.7.5 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 128772ab76a..76dbe885d3e 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.5-dev +version: 0.7.5 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index dfe7f2559b0..8a570da513f 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.5 + +No user-facing changes. + ## 0.11.4 ### Minor Analysis Improvements diff --git a/python/ql/lib/change-notes/released/0.11.5.md b/python/ql/lib/change-notes/released/0.11.5.md new file mode 100644 index 00000000000..9d83d989db1 --- /dev/null +++ b/python/ql/lib/change-notes/released/0.11.5.md @@ -0,0 +1,3 @@ +## 0.11.5 + +No user-facing changes. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index e8259bcc88e..ca91bf6fce9 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.11.4 +lastReleaseVersion: 0.11.5 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 5e14334de1f..11141cd9c48 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.5-dev +version: 0.11.5 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 5006a5b874f..175f47861b9 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.5 + +No user-facing changes. + ## 0.9.4 No user-facing changes. diff --git a/python/ql/src/change-notes/released/0.9.5.md b/python/ql/src/change-notes/released/0.9.5.md new file mode 100644 index 00000000000..f53e894fac2 --- /dev/null +++ b/python/ql/src/change-notes/released/0.9.5.md @@ -0,0 +1,3 @@ +## 0.9.5 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 694907ca221..460240feaff 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.4 +lastReleaseVersion: 0.9.5 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 760131f4a63..b522ec36bd7 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.5-dev +version: 0.9.5 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 491318ac4f4..0641b60a508 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/released/0.8.5.md b/ruby/ql/lib/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 64919a81449..bdca7378b7e 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.5-dev +version: 0.8.5 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 65c057c8672..0e589135e41 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.8.5 + +No user-facing changes. + ## 0.8.4 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/0.8.5.md b/ruby/ql/src/change-notes/released/0.8.5.md new file mode 100644 index 00000000000..cb2a467c35b --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.8.5.md @@ -0,0 +1,3 @@ +## 0.8.5 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 32eff3dc9f3..cbe6bc6b7c6 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.4 +lastReleaseVersion: 0.8.5 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index ae6ffff8506..b463a011365 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.5-dev +version: 0.8.5 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 2c5050cea76..d14dc358baf 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.5 + +No user-facing changes. + ## 0.1.4 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/0.1.5.md b/shared/controlflow/change-notes/released/0.1.5.md new file mode 100644 index 00000000000..83cd9c5ff46 --- /dev/null +++ b/shared/controlflow/change-notes/released/0.1.5.md @@ -0,0 +1,3 @@ +## 0.1.5 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index e8ee3af8ef9..157cff8108d 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.4 +lastReleaseVersion: 0.1.5 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 347326476a8..efbbd83b8bc 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.5-dev +version: 0.1.5 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index d932505cd28..39444bf389a 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.5 + +No user-facing changes. + ## 0.1.4 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/0.1.5.md b/shared/dataflow/change-notes/released/0.1.5.md new file mode 100644 index 00000000000..83cd9c5ff46 --- /dev/null +++ b/shared/dataflow/change-notes/released/0.1.5.md @@ -0,0 +1,3 @@ +## 0.1.5 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index e8ee3af8ef9..157cff8108d 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.4 +lastReleaseVersion: 0.1.5 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index acb359071e4..9b65dd05108 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.5-dev +version: 0.1.5 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 9dd0f451a13..8fdbd159d53 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/mad/change-notes/released/0.2.5.md b/shared/mad/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/mad/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index daa8bc58f66..9ff6b358ca7 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 4992dcad49f..a66789ca7f5 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4 + +No user-facing changes. + ## 0.0.3 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/0.0.4.md b/shared/rangeanalysis/change-notes/released/0.0.4.md new file mode 100644 index 00000000000..eefe286a4d8 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/0.0.4.md @@ -0,0 +1,3 @@ +## 0.0.4 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index a24b693d1e7..ec411a674bc 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.3 +lastReleaseVersion: 0.0.4 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 369d092a98f..7e6b2dddf36 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.4-dev +version: 0.0.4 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index c753fbda232..3cf342c9f29 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/regex/change-notes/released/0.2.5.md b/shared/regex/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/regex/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 4567e48d59d..63d2288520c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 1cd20a42e1b..d1f2a74fec0 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/ssa/change-notes/released/0.2.5.md b/shared/ssa/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/ssa/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 5ffdf021ecb..77667245f41 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index d7831747b12..4ffbff1e0c4 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4 + +No user-facing changes. + ## 0.0.3 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/0.0.4.md b/shared/threat-models/change-notes/released/0.0.4.md new file mode 100644 index 00000000000..eefe286a4d8 --- /dev/null +++ b/shared/threat-models/change-notes/released/0.0.4.md @@ -0,0 +1,3 @@ +## 0.0.4 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index a24b693d1e7..ec411a674bc 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.3 +lastReleaseVersion: 0.0.4 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index e96d6cf5dc4..6d16327a14d 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.4-dev +version: 0.0.4 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 9fa52e48055..a0bfc02bcbf 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/0.2.5.md b/shared/tutorial/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/tutorial/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index f086872a3a9..98fbdc74270 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.5-dev +version: 0.2.5 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index f675bfa9db2..2236b1a2d5d 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/0.2.5.md b/shared/typetracking/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/typetracking/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 150d6da930c..ee6ff86a582 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 41d6cb49505..9db98dbb2d0 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/typos/change-notes/released/0.2.5.md b/shared/typos/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/typos/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index a67d0933613..e3349bd478d 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index f17102565c0..a1df29447d5 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/util/change-notes/released/0.2.5.md b/shared/util/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/util/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ac7cf912e4d..9509e229fc5 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true dependencies: null diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index dc0dbe801be..aa342042f47 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.5 + +No user-facing changes. + ## 0.2.4 No user-facing changes. diff --git a/shared/yaml/change-notes/released/0.2.5.md b/shared/yaml/change-notes/released/0.2.5.md new file mode 100644 index 00000000000..5837551476f --- /dev/null +++ b/shared/yaml/change-notes/released/0.2.5.md @@ -0,0 +1,3 @@ +## 0.2.5 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 7f1e3841dcd..211454ed306 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.4 +lastReleaseVersion: 0.2.5 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index c3bafd4ad74..69b7dbc1335 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.5-dev +version: 0.2.5 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index a74ccb93732..16d44561346 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.5 + +No user-facing changes. + ## 0.3.4 ### Minor Analysis Improvements diff --git a/swift/ql/lib/change-notes/released/0.3.5.md b/swift/ql/lib/change-notes/released/0.3.5.md new file mode 100644 index 00000000000..7a86712e637 --- /dev/null +++ b/swift/ql/lib/change-notes/released/0.3.5.md @@ -0,0 +1,3 @@ +## 0.3.5 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 5ed15c24b9c..468917f2543 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.4 +lastReleaseVersion: 0.3.5 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 23cbcdcce28..32b94ce9ea8 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.5-dev +version: 0.3.5 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index c58a186f725..689f4e90b87 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.3.5 + +No user-facing changes. + ## 0.3.4 ### Minor Analysis Improvements diff --git a/swift/ql/src/change-notes/released/0.3.5.md b/swift/ql/src/change-notes/released/0.3.5.md new file mode 100644 index 00000000000..7a86712e637 --- /dev/null +++ b/swift/ql/src/change-notes/released/0.3.5.md @@ -0,0 +1,3 @@ +## 0.3.5 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 5ed15c24b9c..468917f2543 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.3.4 +lastReleaseVersion: 0.3.5 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 0998bebd616..7149a64fb34 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.5-dev +version: 0.3.5 groups: - swift - queries From 86bb884f67ac334ce71bb2177ee24821f6a21afe Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:26:46 +0100 Subject: [PATCH 124/205] Python: better comment --- .../python/dataflow/new/internal/VariableCapture.qll | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 a6e34374c64..1846f71cd42 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -34,9 +34,11 @@ private module CaptureInput implements Shared::InputSig { class BasicBlock extends PY::BasicBlock { Callable getEnclosingCallable() { result = this.getScope() } - // Note `PY:BasicBlock` does not have a `GetLocation` and - // has a more complicated location info logic. - // This is good enough for here. + // Note `PY:BasicBlock` does not have a `getLocation`. + // (Instead it has a complicated location info logic.) + // Using the location of the first node is simple + // and we just need a way to identify the basic block + // during debugging, so this will be serviceable. Location getLocation() { result = super.getNode(0).getLocation() } } From 456209b2691d28a413d2254f0b8135bc688cc2c2 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:29:09 +0100 Subject: [PATCH 125/205] Python: Move predicate closer to its use --- .../dataflow/new/internal/VariableCapture.qll | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) 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 1846f71cd42..3ca31be5dcf 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -17,16 +17,6 @@ private module CaptureInput implements Shared::InputSig { ExprCfgNode() { isExpressionNode(this) } } - private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { - // TODO: Other languages have an extra case here looking like - // simpleAstFlowStep(nodeFrom, nodeTo) - // we should investigate the potential benefit of adding that. - exists(SsaVariable def | - def.getAUse() = nodeTo and - def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom - ) - } - class Callable extends Scope { predicate isConstructor() { none() } } @@ -95,6 +85,16 @@ private module CaptureInput implements Shared::InputSig { CapturedVariable getVariable() { result = v } } + private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) { + // TODO: Other languages have an extra case here looking like + // simpleAstFlowStep(nodeFrom, nodeTo) + // we should investigate the potential benefit of adding that. + exists(SsaVariable def | + def.getAUse() = nodeTo and + def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom + ) + } + class ClosureExpr extends Expr { ClosureExpr() { this.getNode() instanceof CallableExpr From c0b3d98c6dadad14476c98eceda8878f59a10688 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 22:44:26 +0100 Subject: [PATCH 126/205] Python: Add a bit more detail to comment. --- .../lib/semmle/python/dataflow/new/internal/VariableCapture.qll | 2 ++ 1 file changed, 2 insertions(+) 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 3ca31be5dcf..1cf752cbd70 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -10,6 +10,8 @@ private import codeql.dataflow.VariableCapture as Shared // - JS: Capture flow: https://github.com/github/codeql/pull/14412/commits/7bcf8b858babfea0a3e36ce61145954c249e13ac // - JS: Disallow consecutive captured contents: https://github.com/github/codeql/pull/14412/commits/46e4cdc6232604ea7f58138a336d5a222fad8567 // The first is the main implementation, the second is a performance motivated restriction. +// The restriction is to clear any `CapturedVariableContent` before writing a new one +// to avoid long access paths (see the link for a nice explanation). private module CaptureInput implements Shared::InputSig { private import python as PY From 6e4011d2aef363c85b1360bbefa240af2106b8c0 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 23:16:51 +0100 Subject: [PATCH 127/205] Python: rename sythetic nodes Avoid the term "closure" as it is somewhat academic. --- .../new/internal/DataFlowDispatch.qll | 44 ++++++++++++------- .../dataflow/new/internal/DataFlowPrivate.qll | 2 +- .../dataflow/new/internal/DataFlowPublic.qll | 2 +- .../dataflow/new/internal/VariableCapture.qll | 2 +- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index b691aabb81e..3119224ccd9 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -42,6 +42,12 @@ private import semmle.python.dataflow.new.internal.TypeTracker::CallGraphConstru newtype TParameterPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfParameterPosition() or + /** + * This is used for tracking flow through captured variables, and + * we use separate parameter/argument positions in order to distinguish + * "lambda self" from "normal self", as lambdas may also access outer `self` + * variables (through variable capture). + */ TLambdaSelfParameterPosition() or TPositionalParameterPosition(int index) { index = any(Parameter p).getPosition() @@ -135,6 +141,12 @@ class ParameterPosition extends TParameterPosition { newtype TArgumentPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfArgumentPosition() or + /** + * This is used for tracking flow through captured variables, and + * we use separate parameter/argument positions in order to distinguish + * "lambda self" from "normal self", as lambdas may also access outer `self` + * variables (through variable capture). + */ TLambdaSelfArgumentPosition() or TPositionalArgumentPosition(int index) { exists(any(CallNode c).getArg(index)) @@ -1521,20 +1533,19 @@ abstract class ParameterNodeImpl extends Node { } /** - * The value of a closure itself at function entry, viewed as a node in the data - * flow graph. + * A sythetic parameter representing the values of the variables captured + * by the callable being called. This parameter represents a single object + * where all the values are stored as attributes. + * This is also known as the environment part of a closure. * - * This is used for tracking flow through captured variables, and we use - * separate argument/parameter nodes at their own parameter/argument positions in order to distinguish - * "lambda self" from "normal self", as lambdas may also access outer `self` - * variables (through variable capture). + * This is used for tracking flow through captured variables. */ -class SynthCapturingClosureParameterNode extends ParameterNodeImpl, - TSynthCapturingClosureParameterNode +class SynthCapturedVariablesParameterNode extends ParameterNodeImpl, + TSynthCapturedVariablesParameterNode { private Function callable; - SynthCapturingClosureParameterNode() { this = TSynthCapturingClosureParameterNode(callable) } + SynthCapturedVariablesParameterNode() { this = TSynthCapturedVariablesParameterNode(callable) } final Function getCallable() { result = callable } @@ -1627,13 +1638,12 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl } /** - * The value of a closure itself being passed to the funciton, viewed as a - * node in the data flow graph. + * A sythetic argument representing the values of the variables captured + * by the callable being called. This argument represents a single object + * where all the values are stored as attributes. + * This is also known as the environment part of a closure. * - * This is used for tracking flow through captured variables, and we use a - * separate node and parameter/argument positions in order to distinguish - * "lambda self" from "normal self", as lambdas may also access outer `self` - * variables (through variable capture). + * This is used for tracking flow through captured variables. * * TODO: * We might want a synthetic node here, but currently that incurs problems @@ -1642,10 +1652,10 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl * `CallGraphConstruction::Make` in staed of * `CallGraphConstruction::Simple::Make` appropriately. */ -class CapturingClosureArgumentNode extends CfgNode, ArgumentNode { +class CapturedVariablesArgumentNode extends CfgNode, ArgumentNode { CallNode callNode; - CapturingClosureArgumentNode() { + CapturedVariablesArgumentNode() { node = callNode.getFunction() and exists(Function target | resolveCall(callNode, target, _) | target = any(VariableCapture::CapturedVariable v).getACapturingScope() 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 9a1d58b1fb7..dd98936e9e9 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1062,7 +1062,7 @@ predicate allowParameterReturnInSelf(ParameterNode p) { or exists(Function f | VariableCapture::Flow::heuristicAllowInstanceParameterReturnInSelf(f) and - p = TSynthCapturingClosureParameterNode(f) + p = TSynthCapturedVariablesParameterNode(f) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 2c295e42fbc..ee31fc8b98a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -118,7 +118,7 @@ newtype TNode = /** A synthetic node representing a captured variable. */ TSynthCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or /** A synthetic node representing the heap of a function. Used for variable capture. */ - TSynthCapturingClosureParameterNode(Function f) { + TSynthCapturedVariablesParameterNode(Function f) { f = any(VariableCapture::CapturedVariable v).getACapturingScope() and // TODO: Remove this restriction when adding proper support for captured variables in the body of the function we generate for comprehensions exists(TFunction(f)) 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 1cf752cbd70..1e975880e27 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -133,7 +133,7 @@ private Flow::ClosureNode asClosureNode(Node n) { result.(Flow::ParameterNode).getParameter().getCfgNode() = n.(CfgNode).getNode() or result.(Flow::ThisParameterNode).getCallable() = - n.(SynthCapturingClosureParameterNode).getCallable() + n.(SynthCapturedVariablesParameterNode).getCallable() } predicate storeStep(Node nodeFrom, CapturedVariableContent c, Node nodeTo) { From 78c484faab3087eec41779f92572a1cb6d4cd663 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 23:24:57 +0100 Subject: [PATCH 128/205] Python: remove support for capturing callbacks This will be added in a follow-up PR instead. --- .../python/dataflow/new/FlowSummary.qll | 39 ------------------- .../variable-capture/test_library_calls.py | 2 +- 2 files changed, 1 insertion(+), 40 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index c15861ff1d0..800c9592dcc 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -37,45 +37,6 @@ abstract class SummarizedCallable extends LibraryCallable, Impl::Public::Summari deprecated class RequiredSummaryComponentStack = Impl::Private::RequiredSummaryComponentStack; -private module LibraryCallbackSummaries { - private predicate libraryCall(CallCfgNode call) { - not exists(NormalCall normalCall | call.getNode() = normalCall.getNode()) - } - - private DataFlow::LocalSourceNode trackLambdaCreation(TypeTracker t) { - t.start() and - lambdaCreation(result, _, _) - or - exists(TypeTracker t2 | result = trackLambdaCreation(t2).track(t2, t)) and - not result.(ParameterNode).getParameter().isSelf() - } - - private predicate libraryCallHasLambdaArg(CallCfgNode call, int i) { - exists(CfgNode arg | - arg = call.getArg(i) and - arg.getALocalSource() = trackLambdaCreation(TypeTracker::end()) and - libraryCall(call) - ) - } - - private class LibraryLambdaMethod extends SummarizedCallable { - LibraryLambdaMethod() { this = "" } - - final override CallCfgNode getACall() { libraryCallHasLambdaArg(result, _) } - - final override ArgumentNode getACallback() { none() } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - exists(int i | - i in [0 .. 10] and - input = "Argument[" + i + "]" and - output = "Argument[" + i + "].Parameter[lambda-self]" - ) and - preservesValue = true - } - } -} - private class SummarizedCallableFromModel extends SummarizedCallable { string type; string path; diff --git a/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py index 5db25fc8348..70b07f66557 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py +++ b/python/ql/test/experimental/dataflow/variable-capture/test_library_calls.py @@ -45,4 +45,4 @@ def test_library_call(): for x in map(set, [1]): pass - SINK(captured["x"]) #$ captured + SINK(captured["x"]) #$ MISSING: captured From 180e752a23892f1ae166efd70cedec62f7dde419 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 18 Dec 2023 23:30:13 +0100 Subject: [PATCH 129/205] C++: Update test after extractor changes Also remove incorrect FP comment. clang does not support `#pragma hdrstop` in its non-cl-emulation mode. --- cpp/ql/test/header-variant-tests/clang-pch/clang-pch.expected | 1 + cpp/ql/test/header-variant-tests/clang-pch/i.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/header-variant-tests/clang-pch/clang-pch.expected b/cpp/ql/test/header-variant-tests/clang-pch/clang-pch.expected index 78c63f748e4..d363a792a3c 100644 --- a/cpp/ql/test/header-variant-tests/clang-pch/clang-pch.expected +++ b/cpp/ql/test/header-variant-tests/clang-pch/clang-pch.expected @@ -1,6 +1,7 @@ | b.c:5:3:5:34 | return ... | 10 | | c.c:2:3:2:20 | return ... | 5 | | e.c:2:3:2:19 | return ... | 17 | +| g.c:3:3:3:12 | return ... | 20 | | i.c:3:3:3:12 | return ... | 30 | | i.c:8:3:8:12 | return ... | 31 | | i.c:13:3:13:12 | return ... | 32 | diff --git a/cpp/ql/test/header-variant-tests/clang-pch/i.c b/cpp/ql/test/header-variant-tests/clang-pch/i.c index f162aa818d9..05aa74b3047 100644 --- a/cpp/ql/test/header-variant-tests/clang-pch/i.c +++ b/cpp/ql/test/header-variant-tests/clang-pch/i.c @@ -1,6 +1,6 @@ #ifdef SEEN_H static int h() { - return 30; // [FALSE POSITIVE] (#pragma hdrstop bug, SEEN_H should not be defined in the precompiled header) + return 30; } #endif #ifdef H1 @@ -10,7 +10,7 @@ static int h1() { #endif #ifdef H2 static int h2() { - return 32; // [FALSE POSITIVE] (#pragma hdrstop bug, H2 should not be defined in the precompiled header) + return 32; } #endif // semmle-extractor-options: --clang -include-pch ${testdir}/clang-pch.testproj/h.pch From 8b7b58279a7a48ad8adb50c74e2010954017a7fc Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 18 Dec 2023 23:42:39 +0100 Subject: [PATCH 130/205] Python: add change-note I chose `category: majorAnalysis`, the description is "An API has changed in a way that may affect the results produced by a query that consumes the API." The API in question here is `flowPath` which is used by all our data flow queries. --- .../lib/change-notes/2023-12-18-support-variable-capture.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2023-12-18-support-variable-capture.md diff --git a/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md b/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md new file mode 100644 index 00000000000..38a54561e90 --- /dev/null +++ b/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Support for flow through captured variables. \ No newline at end of file From 1417c2cdd5c1f2ac6d7c9d066f52a9f0d517c898 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 19 Dec 2023 10:08:59 +0100 Subject: [PATCH 131/205] Update python/ql/lib/change-notes/2023-12-18-support-variable-capture.md Co-authored-by: Rasmus Wriedt Larsen --- .../ql/lib/change-notes/2023-12-18-support-variable-capture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md b/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md index 38a54561e90..e7aee047fa1 100644 --- a/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md +++ b/python/ql/lib/change-notes/2023-12-18-support-variable-capture.md @@ -1,4 +1,4 @@ --- category: majorAnalysis --- -* Support for flow through captured variables. \ No newline at end of file +* Added support for global data-flow through captured variables. \ No newline at end of file From 501645920fb8c83d41c7fd949ba60e9123f28309 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 10:41:35 +0100 Subject: [PATCH 132/205] C++: Move private stuff from 'DataFlowUtil' to public stuff 'DataFlowPrivate'. Also make 'PostUpdateNodeImpl' public in 'DataFlowUtil'. Sadly, this means that it's visible at the query level (as DataFlow::PostUpdateNodeImpl), but I've added a big INTERNAL QLDoc on it to make sure people don't use it. --- .../ir/dataflow/internal/DataFlowPrivate.qll | 35 ++++++++++++++ .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 46 ++----------------- 2 files changed, 39 insertions(+), 42 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 8c66aad6680..19140653877 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -59,6 +59,41 @@ private module Cached { import Cached private import Nodes0 +/** + * A module for calculating the number of stars (i.e., `*`s) needed for various + * dataflow node `toString` predicates. + */ +module NodeStars { + private int getNumberOfIndirections(Node n) { + result = n.(RawIndirectOperand).getIndirectionIndex() + or + result = n.(RawIndirectInstruction).getIndirectionIndex() + or + result = n.(VariableNode).getIndirectionIndex() + or + result = n.(PostUpdateNodeImpl).getIndirectionIndex() + or + result = n.(FinalParameterNode).getIndirectionIndex() + } + + private int maxNumberOfIndirections() { result = max(getNumberOfIndirections(_)) } + + private string repeatStars(int n) { + n = 0 and result = "" + or + n = [1 .. maxNumberOfIndirections()] and + result = "*" + repeatStars(n - 1) + } + + /** + * Gets the number of stars (i.e., `*`s) needed to produce the `toString` + * output for `n`. + */ + string stars(Node n) { result = repeatStars(getNumberOfIndirections(n)) } +} + +import NodeStars + class Node0Impl extends TIRDataFlowNode0 { /** * INTERNAL: Do not use. 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 5221276ccd7..ab1e3365aa8 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 @@ -486,47 +486,6 @@ class Node extends TIRDataFlowNode { } } -private string toExprString(Node n) { - not isDebugMode() and - ( - result = n.asExpr(0).toString() - or - not exists(n.asExpr()) and - result = stars(n) + n.asIndirectExpr(0, 1).toString() - ) -} - -private module NodeStars { - private int getNumberOfIndirections(Node n) { - result = n.(RawIndirectOperand).getIndirectionIndex() - or - result = n.(RawIndirectInstruction).getIndirectionIndex() - or - result = n.(VariableNode).getIndirectionIndex() - or - result = n.(PostUpdateNodeImpl).getIndirectionIndex() - or - result = n.(FinalParameterNode).getIndirectionIndex() - } - - private int maxNumberOfIndirections() { result = max(getNumberOfIndirections(_)) } - - private string repeatStars(int n) { - n = 0 and result = "" - or - n = [1 .. maxNumberOfIndirections()] and - result = "*" + repeatStars(n - 1) - } - - /** - * Gets the number of stars (i.e., `*`s) needed to produce the `toString` - * output for `n`. - */ - string stars(Node n) { result = repeatStars(getNumberOfIndirections(n)) } -} - -private import NodeStars - /** * A class that lifts pre-SSA dataflow nodes to regular dataflow nodes. */ @@ -589,7 +548,10 @@ Type stripPointer(Type t) { result = t.(FunctionPointerIshType).getBaseType() } -private class PostUpdateNodeImpl extends PartialDefinitionNode, TPostUpdateNodeImpl { +/** + * INTERNAL: Do not use. + */ +class PostUpdateNodeImpl extends PartialDefinitionNode, TPostUpdateNodeImpl { int indirectionIndex; Operand operand; From 9b2583477141f8cdf801e4d222d355bba0c675c4 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 11:08:41 +0100 Subject: [PATCH 133/205] C++: Use parameterized modules instead of abstract classes and predicates to handle debug printing. --- .../ir/dataflow/internal/DebugPrinting.qll | 20 ++++- .../ir/dataflow/internal/Node0ToString.qll | 75 +------------------ .../ir/dataflow/internal/Node0ToStringSig.qll | 25 +++++++ .../dataflow/internal/NormalNode0ToString.qll | 33 ++++++++ 4 files changed, 78 insertions(+), 75 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll create mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll index 1c958cf78d6..ba44561c0cc 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll @@ -1,9 +1,21 @@ /** - * This file activates debugging mode for dataflow node printing. + * This file contains module that implements the _debug_ version of + * `toString` for `Instruction` and `Operand` dataflow nodes. */ -private import Node0ToString +private import semmle.code.cpp.ir.IR +private import codeql.util.Unit +private import Node0ToStringSig +private import DataFlowUtil -private class DebugNode0ToString extends Node0ToString { - final override predicate isDebugMode() { any() } +private module DebugNode0ToString implements Node0ToStringSig { + string instructionToString(Instruction i) { result = i.getDumpString() } + + string operandToString(Operand op) { + result = op.getDumpString() + " @ " + op.getUse().getResultId() + } + + string toExprString(Node n) { none() } } + +import DebugNode0ToString diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll index a271e93355a..3458226c2cf 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll @@ -1,75 +1,8 @@ /** - * This file contains the abstract class that serves as the base class for - * dataflow node printing. + * This file imports the module that is used to construct the strings used by `Node.ToString`. * - * By default, a non-debug string is produced. However, a debug-friendly - * string can be produced by importing `DebugPrinting.qll`. + * Normally, this file should just import `NormalNode0ToString` to compute the efficient `toString`, but for debugging purposes + * one can import `DebugPrinting.qll` to better correlate the dataflow nodes with their underlying instructions and operands. */ -private import semmle.code.cpp.ir.IR -private import codeql.util.Unit - -/** - * A class to control whether a debugging version of instructions and operands - * should be printed as part of the `toString` output of dataflow nodes. - * - * To enable debug printing import the `DebugPrinting.ql` file. By default, - * non-debug output will be used. - */ -class Node0ToString extends Unit { - abstract predicate isDebugMode(); - - private string normalInstructionToString(Instruction i) { - not this.isDebugMode() and - if i.(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable - then result = "this" - else result = i.getAst().toString() - } - - private string normalOperandToString(Operand op) { - not this.isDebugMode() and - if op.getDef().(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable - then result = "this" - else result = op.getDef().getAst().toString() - } - - /** - * Gets the string that should be used by `InstructionNode.toString` - */ - string instructionToString(Instruction i) { - if this.isDebugMode() - then result = i.getDumpString() - else result = this.normalInstructionToString(i) - } - - /** - * Gets the string that should be used by `OperandNode.toString`. - */ - string operandToString(Operand op) { - if this.isDebugMode() - then result = op.getDumpString() + " @ " + op.getUse().getResultId() - else result = this.normalOperandToString(op) - } -} - -private class NoDebugNode0ToString extends Node0ToString { - final override predicate isDebugMode() { none() } -} - -/** - * Gets the string that should be used by `OperandNode.toString`. - */ -string operandToString(Operand op) { result = any(Node0ToString nts).operandToString(op) } - -/** - * Gets the string that should be used by `InstructionNode.toString` - */ -string instructionToString(Instruction i) { result = any(Node0ToString nts).instructionToString(i) } - -/** - * Holds if debugging mode is enabled. - * - * In debug mode the `toString` on dataflow nodes is more expensive to compute, - * but gives more precise information about the different dataflow nodes. - */ -predicate isDebugMode() { any(Node0ToString nts).isDebugMode() } +import NormalNode0ToString diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll new file mode 100644 index 00000000000..df75123a6a3 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll @@ -0,0 +1,25 @@ +/** + * This file contains the signature module for controlling the behavior of `Node.toString`. + */ + +private import semmle.code.cpp.ir.IR +private import codeql.util.Unit +private import DataFlowUtil + +/** A signature for a module to control the behavior of `Node.toString`. */ +signature module Node0ToStringSig { + /** + * Gets the string that should be used by `OperandNode.toString`. + */ + string operandToString(Operand op); + + /** + * Gets the string that should be used by `InstructionNode.toString`. + */ + string instructionToString(Instruction i); + + /** + * Gets the string representation of the `Expr` associated with `n`, if any. + */ + string toExprString(Node n); +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll new file mode 100644 index 00000000000..e97f0af3fce --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll @@ -0,0 +1,33 @@ +/** + * This file contains module that implements the non-debug version of + * `toString` for `Instruction` and `Operand` dataflow nodes. + */ + +private import semmle.code.cpp.ir.IR +private import codeql.util.Unit +private import Node0ToStringSig +private import DataFlowUtil +private import DataFlowPrivate + +private module NormalNode0ToStringImpl implements Node0ToStringSig { + string instructionToString(Instruction i) { + if i.(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable + then result = "this" + else result = i.getAst().toString() + } + + string operandToString(Operand op) { + if op.getDef().(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable + then result = "this" + else result = op.getDef().getAst().toString() + } + + string toExprString(Node n) { + result = n.asExpr(0).toString() + or + not exists(n.asExpr()) and + result = stars(n) + n.asIndirectExpr(0, 1).toString() + } +} + +import NormalNode0ToStringImpl From 8230a90db685279d525313e298f34b81d5bb24bb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 11:16:49 +0100 Subject: [PATCH 134/205] C++: No need for another 'stars' predicate in 'PrintIRUtilities'. --- .../ir/dataflow/internal/PrintIRLocalFlow.qll | 5 ++-- .../ir/dataflow/internal/PrintIRUtilities.qll | 27 ++----------------- 2 files changed, 5 insertions(+), 27 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRLocalFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRLocalFlow.qll index b7f01fc1bcc..9a9608db2b2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRLocalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRLocalFlow.qll @@ -1,6 +1,7 @@ private import cpp private import semmle.code.cpp.ir.IR private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil +private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate private import SsaInternals as Ssa private import PrintIRUtilities @@ -33,9 +34,9 @@ private string getNodeProperty(Node node, string key) { key = "flow" and result = strictconcat(string flow, boolean to, int order1, int order2 | - flow = getFromFlow(node, order1, order2) + "->" + starsForNode(node) + "@" and to = false + flow = getFromFlow(node, order1, order2) + "->" + stars(node) + "@" and to = false or - flow = starsForNode(node) + "@->" + getToFlow(node, order1, order2) and to = true + flow = stars(node) + "@->" + getToFlow(node, order1, order2) and to = true | flow, ", " order by to, order1, order2, flow ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll index 5cca78588f0..5dfe53c946b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll @@ -7,37 +7,14 @@ private import semmle.code.cpp.ir.IR private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate -private string stars(int k) { - k = - [0 .. max([ - any(RawIndirectInstruction n).getIndirectionIndex(), - any(RawIndirectOperand n).getIndirectionIndex() - ] - )] and - (if k = 0 then result = "" else result = "*" + stars(k - 1)) -} - -string starsForNode(Node node) { - exists(int indirectionIndex | - node.(IndirectInstruction).hasInstructionAndIndirectionIndex(_, indirectionIndex) or - node.(IndirectOperand).hasOperandAndIndirectionIndex(_, indirectionIndex) - | - result = stars(indirectionIndex) - ) - or - not node instanceof IndirectInstruction and - not node instanceof IndirectOperand and - result = "" -} - private Instruction getInstruction(Node n, string stars) { result = [n.asInstruction(), n.(RawIndirectInstruction).getInstruction()] and - stars = starsForNode(n) + stars = stars(n) } private Operand getOperand(Node n, string stars) { result = [n.asOperand(), n.(RawIndirectOperand).getOperand()] and - stars = starsForNode(n) + stars = stars(n) } /** From 8f72b0e4f77a7a49299c08b8d63b2776137b731a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 19 Dec 2023 10:32:57 +0000 Subject: [PATCH 135/205] Post-release preparation for codeql-cli-2.15.5 --- 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 b2da7fcf6a2..1a1f2d1c7c7 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.2 +version: 0.12.3-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ab0b9d07d1f..9c5e81a6c31 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.1 +version: 0.9.2-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index c6fb31e2c4b..a2969f590b7 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.5 +version: 1.7.6-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1d740da39fe..9c9fb4bc5fc 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.5 +version: 1.7.6-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index eb8b2f01371..4afc1644ba1 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.5 +version: 0.8.6-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 24380e49ee9..006a95aa0f0 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.5 +version: 0.8.6-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 58facab8d99..1b8ac8c1be9 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.4 +version: 0.0.5-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 25b59f9f274..b22fdbf06ab 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.5 +version: 0.7.6-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 7503037da91..4d54626aa34 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.5 +version: 0.7.6-dev groups: - go - queries diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index e857df9d3de..26601aa3975 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.10 +version: 0.0.11-dev groups: - java - automodel diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index aa3602f3bd3..77503a51cb3 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.5 +version: 0.8.6-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 837a5344e62..a409cf51016 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.5 +version: 0.8.6-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index df4c1e6a29d..7b983a59cbe 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.8.5 +version: 0.8.6-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index ea41e8b9830..947d9c61bf7 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.8.5 +version: 0.8.6-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 76dbe885d3e..5ee25056a75 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 0.7.5 +version: 0.7.6-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 11141cd9c48..8a0e93bbe8e 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.11.5 +version: 0.11.6-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index b522ec36bd7..25594b06637 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.9.5 +version: 0.9.6-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index bdca7378b7e..c460d2d3638 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.8.5 +version: 0.8.6-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b463a011365..9dc44497c14 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.8.5 +version: 0.8.6-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index efbbd83b8bc..9f1a41b9c15 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 0.1.5 +version: 0.1.6-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 9b65dd05108..d53e750de32 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 0.1.5 +version: 0.1.6-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 9ff6b358ca7..47c23b2976f 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true dependencies: null diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 7e6b2dddf36..f0c5bd25a69 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 0.0.4 +version: 0.0.5-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 63d2288520c..33b5952fe87 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 77667245f41..00e6b698e43 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 6d16327a14d..abe9e10f4af 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 0.0.4 +version: 0.0.5-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 98fbdc74270..9e095cb2b6c 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.5 +version: 0.2.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index ee6ff86a582..24301a5c13e 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index e3349bd478d..3c4ea9d6fb2 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 9509e229fc5..6652d73fba1 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true dependencies: null diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 69b7dbc1335..f13f8aeca74 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 0.2.5 +version: 0.2.6-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 32b94ce9ea8..2a4fe611768 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 0.3.5 +version: 0.3.6-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 7149a64fb34..180db628f9e 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 0.3.5 +version: 0.3.6-dev groups: - swift - queries From 7cb758a61b17ad837fc9898a073c3e7dd5876c01 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 11:35:36 +0100 Subject: [PATCH 136/205] C#: Add stubs for System.Data.OleDb. --- .../3.1.0/Microsoft.NETCore.Platforms.csproj | 12 + ...stem.Configuration.ConfigurationManager.cs | 1542 +++++++++++++++++ ....Configuration.ConfigurationManager.csproj | 14 + .../8.0.0/System.Data.OleDb.cs | 449 +++++ .../8.0.0/System.Data.OleDb.csproj | 14 + .../8.0.0/System.Diagnostics.EventLog.csproj | 12 + .../System.Diagnostics.PerformanceCounter.cs | 275 +++ ...stem.Diagnostics.PerformanceCounter.csproj | 13 + .../System.Security.AccessControl.csproj | 14 + ...tem.Security.Cryptography.ProtectedData.cs | 21 + ...Security.Cryptography.ProtectedData.csproj | 12 + csharp/scripts/stubs/make_stubs_all.py | 1 + 12 files changed, 2379 insertions(+) create mode 100644 csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.cs create mode 100644 csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.cs create mode 100644 csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/8.0.0/System.Diagnostics.EventLog.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.cs create mode 100644 csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj create mode 100644 csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.cs create mode 100644 csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.csproj diff --git a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj new file mode 100644 index 00000000000..61622bc5296 --- /dev/null +++ b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj @@ -0,0 +1,12 @@ + + + net8.0 + true + bin\ + false + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.cs b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.cs new file mode 100644 index 00000000000..f0db1f58671 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.cs @@ -0,0 +1,1542 @@ +// This file contains auto-generated code. +// Generated from `System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51`. +namespace System +{ + namespace Configuration + { + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class ApplicationScopedSettingAttribute : System.Configuration.SettingAttribute + { + public ApplicationScopedSettingAttribute() => throw null; + } + public abstract class ApplicationSettingsBase : System.Configuration.SettingsBase, System.ComponentModel.INotifyPropertyChanged + { + public override System.Configuration.SettingsContext Context { get => throw null; } + protected ApplicationSettingsBase() => throw null; + protected ApplicationSettingsBase(System.ComponentModel.IComponent owner) => throw null; + protected ApplicationSettingsBase(string settingsKey) => throw null; + protected ApplicationSettingsBase(System.ComponentModel.IComponent owner, string settingsKey) => throw null; + public object GetPreviousVersion(string propertyName) => throw null; + protected virtual void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) => throw null; + protected virtual void OnSettingChanging(object sender, System.Configuration.SettingChangingEventArgs e) => throw null; + protected virtual void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e) => throw null; + protected virtual void OnSettingsSaving(object sender, System.ComponentModel.CancelEventArgs e) => throw null; + public override System.Configuration.SettingsPropertyCollection Properties { get => throw null; } + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + public override System.Configuration.SettingsPropertyValueCollection PropertyValues { get => throw null; } + public override System.Configuration.SettingsProviderCollection Providers { get => throw null; } + public void Reload() => throw null; + public void Reset() => throw null; + public override void Save() => throw null; + public event System.Configuration.SettingChangingEventHandler SettingChanging; + public string SettingsKey { get => throw null; set { } } + public event System.Configuration.SettingsLoadedEventHandler SettingsLoaded; + public event System.Configuration.SettingsSavingEventHandler SettingsSaving; + public override object this[string propertyName] { get => throw null; set { } } + public virtual void Upgrade() => throw null; + } + public sealed class ApplicationSettingsGroup : System.Configuration.ConfigurationSectionGroup + { + public ApplicationSettingsGroup() => throw null; + } + public class AppSettingsReader + { + public AppSettingsReader() => throw null; + public object GetValue(string key, System.Type type) => throw null; + } + public sealed class AppSettingsSection : System.Configuration.ConfigurationSection + { + public AppSettingsSection() => throw null; + protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey) => throw null; + public string File { get => throw null; set { } } + protected override object GetRuntimeObject() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected override void Reset(System.Configuration.ConfigurationElement parentSection) => throw null; + public System.Configuration.KeyValueConfigurationCollection Settings { get => throw null; } + } + public sealed class CallbackValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public CallbackValidator(System.Type type, System.Configuration.ValidatorCallback callback) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class CallbackValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public string CallbackMethodName { get => throw null; set { } } + public CallbackValidatorAttribute() => throw null; + public System.Type Type { get => throw null; set { } } + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class ClientSettingsSection : System.Configuration.ConfigurationSection + { + public ClientSettingsSection() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public System.Configuration.SettingElementCollection Settings { get => throw null; } + } + public sealed class CommaDelimitedStringCollection : System.Collections.Specialized.StringCollection + { + public void Add(string value) => throw null; + public void AddRange(string[] range) => throw null; + public void Clear() => throw null; + public System.Configuration.CommaDelimitedStringCollection Clone() => throw null; + public CommaDelimitedStringCollection() => throw null; + public void Insert(int index, string value) => throw null; + public bool IsModified { get => throw null; } + public bool IsReadOnly { get => throw null; } + public void Remove(string value) => throw null; + public void SetReadOnly() => throw null; + public string this[int index] { get => throw null; set { } } + public override string ToString() => throw null; + } + public sealed class CommaDelimitedStringCollectionConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public CommaDelimitedStringCollectionConverter() => throw null; + } + public sealed class Configuration + { + public System.Configuration.AppSettingsSection AppSettings { get => throw null; } + public System.Func AssemblyStringTransformer { get => throw null; set { } } + public System.Configuration.ConnectionStringsSection ConnectionStrings { get => throw null; } + public System.Configuration.ContextInformation EvaluationContext { get => throw null; } + public string FilePath { get => throw null; } + public System.Configuration.ConfigurationSection GetSection(string sectionName) => throw null; + public System.Configuration.ConfigurationSectionGroup GetSectionGroup(string sectionGroupName) => throw null; + public bool HasFile { get => throw null; } + public System.Configuration.ConfigurationLocationCollection Locations { get => throw null; } + public bool NamespaceDeclared { get => throw null; set { } } + public System.Configuration.ConfigurationSectionGroup RootSectionGroup { get => throw null; } + public void Save() => throw null; + public void Save(System.Configuration.ConfigurationSaveMode saveMode) => throw null; + public void Save(System.Configuration.ConfigurationSaveMode saveMode, bool forceSaveAll) => throw null; + public void SaveAs(string filename) => throw null; + public void SaveAs(string filename, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + public void SaveAs(string filename, System.Configuration.ConfigurationSaveMode saveMode, bool forceSaveAll) => throw null; + public System.Configuration.ConfigurationSectionGroupCollection SectionGroups { get => throw null; } + public System.Configuration.ConfigurationSectionCollection Sections { get => throw null; } + public System.Runtime.Versioning.FrameworkName TargetFramework { get => throw null; set { } } + public System.Func TypeStringTransformer { get => throw null; set { } } + } + public enum ConfigurationAllowDefinition + { + MachineOnly = 0, + MachineToWebRoot = 100, + MachineToApplication = 200, + Everywhere = 300, + } + public enum ConfigurationAllowExeDefinition + { + MachineOnly = 0, + MachineToApplication = 100, + MachineToRoamingUser = 200, + MachineToLocalUser = 300, + } + [System.AttributeUsage((System.AttributeTargets)132)] + public sealed class ConfigurationCollectionAttribute : System.Attribute + { + public string AddItemName { get => throw null; set { } } + public string ClearItemsName { get => throw null; set { } } + public System.Configuration.ConfigurationElementCollectionType CollectionType { get => throw null; set { } } + public ConfigurationCollectionAttribute(System.Type itemType) => throw null; + public System.Type ItemType { get => throw null; } + public string RemoveItemName { get => throw null; set { } } + } + public abstract class ConfigurationConverterBase : System.ComponentModel.TypeConverter + { + public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Type type) => throw null; + public override bool CanConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Type type) => throw null; + protected ConfigurationConverterBase() => throw null; + } + public abstract class ConfigurationElement + { + protected ConfigurationElement() => throw null; + public System.Configuration.Configuration CurrentConfiguration { get => throw null; } + protected virtual void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey) => throw null; + public System.Configuration.ElementInformation ElementInformation { get => throw null; } + protected virtual System.Configuration.ConfigurationElementProperty ElementProperty { get => throw null; } + public override bool Equals(object compareTo) => throw null; + protected System.Configuration.ContextInformation EvaluationContext { get => throw null; } + public override int GetHashCode() => throw null; + protected virtual string GetTransformedAssemblyString(string assemblyName) => throw null; + protected virtual string GetTransformedTypeString(string typeName) => throw null; + protected bool HasContext { get => throw null; } + protected virtual void Init() => throw null; + protected virtual void InitializeDefault() => throw null; + protected virtual bool IsModified() => throw null; + public virtual bool IsReadOnly() => throw null; + protected virtual void ListErrors(System.Collections.IList errorList) => throw null; + public System.Configuration.ConfigurationLockCollection LockAllAttributesExcept { get => throw null; } + public System.Configuration.ConfigurationLockCollection LockAllElementsExcept { get => throw null; } + public System.Configuration.ConfigurationLockCollection LockAttributes { get => throw null; } + public System.Configuration.ConfigurationLockCollection LockElements { get => throw null; } + public bool LockItem { get => throw null; set { } } + protected virtual bool OnDeserializeUnrecognizedAttribute(string name, string value) => throw null; + protected virtual bool OnDeserializeUnrecognizedElement(string elementName, System.Xml.XmlReader reader) => throw null; + protected virtual object OnRequiredPropertyNotFound(string name) => throw null; + protected virtual void PostDeserialize() => throw null; + protected virtual void PreSerialize(System.Xml.XmlWriter writer) => throw null; + protected virtual System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected virtual void Reset(System.Configuration.ConfigurationElement parentElement) => throw null; + protected virtual void ResetModified() => throw null; + protected virtual bool SerializeElement(System.Xml.XmlWriter writer, bool serializeCollectionKey) => throw null; + protected virtual bool SerializeToXmlElement(System.Xml.XmlWriter writer, string elementName) => throw null; + protected void SetPropertyValue(System.Configuration.ConfigurationProperty prop, object value, bool ignoreLocks) => throw null; + protected virtual void SetReadOnly() => throw null; + protected object this[System.Configuration.ConfigurationProperty prop] { get => throw null; set { } } + protected object this[string propertyName] { get => throw null; set { } } + protected virtual void Unmerge(System.Configuration.ConfigurationElement sourceElement, System.Configuration.ConfigurationElement parentElement, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + } + public abstract class ConfigurationElementCollection : System.Configuration.ConfigurationElement, System.Collections.ICollection, System.Collections.IEnumerable + { + protected string AddElementName { get => throw null; set { } } + protected virtual void BaseAdd(System.Configuration.ConfigurationElement element) => throw null; + protected void BaseAdd(System.Configuration.ConfigurationElement element, bool throwIfExists) => throw null; + protected virtual void BaseAdd(int index, System.Configuration.ConfigurationElement element) => throw null; + protected void BaseClear() => throw null; + protected System.Configuration.ConfigurationElement BaseGet(object key) => throw null; + protected System.Configuration.ConfigurationElement BaseGet(int index) => throw null; + protected object[] BaseGetAllKeys() => throw null; + protected object BaseGetKey(int index) => throw null; + protected int BaseIndexOf(System.Configuration.ConfigurationElement element) => throw null; + protected bool BaseIsRemoved(object key) => throw null; + protected void BaseRemove(object key) => throw null; + protected void BaseRemoveAt(int index) => throw null; + protected string ClearElementName { get => throw null; set { } } + public virtual System.Configuration.ConfigurationElementCollectionType CollectionType { get => throw null; } + void System.Collections.ICollection.CopyTo(System.Array arr, int index) => throw null; + public void CopyTo(System.Configuration.ConfigurationElement[] array, int index) => throw null; + public int Count { get => throw null; } + protected virtual System.Configuration.ConfigurationElement CreateNewElement(string elementName) => throw null; + protected abstract System.Configuration.ConfigurationElement CreateNewElement(); + protected ConfigurationElementCollection() => throw null; + protected ConfigurationElementCollection(System.Collections.IComparer comparer) => throw null; + protected virtual string ElementName { get => throw null; } + public bool EmitClear { get => throw null; set { } } + public override bool Equals(object compareTo) => throw null; + protected abstract object GetElementKey(System.Configuration.ConfigurationElement element); + public System.Collections.IEnumerator GetEnumerator() => throw null; + public override int GetHashCode() => throw null; + protected virtual bool IsElementName(string elementName) => throw null; + protected virtual bool IsElementRemovable(System.Configuration.ConfigurationElement element) => throw null; + protected override bool IsModified() => throw null; + public override bool IsReadOnly() => throw null; + public bool IsSynchronized { get => throw null; } + protected override bool OnDeserializeUnrecognizedElement(string elementName, System.Xml.XmlReader reader) => throw null; + protected string RemoveElementName { get => throw null; set { } } + protected override void Reset(System.Configuration.ConfigurationElement parentElement) => throw null; + protected override void ResetModified() => throw null; + protected override bool SerializeElement(System.Xml.XmlWriter writer, bool serializeCollectionKey) => throw null; + protected override void SetReadOnly() => throw null; + public object SyncRoot { get => throw null; } + protected virtual bool ThrowOnDuplicate { get => throw null; } + protected override void Unmerge(System.Configuration.ConfigurationElement sourceElement, System.Configuration.ConfigurationElement parentElement, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + } + public enum ConfigurationElementCollectionType + { + BasicMap = 0, + AddRemoveClearMap = 1, + BasicMapAlternate = 2, + AddRemoveClearMapAlternate = 3, + } + public sealed class ConfigurationElementProperty + { + public ConfigurationElementProperty(System.Configuration.ConfigurationValidatorBase validator) => throw null; + public System.Configuration.ConfigurationValidatorBase Validator { get => throw null; } + } + public class ConfigurationErrorsException : System.Configuration.ConfigurationException + { + public ConfigurationErrorsException(string message, System.Exception inner, string filename, int line) => throw null; + public ConfigurationErrorsException() => throw null; + public ConfigurationErrorsException(string message) => throw null; + public ConfigurationErrorsException(string message, System.Exception inner) => throw null; + public ConfigurationErrorsException(string message, string filename, int line) => throw null; + public ConfigurationErrorsException(string message, System.Xml.XmlNode node) => throw null; + public ConfigurationErrorsException(string message, System.Exception inner, System.Xml.XmlNode node) => throw null; + public ConfigurationErrorsException(string message, System.Xml.XmlReader reader) => throw null; + public ConfigurationErrorsException(string message, System.Exception inner, System.Xml.XmlReader reader) => throw null; + protected ConfigurationErrorsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public System.Collections.ICollection Errors { get => throw null; } + public override string Filename { get => throw null; } + public static string GetFilename(System.Xml.XmlNode node) => throw null; + public static string GetFilename(System.Xml.XmlReader reader) => throw null; + public static int GetLineNumber(System.Xml.XmlNode node) => throw null; + public static int GetLineNumber(System.Xml.XmlReader reader) => throw null; + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public override int Line { get => throw null; } + public override string Message { get => throw null; } + } + public class ConfigurationException : System.SystemException + { + public virtual string BareMessage { get => throw null; } + protected ConfigurationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public ConfigurationException() => throw null; + public ConfigurationException(string message) => throw null; + public ConfigurationException(string message, System.Exception inner) => throw null; + public ConfigurationException(string message, System.Xml.XmlNode node) => throw null; + public ConfigurationException(string message, System.Exception inner, System.Xml.XmlNode node) => throw null; + public ConfigurationException(string message, string filename, int line) => throw null; + public ConfigurationException(string message, System.Exception inner, string filename, int line) => throw null; + public virtual string Filename { get => throw null; } + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public static string GetXmlNodeFilename(System.Xml.XmlNode node) => throw null; + public static int GetXmlNodeLineNumber(System.Xml.XmlNode node) => throw null; + public virtual int Line { get => throw null; } + public override string Message { get => throw null; } + } + public class ConfigurationFileMap : System.ICloneable + { + public virtual object Clone() => throw null; + public ConfigurationFileMap() => throw null; + public ConfigurationFileMap(string machineConfigFilename) => throw null; + public string MachineConfigFilename { get => throw null; set { } } + } + public class ConfigurationLocation + { + public System.Configuration.Configuration OpenConfiguration() => throw null; + public string Path { get => throw null; } + } + public class ConfigurationLocationCollection : System.Collections.ReadOnlyCollectionBase + { + public System.Configuration.ConfigurationLocation this[int index] { get => throw null; } + } + public sealed class ConfigurationLockCollection : System.Collections.ICollection, System.Collections.IEnumerable + { + public void Add(string name) => throw null; + public string AttributeList { get => throw null; } + public void Clear() => throw null; + public bool Contains(string name) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(string[] array, int index) => throw null; + public int Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + public bool HasParentElements { get => throw null; } + public bool IsModified { get => throw null; } + public bool IsReadOnly(string name) => throw null; + public bool IsSynchronized { get => throw null; } + public void Remove(string name) => throw null; + public void SetFromList(string attributeList) => throw null; + public object SyncRoot { get => throw null; } + } + public static class ConfigurationManager + { + public static System.Collections.Specialized.NameValueCollection AppSettings { get => throw null; } + public static System.Configuration.ConnectionStringSettingsCollection ConnectionStrings { get => throw null; } + public static object GetSection(string sectionName) => throw null; + public static System.Configuration.Configuration OpenExeConfiguration(System.Configuration.ConfigurationUserLevel userLevel) => throw null; + public static System.Configuration.Configuration OpenExeConfiguration(string exePath) => throw null; + public static System.Configuration.Configuration OpenMachineConfiguration() => throw null; + public static System.Configuration.Configuration OpenMappedExeConfiguration(System.Configuration.ExeConfigurationFileMap fileMap, System.Configuration.ConfigurationUserLevel userLevel) => throw null; + public static System.Configuration.Configuration OpenMappedExeConfiguration(System.Configuration.ExeConfigurationFileMap fileMap, System.Configuration.ConfigurationUserLevel userLevel, bool preLoad) => throw null; + public static System.Configuration.Configuration OpenMappedMachineConfiguration(System.Configuration.ConfigurationFileMap fileMap) => throw null; + public static void RefreshSection(string sectionName) => throw null; + } + public sealed class ConfigurationProperty + { + public System.ComponentModel.TypeConverter Converter { get => throw null; } + public ConfigurationProperty(string name, System.Type type) => throw null; + public ConfigurationProperty(string name, System.Type type, object defaultValue) => throw null; + public ConfigurationProperty(string name, System.Type type, object defaultValue, System.Configuration.ConfigurationPropertyOptions options) => throw null; + public ConfigurationProperty(string name, System.Type type, object defaultValue, System.ComponentModel.TypeConverter typeConverter, System.Configuration.ConfigurationValidatorBase validator, System.Configuration.ConfigurationPropertyOptions options) => throw null; + public ConfigurationProperty(string name, System.Type type, object defaultValue, System.ComponentModel.TypeConverter typeConverter, System.Configuration.ConfigurationValidatorBase validator, System.Configuration.ConfigurationPropertyOptions options, string description) => throw null; + public object DefaultValue { get => throw null; } + public string Description { get => throw null; } + public bool IsAssemblyStringTransformationRequired { get => throw null; } + public bool IsDefaultCollection { get => throw null; } + public bool IsKey { get => throw null; } + public bool IsRequired { get => throw null; } + public bool IsTypeStringTransformationRequired { get => throw null; } + public bool IsVersionCheckRequired { get => throw null; } + public string Name { get => throw null; } + public System.Type Type { get => throw null; } + public System.Configuration.ConfigurationValidatorBase Validator { get => throw null; } + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class ConfigurationPropertyAttribute : System.Attribute + { + public ConfigurationPropertyAttribute(string name) => throw null; + public object DefaultValue { get => throw null; set { } } + public bool IsDefaultCollection { get => throw null; set { } } + public bool IsKey { get => throw null; set { } } + public bool IsRequired { get => throw null; set { } } + public string Name { get => throw null; } + public System.Configuration.ConfigurationPropertyOptions Options { get => throw null; set { } } + } + public class ConfigurationPropertyCollection : System.Collections.ICollection, System.Collections.IEnumerable + { + public void Add(System.Configuration.ConfigurationProperty property) => throw null; + public void Clear() => throw null; + public bool Contains(string name) => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Configuration.ConfigurationProperty[] array, int index) => throw null; + public int Count { get => throw null; } + public ConfigurationPropertyCollection() => throw null; + public System.Collections.IEnumerator GetEnumerator() => throw null; + public bool IsSynchronized { get => throw null; } + public bool Remove(string name) => throw null; + public object SyncRoot { get => throw null; } + public System.Configuration.ConfigurationProperty this[string name] { get => throw null; } + } + [System.Flags] + public enum ConfigurationPropertyOptions + { + None = 0, + IsDefaultCollection = 1, + IsRequired = 2, + IsKey = 4, + IsTypeStringTransformationRequired = 8, + IsAssemblyStringTransformationRequired = 16, + IsVersionCheckRequired = 32, + } + public enum ConfigurationSaveMode + { + Modified = 0, + Minimal = 1, + Full = 2, + } + public abstract class ConfigurationSection : System.Configuration.ConfigurationElement + { + protected ConfigurationSection() => throw null; + protected virtual void DeserializeSection(System.Xml.XmlReader reader) => throw null; + protected virtual object GetRuntimeObject() => throw null; + protected override bool IsModified() => throw null; + protected override void ResetModified() => throw null; + public System.Configuration.SectionInformation SectionInformation { get => throw null; } + protected virtual string SerializeSection(System.Configuration.ConfigurationElement parentElement, string name, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + protected virtual bool ShouldSerializeElementInTargetVersion(System.Configuration.ConfigurationElement element, string elementName, System.Runtime.Versioning.FrameworkName targetFramework) => throw null; + protected virtual bool ShouldSerializePropertyInTargetVersion(System.Configuration.ConfigurationProperty property, string propertyName, System.Runtime.Versioning.FrameworkName targetFramework, System.Configuration.ConfigurationElement parentConfigurationElement) => throw null; + protected virtual bool ShouldSerializeSectionInTargetVersion(System.Runtime.Versioning.FrameworkName targetFramework) => throw null; + } + public sealed class ConfigurationSectionCollection : System.Collections.Specialized.NameObjectCollectionBase + { + public void Add(string name, System.Configuration.ConfigurationSection section) => throw null; + public void Clear() => throw null; + public void CopyTo(System.Configuration.ConfigurationSection[] array, int index) => throw null; + public System.Configuration.ConfigurationSection Get(int index) => throw null; + public System.Configuration.ConfigurationSection Get(string name) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public string GetKey(int index) => throw null; + public void Remove(string name) => throw null; + public void RemoveAt(int index) => throw null; + public System.Configuration.ConfigurationSection this[string name] { get => throw null; } + public System.Configuration.ConfigurationSection this[int index] { get => throw null; } + } + public class ConfigurationSectionGroup + { + public ConfigurationSectionGroup() => throw null; + public void ForceDeclaration() => throw null; + public void ForceDeclaration(bool force) => throw null; + public bool IsDeclarationRequired { get => throw null; } + public bool IsDeclared { get => throw null; } + public string Name { get => throw null; } + public string SectionGroupName { get => throw null; } + public System.Configuration.ConfigurationSectionGroupCollection SectionGroups { get => throw null; } + public System.Configuration.ConfigurationSectionCollection Sections { get => throw null; } + protected virtual bool ShouldSerializeSectionGroupInTargetVersion(System.Runtime.Versioning.FrameworkName targetFramework) => throw null; + public string Type { get => throw null; set { } } + } + public sealed class ConfigurationSectionGroupCollection : System.Collections.Specialized.NameObjectCollectionBase + { + public void Add(string name, System.Configuration.ConfigurationSectionGroup sectionGroup) => throw null; + public void Clear() => throw null; + public void CopyTo(System.Configuration.ConfigurationSectionGroup[] array, int index) => throw null; + public System.Configuration.ConfigurationSectionGroup Get(int index) => throw null; + public System.Configuration.ConfigurationSectionGroup Get(string name) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public string GetKey(int index) => throw null; + public void Remove(string name) => throw null; + public void RemoveAt(int index) => throw null; + public System.Configuration.ConfigurationSectionGroup this[string name] { get => throw null; } + public System.Configuration.ConfigurationSectionGroup this[int index] { get => throw null; } + } + public sealed class ConfigurationSettings + { + public static System.Collections.Specialized.NameValueCollection AppSettings { get => throw null; } + public static object GetConfig(string sectionName) => throw null; + } + public enum ConfigurationUserLevel + { + None = 0, + PerUserRoaming = 10, + PerUserRoamingAndLocal = 20, + } + [System.AttributeUsage((System.AttributeTargets)128)] + public class ConfigurationValidatorAttribute : System.Attribute + { + protected ConfigurationValidatorAttribute() => throw null; + public ConfigurationValidatorAttribute(System.Type validator) => throw null; + public virtual System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + public System.Type ValidatorType { get => throw null; } + } + public abstract class ConfigurationValidatorBase + { + public virtual bool CanValidate(System.Type type) => throw null; + protected ConfigurationValidatorBase() => throw null; + public abstract void Validate(object value); + } + public sealed class ConfigXmlDocument : System.Xml.XmlDocument, System.Configuration.Internal.IConfigErrorInfo + { + public override System.Xml.XmlAttribute CreateAttribute(string prefix, string localName, string namespaceUri) => throw null; + public override System.Xml.XmlCDataSection CreateCDataSection(string data) => throw null; + public override System.Xml.XmlComment CreateComment(string data) => throw null; + public override System.Xml.XmlElement CreateElement(string prefix, string localName, string namespaceUri) => throw null; + public override System.Xml.XmlSignificantWhitespace CreateSignificantWhitespace(string data) => throw null; + public override System.Xml.XmlText CreateTextNode(string text) => throw null; + public override System.Xml.XmlWhitespace CreateWhitespace(string data) => throw null; + public ConfigXmlDocument() => throw null; + public string Filename { get => throw null; } + string System.Configuration.Internal.IConfigErrorInfo.Filename { get => throw null; } + int System.Configuration.Internal.IConfigErrorInfo.LineNumber { get => throw null; } + public int LineNumber { get => throw null; } + public override void Load(string filename) => throw null; + public void LoadSingleElement(string filename, System.Xml.XmlTextReader sourceReader) => throw null; + } + public sealed class ConnectionStringSettings : System.Configuration.ConfigurationElement + { + public string ConnectionString { get => throw null; set { } } + public ConnectionStringSettings() => throw null; + public ConnectionStringSettings(string name, string connectionString) => throw null; + public ConnectionStringSettings(string name, string connectionString, string providerName) => throw null; + public string Name { get => throw null; set { } } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public string ProviderName { get => throw null; set { } } + public override string ToString() => throw null; + } + public sealed class ConnectionStringSettingsCollection : System.Configuration.ConfigurationElementCollection + { + public void Add(System.Configuration.ConnectionStringSettings settings) => throw null; + protected override void BaseAdd(int index, System.Configuration.ConfigurationElement element) => throw null; + public void Clear() => throw null; + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public ConnectionStringSettingsCollection() => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + public int IndexOf(System.Configuration.ConnectionStringSettings settings) => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public void Remove(System.Configuration.ConnectionStringSettings settings) => throw null; + public void Remove(string name) => throw null; + public void RemoveAt(int index) => throw null; + public System.Configuration.ConnectionStringSettings this[int index] { get => throw null; set { } } + public System.Configuration.ConnectionStringSettings this[string name] { get => throw null; } + } + public sealed class ConnectionStringsSection : System.Configuration.ConfigurationSection + { + public System.Configuration.ConnectionStringSettingsCollection ConnectionStrings { get => throw null; } + public ConnectionStringsSection() => throw null; + protected override object GetRuntimeObject() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + } + public sealed class ContextInformation + { + public object GetSection(string sectionName) => throw null; + public object HostingContext { get => throw null; } + public bool IsMachineLevel { get => throw null; } + } + public sealed class DefaultSection : System.Configuration.ConfigurationSection + { + public DefaultSection() => throw null; + protected override void DeserializeSection(System.Xml.XmlReader xmlReader) => throw null; + protected override bool IsModified() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected override void Reset(System.Configuration.ConfigurationElement parentSection) => throw null; + protected override void ResetModified() => throw null; + protected override string SerializeSection(System.Configuration.ConfigurationElement parentSection, string name, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class DefaultSettingValueAttribute : System.Attribute + { + public DefaultSettingValueAttribute(string value) => throw null; + public string Value { get => throw null; } + } + public sealed class DefaultValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public DefaultValidator() => throw null; + public override void Validate(object value) => throw null; + } + public class DictionarySectionHandler : System.Configuration.IConfigurationSectionHandler + { + public virtual object Create(object parent, object context, System.Xml.XmlNode section) => throw null; + public DictionarySectionHandler() => throw null; + protected virtual string KeyAttributeName { get => throw null; } + protected virtual string ValueAttributeName { get => throw null; } + } + public sealed class DpapiProtectedConfigurationProvider : System.Configuration.ProtectedConfigurationProvider + { + public DpapiProtectedConfigurationProvider() => throw null; + public override System.Xml.XmlNode Decrypt(System.Xml.XmlNode encryptedNode) => throw null; + public override System.Xml.XmlNode Encrypt(System.Xml.XmlNode node) => throw null; + public override void Initialize(string name, System.Collections.Specialized.NameValueCollection configurationValues) => throw null; + public bool UseMachineProtection { get => throw null; } + } + public sealed class ElementInformation + { + public System.Collections.ICollection Errors { get => throw null; } + public bool IsCollection { get => throw null; } + public bool IsLocked { get => throw null; } + public bool IsPresent { get => throw null; } + public int LineNumber { get => throw null; } + public System.Configuration.PropertyInformationCollection Properties { get => throw null; } + public string Source { get => throw null; } + public System.Type Type { get => throw null; } + public System.Configuration.ConfigurationValidatorBase Validator { get => throw null; } + } + public sealed class ExeConfigurationFileMap : System.Configuration.ConfigurationFileMap + { + public override object Clone() => throw null; + public ExeConfigurationFileMap() => throw null; + public ExeConfigurationFileMap(string machineConfigFileName) => throw null; + public string ExeConfigFilename { get => throw null; set { } } + public string LocalUserConfigFilename { get => throw null; set { } } + public string RoamingUserConfigFilename { get => throw null; set { } } + } + public sealed class ExeContext + { + public string ExePath { get => throw null; } + public System.Configuration.ConfigurationUserLevel UserLevel { get => throw null; } + } + public sealed class GenericEnumConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public GenericEnumConverter(System.Type typeEnum) => throw null; + } + public interface IApplicationSettingsProvider + { + System.Configuration.SettingsPropertyValue GetPreviousVersion(System.Configuration.SettingsContext context, System.Configuration.SettingsProperty property); + void Reset(System.Configuration.SettingsContext context); + void Upgrade(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection properties); + } + public interface IConfigurationSectionHandler + { + object Create(object parent, object configContext, System.Xml.XmlNode section); + } + public interface IConfigurationSystem + { + object GetConfig(string configKey); + void Init(); + } + public sealed class IdnElement : System.Configuration.ConfigurationElement + { + public IdnElement() => throw null; + public System.UriIdnScope Enabled { get => throw null; set { } } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + } + public sealed class IgnoreSection : System.Configuration.ConfigurationSection + { + public IgnoreSection() => throw null; + protected override void DeserializeSection(System.Xml.XmlReader xmlReader) => throw null; + protected override bool IsModified() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected override void Reset(System.Configuration.ConfigurationElement parentSection) => throw null; + protected override void ResetModified() => throw null; + protected override string SerializeSection(System.Configuration.ConfigurationElement parentSection, string name, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + } + public class IgnoreSectionHandler : System.Configuration.IConfigurationSectionHandler + { + public virtual object Create(object parent, object configContext, System.Xml.XmlNode section) => throw null; + public IgnoreSectionHandler() => throw null; + } + public sealed class InfiniteIntConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public InfiniteIntConverter() => throw null; + } + public sealed class InfiniteTimeSpanConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public InfiniteTimeSpanConverter() => throw null; + } + public class IntegerValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public IntegerValidator(int minValue, int maxValue) => throw null; + public IntegerValidator(int minValue, int maxValue, bool rangeIsExclusive) => throw null; + public IntegerValidator(int minValue, int maxValue, bool rangeIsExclusive, int resolution) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class IntegerValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public IntegerValidatorAttribute() => throw null; + public bool ExcludeRange { get => throw null; set { } } + public int MaxValue { get => throw null; set { } } + public int MinValue { get => throw null; set { } } + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + namespace Internal + { + public class DelegatingConfigHost : System.Configuration.Internal.IInternalConfigHost + { + public virtual object CreateConfigurationContext(string configPath, string locationSubPath) => throw null; + public virtual object CreateDeprecatedConfigContext(string configPath) => throw null; + protected DelegatingConfigHost() => throw null; + public virtual string DecryptSection(string encryptedXml, System.Configuration.ProtectedConfigurationProvider protectionProvider, System.Configuration.ProtectedConfigurationSection protectedConfigSection) => throw null; + public virtual void DeleteStream(string streamName) => throw null; + public virtual string EncryptSection(string clearTextXml, System.Configuration.ProtectedConfigurationProvider protectionProvider, System.Configuration.ProtectedConfigurationSection protectedConfigSection) => throw null; + public virtual string GetConfigPathFromLocationSubPath(string configPath, string locationSubPath) => throw null; + public virtual System.Type GetConfigType(string typeName, bool throwOnError) => throw null; + public virtual string GetConfigTypeName(System.Type t) => throw null; + public virtual void GetRestrictedPermissions(System.Configuration.Internal.IInternalConfigRecord configRecord, out System.Security.PermissionSet permissionSet, out bool isHostReady) => throw null; + public virtual string GetStreamName(string configPath) => throw null; + public virtual string GetStreamNameForConfigSource(string streamName, string configSource) => throw null; + public virtual object GetStreamVersion(string streamName) => throw null; + public virtual bool HasLocalConfig { get => throw null; } + public virtual bool HasRoamingConfig { get => throw null; } + protected System.Configuration.Internal.IInternalConfigHost Host { get => throw null; set { } } + public virtual System.IDisposable Impersonate() => throw null; + public virtual void Init(System.Configuration.Internal.IInternalConfigRoot configRoot, params object[] hostInitParams) => throw null; + public virtual void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, System.Configuration.Internal.IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams) => throw null; + public virtual bool IsAboveApplication(string configPath) => throw null; + public virtual bool IsAppConfigHttp { get => throw null; } + public virtual bool IsConfigRecordRequired(string configPath) => throw null; + public virtual bool IsDefinitionAllowed(string configPath, System.Configuration.ConfigurationAllowDefinition allowDefinition, System.Configuration.ConfigurationAllowExeDefinition allowExeDefinition) => throw null; + public virtual bool IsFile(string streamName) => throw null; + public virtual bool IsFullTrustSectionWithoutAptcaAllowed(System.Configuration.Internal.IInternalConfigRecord configRecord) => throw null; + public virtual bool IsInitDelayed(System.Configuration.Internal.IInternalConfigRecord configRecord) => throw null; + public virtual bool IsLocationApplicable(string configPath) => throw null; + public virtual bool IsRemote { get => throw null; } + public virtual bool IsSecondaryRoot(string configPath) => throw null; + public virtual bool IsTrustedConfigPath(string configPath) => throw null; + public virtual System.IO.Stream OpenStreamForRead(string streamName) => throw null; + public virtual System.IO.Stream OpenStreamForRead(string streamName, bool assertPermissions) => throw null; + public virtual System.IO.Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext) => throw null; + public virtual System.IO.Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext, bool assertPermissions) => throw null; + public virtual bool PrefetchAll(string configPath, string streamName) => throw null; + public virtual bool PrefetchSection(string sectionGroupName, string sectionName) => throw null; + public virtual void RefreshConfigPaths() => throw null; + public virtual void RequireCompleteInit(System.Configuration.Internal.IInternalConfigRecord configRecord) => throw null; + public virtual object StartMonitoringStreamForChanges(string streamName, System.Configuration.Internal.StreamChangeCallback callback) => throw null; + public virtual void StopMonitoringStreamForChanges(string streamName, System.Configuration.Internal.StreamChangeCallback callback) => throw null; + public virtual bool SupportsChangeNotifications { get => throw null; } + public virtual bool SupportsLocation { get => throw null; } + public virtual bool SupportsPath { get => throw null; } + public virtual bool SupportsRefresh { get => throw null; } + public virtual void VerifyDefinitionAllowed(string configPath, System.Configuration.ConfigurationAllowDefinition allowDefinition, System.Configuration.ConfigurationAllowExeDefinition allowExeDefinition, System.Configuration.Internal.IConfigErrorInfo errorInfo) => throw null; + public virtual void WriteCompleted(string streamName, bool success, object writeContext) => throw null; + public virtual void WriteCompleted(string streamName, bool success, object writeContext, bool assertPermissions) => throw null; + } + public interface IConfigErrorInfo + { + string Filename { get; } + int LineNumber { get; } + } + public interface IConfigSystem + { + System.Configuration.Internal.IInternalConfigHost Host { get; } + void Init(System.Type typeConfigHost, params object[] hostInitParams); + System.Configuration.Internal.IInternalConfigRoot Root { get; } + } + public interface IConfigurationManagerHelper + { + void EnsureNetConfigLoaded(); + } + public interface IConfigurationManagerInternal + { + string ApplicationConfigUri { get; } + string ExeLocalConfigDirectory { get; } + string ExeLocalConfigPath { get; } + string ExeProductName { get; } + string ExeProductVersion { get; } + string ExeRoamingConfigDirectory { get; } + string ExeRoamingConfigPath { get; } + string MachineConfigPath { get; } + bool SetConfigurationSystemInProgress { get; } + bool SupportsUserConfig { get; } + string UserConfigFilename { get; } + } + public interface IInternalConfigClientHost + { + string GetExeConfigPath(); + string GetLocalUserConfigPath(); + string GetRoamingUserConfigPath(); + bool IsExeConfig(string configPath); + bool IsLocalUserConfig(string configPath); + bool IsRoamingUserConfig(string configPath); + } + public interface IInternalConfigConfigurationFactory + { + System.Configuration.Configuration Create(System.Type typeConfigHost, params object[] hostInitConfigurationParams); + string NormalizeLocationSubPath(string subPath, System.Configuration.Internal.IConfigErrorInfo errorInfo); + } + public interface IInternalConfigHost + { + object CreateConfigurationContext(string configPath, string locationSubPath); + object CreateDeprecatedConfigContext(string configPath); + string DecryptSection(string encryptedXml, System.Configuration.ProtectedConfigurationProvider protectionProvider, System.Configuration.ProtectedConfigurationSection protectedConfigSection); + void DeleteStream(string streamName); + string EncryptSection(string clearTextXml, System.Configuration.ProtectedConfigurationProvider protectionProvider, System.Configuration.ProtectedConfigurationSection protectedConfigSection); + string GetConfigPathFromLocationSubPath(string configPath, string locationSubPath); + System.Type GetConfigType(string typeName, bool throwOnError); + string GetConfigTypeName(System.Type t); + void GetRestrictedPermissions(System.Configuration.Internal.IInternalConfigRecord configRecord, out System.Security.PermissionSet permissionSet, out bool isHostReady); + string GetStreamName(string configPath); + string GetStreamNameForConfigSource(string streamName, string configSource); + object GetStreamVersion(string streamName); + System.IDisposable Impersonate(); + void Init(System.Configuration.Internal.IInternalConfigRoot configRoot, params object[] hostInitParams); + void InitForConfiguration(ref string locationSubPath, out string configPath, out string locationConfigPath, System.Configuration.Internal.IInternalConfigRoot configRoot, params object[] hostInitConfigurationParams); + bool IsAboveApplication(string configPath); + bool IsConfigRecordRequired(string configPath); + bool IsDefinitionAllowed(string configPath, System.Configuration.ConfigurationAllowDefinition allowDefinition, System.Configuration.ConfigurationAllowExeDefinition allowExeDefinition); + bool IsFile(string streamName); + bool IsFullTrustSectionWithoutAptcaAllowed(System.Configuration.Internal.IInternalConfigRecord configRecord); + bool IsInitDelayed(System.Configuration.Internal.IInternalConfigRecord configRecord); + bool IsLocationApplicable(string configPath); + bool IsRemote { get; } + bool IsSecondaryRoot(string configPath); + bool IsTrustedConfigPath(string configPath); + System.IO.Stream OpenStreamForRead(string streamName); + System.IO.Stream OpenStreamForRead(string streamName, bool assertPermissions); + System.IO.Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext); + System.IO.Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext, bool assertPermissions); + bool PrefetchAll(string configPath, string streamName); + bool PrefetchSection(string sectionGroupName, string sectionName); + void RequireCompleteInit(System.Configuration.Internal.IInternalConfigRecord configRecord); + object StartMonitoringStreamForChanges(string streamName, System.Configuration.Internal.StreamChangeCallback callback); + void StopMonitoringStreamForChanges(string streamName, System.Configuration.Internal.StreamChangeCallback callback); + bool SupportsChangeNotifications { get; } + bool SupportsLocation { get; } + bool SupportsPath { get; } + bool SupportsRefresh { get; } + void VerifyDefinitionAllowed(string configPath, System.Configuration.ConfigurationAllowDefinition allowDefinition, System.Configuration.ConfigurationAllowExeDefinition allowExeDefinition, System.Configuration.Internal.IConfigErrorInfo errorInfo); + void WriteCompleted(string streamName, bool success, object writeContext); + void WriteCompleted(string streamName, bool success, object writeContext, bool assertPermissions); + } + public interface IInternalConfigRecord + { + string ConfigPath { get; } + object GetLkgSection(string configKey); + object GetSection(string configKey); + bool HasInitErrors { get; } + void RefreshSection(string configKey); + void Remove(); + string StreamName { get; } + void ThrowIfInitErrors(); + } + public interface IInternalConfigRoot + { + event System.Configuration.Internal.InternalConfigEventHandler ConfigChanged; + event System.Configuration.Internal.InternalConfigEventHandler ConfigRemoved; + System.Configuration.Internal.IInternalConfigRecord GetConfigRecord(string configPath); + object GetSection(string section, string configPath); + string GetUniqueConfigPath(string configPath); + System.Configuration.Internal.IInternalConfigRecord GetUniqueConfigRecord(string configPath); + void Init(System.Configuration.Internal.IInternalConfigHost host, bool isDesignTime); + bool IsDesignTime { get; } + void RemoveConfig(string configPath); + } + public interface IInternalConfigSettingsFactory + { + void CompleteInit(); + void SetConfigurationSystem(System.Configuration.Internal.IInternalConfigSystem internalConfigSystem, bool initComplete); + } + public interface IInternalConfigSystem + { + object GetSection(string configKey); + void RefreshConfig(string sectionName); + bool SupportsUserConfig { get; } + } + public sealed class InternalConfigEventArgs : System.EventArgs + { + public string ConfigPath { get => throw null; set { } } + public InternalConfigEventArgs(string configPath) => throw null; + } + public delegate void InternalConfigEventHandler(object sender, System.Configuration.Internal.InternalConfigEventArgs e); + public delegate void StreamChangeCallback(string streamName); + } + public interface IPersistComponentSettings + { + void LoadComponentSettings(); + void ResetComponentSettings(); + void SaveComponentSettings(); + bool SaveSettings { get; set; } + string SettingsKey { get; set; } + } + public sealed class IriParsingElement : System.Configuration.ConfigurationElement + { + public IriParsingElement() => throw null; + public bool Enabled { get => throw null; set { } } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + } + public interface ISettingsProviderService + { + System.Configuration.SettingsProvider GetSettingsProvider(System.Configuration.SettingsProperty property); + } + public class KeyValueConfigurationCollection : System.Configuration.ConfigurationElementCollection + { + public void Add(System.Configuration.KeyValueConfigurationElement keyValue) => throw null; + public void Add(string key, string value) => throw null; + public string[] AllKeys { get => throw null; } + public void Clear() => throw null; + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public KeyValueConfigurationCollection() => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public void Remove(string key) => throw null; + public System.Configuration.KeyValueConfigurationElement this[string key] { get => throw null; } + protected override bool ThrowOnDuplicate { get => throw null; } + } + public class KeyValueConfigurationElement : System.Configuration.ConfigurationElement + { + public KeyValueConfigurationElement(string key, string value) => throw null; + protected override void Init() => throw null; + public string Key { get => throw null; } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public string Value { get => throw null; set { } } + } + public class LocalFileSettingsProvider : System.Configuration.SettingsProvider, System.Configuration.IApplicationSettingsProvider + { + public override string ApplicationName { get => throw null; set { } } + public LocalFileSettingsProvider() => throw null; + public System.Configuration.SettingsPropertyValue GetPreviousVersion(System.Configuration.SettingsContext context, System.Configuration.SettingsProperty property) => throw null; + public override System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection properties) => throw null; + public override void Initialize(string name, System.Collections.Specialized.NameValueCollection values) => throw null; + public void Reset(System.Configuration.SettingsContext context) => throw null; + public override void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection values) => throw null; + public void Upgrade(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection properties) => throw null; + } + public class LongValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public LongValidator(long minValue, long maxValue) => throw null; + public LongValidator(long minValue, long maxValue, bool rangeIsExclusive) => throw null; + public LongValidator(long minValue, long maxValue, bool rangeIsExclusive, long resolution) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class LongValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public LongValidatorAttribute() => throw null; + public bool ExcludeRange { get => throw null; set { } } + public long MaxValue { get => throw null; set { } } + public long MinValue { get => throw null; set { } } + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class NameValueConfigurationCollection : System.Configuration.ConfigurationElementCollection + { + public void Add(System.Configuration.NameValueConfigurationElement nameValue) => throw null; + public string[] AllKeys { get => throw null; } + public void Clear() => throw null; + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public NameValueConfigurationCollection() => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public void Remove(System.Configuration.NameValueConfigurationElement nameValue) => throw null; + public void Remove(string name) => throw null; + public System.Configuration.NameValueConfigurationElement this[string name] { get => throw null; set { } } + } + public sealed class NameValueConfigurationElement : System.Configuration.ConfigurationElement + { + public NameValueConfigurationElement(string name, string value) => throw null; + public string Name { get => throw null; } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public string Value { get => throw null; set { } } + } + public class NameValueFileSectionHandler : System.Configuration.IConfigurationSectionHandler + { + public object Create(object parent, object configContext, System.Xml.XmlNode section) => throw null; + public NameValueFileSectionHandler() => throw null; + } + public class NameValueSectionHandler : System.Configuration.IConfigurationSectionHandler + { + public object Create(object parent, object context, System.Xml.XmlNode section) => throw null; + public NameValueSectionHandler() => throw null; + protected virtual string KeyAttributeName { get => throw null; } + protected virtual string ValueAttributeName { get => throw null; } + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class NoSettingsVersionUpgradeAttribute : System.Attribute + { + public NoSettingsVersionUpgradeAttribute() => throw null; + } + public enum OverrideMode + { + Inherit = 0, + Allow = 1, + Deny = 2, + } + public class PositiveTimeSpanValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public PositiveTimeSpanValidator() => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class PositiveTimeSpanValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public PositiveTimeSpanValidatorAttribute() => throw null; + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class PropertyInformation + { + public System.ComponentModel.TypeConverter Converter { get => throw null; } + public object DefaultValue { get => throw null; } + public string Description { get => throw null; } + public bool IsKey { get => throw null; } + public bool IsLocked { get => throw null; } + public bool IsModified { get => throw null; } + public bool IsRequired { get => throw null; } + public int LineNumber { get => throw null; } + public string Name { get => throw null; } + public string Source { get => throw null; } + public System.Type Type { get => throw null; } + public System.Configuration.ConfigurationValidatorBase Validator { get => throw null; } + public object Value { get => throw null; set { } } + public System.Configuration.PropertyValueOrigin ValueOrigin { get => throw null; } + } + public sealed class PropertyInformationCollection : System.Collections.Specialized.NameObjectCollectionBase + { + public void CopyTo(System.Configuration.PropertyInformation[] array, int index) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public System.Configuration.PropertyInformation this[string propertyName] { get => throw null; } + } + public enum PropertyValueOrigin + { + Default = 0, + Inherited = 1, + SetHere = 2, + } + public static class ProtectedConfiguration + { + public const string DataProtectionProviderName = default; + public static string DefaultProvider { get => throw null; } + public const string ProtectedDataSectionName = default; + public static System.Configuration.ProtectedConfigurationProviderCollection Providers { get => throw null; } + public const string RsaProviderName = default; + } + public abstract class ProtectedConfigurationProvider : System.Configuration.Provider.ProviderBase + { + protected ProtectedConfigurationProvider() => throw null; + public abstract System.Xml.XmlNode Decrypt(System.Xml.XmlNode encryptedNode); + public abstract System.Xml.XmlNode Encrypt(System.Xml.XmlNode node); + } + public class ProtectedConfigurationProviderCollection : System.Configuration.Provider.ProviderCollection + { + public override void Add(System.Configuration.Provider.ProviderBase provider) => throw null; + public ProtectedConfigurationProviderCollection() => throw null; + public System.Configuration.ProtectedConfigurationProvider this[string name] { get => throw null; } + } + public sealed class ProtectedConfigurationSection : System.Configuration.ConfigurationSection + { + public ProtectedConfigurationSection() => throw null; + public string DefaultProvider { get => throw null; set { } } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public System.Configuration.ProviderSettingsCollection Providers { get => throw null; } + } + public class ProtectedProviderSettings : System.Configuration.ConfigurationElement + { + public ProtectedProviderSettings() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public System.Configuration.ProviderSettingsCollection Providers { get => throw null; } + } + namespace Provider + { + public abstract class ProviderBase + { + protected ProviderBase() => throw null; + public virtual string Description { get => throw null; } + public virtual void Initialize(string name, System.Collections.Specialized.NameValueCollection config) => throw null; + public virtual string Name { get => throw null; } + } + public class ProviderCollection : System.Collections.ICollection, System.Collections.IEnumerable + { + public virtual void Add(System.Configuration.Provider.ProviderBase provider) => throw null; + public void Clear() => throw null; + void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Configuration.Provider.ProviderBase[] array, int index) => throw null; + public int Count { get => throw null; } + public ProviderCollection() => throw null; + public System.Collections.IEnumerator GetEnumerator() => throw null; + public bool IsSynchronized { get => throw null; } + public void Remove(string name) => throw null; + public void SetReadOnly() => throw null; + public object SyncRoot { get => throw null; } + public System.Configuration.Provider.ProviderBase this[string name] { get => throw null; } + } + public class ProviderException : System.Exception + { + public ProviderException() => throw null; + public ProviderException(string message) => throw null; + public ProviderException(string message, System.Exception innerException) => throw null; + protected ProviderException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + } + } + public sealed class ProviderSettings : System.Configuration.ConfigurationElement + { + public ProviderSettings() => throw null; + public ProviderSettings(string name, string type) => throw null; + protected override bool IsModified() => throw null; + public string Name { get => throw null; set { } } + protected override bool OnDeserializeUnrecognizedAttribute(string name, string value) => throw null; + public System.Collections.Specialized.NameValueCollection Parameters { get => throw null; } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected override void Reset(System.Configuration.ConfigurationElement parentElement) => throw null; + public string Type { get => throw null; set { } } + protected override void Unmerge(System.Configuration.ConfigurationElement sourceElement, System.Configuration.ConfigurationElement parentElement, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + } + public sealed class ProviderSettingsCollection : System.Configuration.ConfigurationElementCollection + { + public void Add(System.Configuration.ProviderSettings provider) => throw null; + public void Clear() => throw null; + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public ProviderSettingsCollection() => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public void Remove(string name) => throw null; + public System.Configuration.ProviderSettings this[string key] { get => throw null; } + public System.Configuration.ProviderSettings this[int index] { get => throw null; set { } } + } + public class RegexStringValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public RegexStringValidator(string regex) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class RegexStringValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public RegexStringValidatorAttribute(string regex) => throw null; + public string Regex { get => throw null; } + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class RsaProtectedConfigurationProvider : System.Configuration.ProtectedConfigurationProvider + { + public void AddKey(int keySize, bool exportable) => throw null; + public string CspProviderName { get => throw null; } + public RsaProtectedConfigurationProvider() => throw null; + public override System.Xml.XmlNode Decrypt(System.Xml.XmlNode encryptedNode) => throw null; + public void DeleteKey() => throw null; + public override System.Xml.XmlNode Encrypt(System.Xml.XmlNode node) => throw null; + public void ExportKey(string xmlFileName, bool includePrivateParameters) => throw null; + public void ImportKey(string xmlFileName, bool exportable) => throw null; + public string KeyContainerName { get => throw null; } + public System.Security.Cryptography.RSAParameters RsaPublicKey { get => throw null; } + public bool UseFIPS { get => throw null; } + public bool UseMachineContainer { get => throw null; } + public bool UseOAEP { get => throw null; } + } + public sealed class SchemeSettingElement : System.Configuration.ConfigurationElement + { + public SchemeSettingElement() => throw null; + public System.GenericUriParserOptions GenericUriParserOptions { get => throw null; } + public string Name { get => throw null; } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + } + public sealed class SchemeSettingElementCollection : System.Configuration.ConfigurationElementCollection + { + public override System.Configuration.ConfigurationElementCollectionType CollectionType { get => throw null; } + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public SchemeSettingElementCollection() => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + public int IndexOf(System.Configuration.SchemeSettingElement element) => throw null; + public System.Configuration.SchemeSettingElement this[int index] { get => throw null; } + public System.Configuration.SchemeSettingElement this[string name] { get => throw null; } + } + public sealed class SectionInformation + { + public System.Configuration.ConfigurationAllowDefinition AllowDefinition { get => throw null; set { } } + public System.Configuration.ConfigurationAllowExeDefinition AllowExeDefinition { get => throw null; set { } } + public bool AllowLocation { get => throw null; set { } } + public bool AllowOverride { get => throw null; set { } } + public string ConfigSource { get => throw null; set { } } + public void ForceDeclaration() => throw null; + public void ForceDeclaration(bool force) => throw null; + public bool ForceSave { get => throw null; set { } } + public System.Configuration.ConfigurationSection GetParentSection() => throw null; + public string GetRawXml() => throw null; + public bool InheritInChildApplications { get => throw null; set { } } + public bool IsDeclarationRequired { get => throw null; } + public bool IsDeclared { get => throw null; } + public bool IsLocked { get => throw null; } + public bool IsProtected { get => throw null; } + public string Name { get => throw null; } + public System.Configuration.OverrideMode OverrideMode { get => throw null; set { } } + public System.Configuration.OverrideMode OverrideModeDefault { get => throw null; set { } } + public System.Configuration.OverrideMode OverrideModeEffective { get => throw null; } + public System.Configuration.ProtectedConfigurationProvider ProtectionProvider { get => throw null; } + public void ProtectSection(string protectionProvider) => throw null; + public bool RequirePermission { get => throw null; set { } } + public bool RestartOnExternalChanges { get => throw null; set { } } + public void RevertToParent() => throw null; + public string SectionName { get => throw null; } + public void SetRawXml(string rawXml) => throw null; + public string Type { get => throw null; set { } } + public void UnprotectSection() => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public class SettingAttribute : System.Attribute + { + public SettingAttribute() => throw null; + } + public class SettingChangingEventArgs : System.ComponentModel.CancelEventArgs + { + public SettingChangingEventArgs(string settingName, string settingClass, string settingKey, object newValue, bool cancel) => throw null; + public object NewValue { get => throw null; } + public string SettingClass { get => throw null; } + public string SettingKey { get => throw null; } + public string SettingName { get => throw null; } + } + public delegate void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e); + public sealed class SettingElement : System.Configuration.ConfigurationElement + { + public SettingElement() => throw null; + public SettingElement(string name, System.Configuration.SettingsSerializeAs serializeAs) => throw null; + public override bool Equals(object settings) => throw null; + public override int GetHashCode() => throw null; + public string Name { get => throw null; set { } } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public System.Configuration.SettingsSerializeAs SerializeAs { get => throw null; set { } } + public System.Configuration.SettingValueElement Value { get => throw null; set { } } + } + public sealed class SettingElementCollection : System.Configuration.ConfigurationElementCollection + { + public void Add(System.Configuration.SettingElement element) => throw null; + public void Clear() => throw null; + public override System.Configuration.ConfigurationElementCollectionType CollectionType { get => throw null; } + protected override System.Configuration.ConfigurationElement CreateNewElement() => throw null; + public SettingElementCollection() => throw null; + protected override string ElementName { get => throw null; } + public System.Configuration.SettingElement Get(string elementKey) => throw null; + protected override object GetElementKey(System.Configuration.ConfigurationElement element) => throw null; + public void Remove(System.Configuration.SettingElement element) => throw null; + } + public class SettingsAttributeDictionary : System.Collections.Hashtable + { + public SettingsAttributeDictionary() => throw null; + public SettingsAttributeDictionary(System.Configuration.SettingsAttributeDictionary attributes) => throw null; + protected SettingsAttributeDictionary(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null; + } + public abstract class SettingsBase + { + public virtual System.Configuration.SettingsContext Context { get => throw null; } + protected SettingsBase() => throw null; + public void Initialize(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection properties, System.Configuration.SettingsProviderCollection providers) => throw null; + public bool IsSynchronized { get => throw null; } + public virtual System.Configuration.SettingsPropertyCollection Properties { get => throw null; } + public virtual System.Configuration.SettingsPropertyValueCollection PropertyValues { get => throw null; } + public virtual System.Configuration.SettingsProviderCollection Providers { get => throw null; } + public virtual void Save() => throw null; + public static System.Configuration.SettingsBase Synchronized(System.Configuration.SettingsBase settingsBase) => throw null; + public virtual object this[string propertyName] { get => throw null; set { } } + } + public class SettingsContext : System.Collections.Hashtable + { + public SettingsContext() => throw null; + protected SettingsContext(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class SettingsDescriptionAttribute : System.Attribute + { + public SettingsDescriptionAttribute(string description) => throw null; + public string Description { get => throw null; } + } + [System.AttributeUsage((System.AttributeTargets)4)] + public sealed class SettingsGroupDescriptionAttribute : System.Attribute + { + public SettingsGroupDescriptionAttribute(string description) => throw null; + public string Description { get => throw null; } + } + [System.AttributeUsage((System.AttributeTargets)4)] + public sealed class SettingsGroupNameAttribute : System.Attribute + { + public SettingsGroupNameAttribute(string groupName) => throw null; + public string GroupName { get => throw null; } + } + public class SettingsLoadedEventArgs : System.EventArgs + { + public SettingsLoadedEventArgs(System.Configuration.SettingsProvider provider) => throw null; + public System.Configuration.SettingsProvider Provider { get => throw null; } + } + public delegate void SettingsLoadedEventHandler(object sender, System.Configuration.SettingsLoadedEventArgs e); + public enum SettingsManageability + { + Roaming = 0, + } + [System.AttributeUsage((System.AttributeTargets)132)] + public sealed class SettingsManageabilityAttribute : System.Attribute + { + public SettingsManageabilityAttribute(System.Configuration.SettingsManageability manageability) => throw null; + public System.Configuration.SettingsManageability Manageability { get => throw null; } + } + public class SettingsProperty + { + public virtual System.Configuration.SettingsAttributeDictionary Attributes { get => throw null; } + public SettingsProperty(string name) => throw null; + public SettingsProperty(string name, System.Type propertyType, System.Configuration.SettingsProvider provider, bool isReadOnly, object defaultValue, System.Configuration.SettingsSerializeAs serializeAs, System.Configuration.SettingsAttributeDictionary attributes, bool throwOnErrorDeserializing, bool throwOnErrorSerializing) => throw null; + public SettingsProperty(System.Configuration.SettingsProperty propertyToCopy) => throw null; + public virtual object DefaultValue { get => throw null; set { } } + public virtual bool IsReadOnly { get => throw null; set { } } + public virtual string Name { get => throw null; set { } } + public virtual System.Type PropertyType { get => throw null; set { } } + public virtual System.Configuration.SettingsProvider Provider { get => throw null; set { } } + public virtual System.Configuration.SettingsSerializeAs SerializeAs { get => throw null; set { } } + public bool ThrowOnErrorDeserializing { get => throw null; set { } } + public bool ThrowOnErrorSerializing { get => throw null; set { } } + } + public class SettingsPropertyCollection : System.ICloneable, System.Collections.ICollection, System.Collections.IEnumerable + { + public void Add(System.Configuration.SettingsProperty property) => throw null; + public void Clear() => throw null; + public object Clone() => throw null; + public void CopyTo(System.Array array, int index) => throw null; + public int Count { get => throw null; } + public SettingsPropertyCollection() => throw null; + public System.Collections.IEnumerator GetEnumerator() => throw null; + public bool IsSynchronized { get => throw null; } + protected virtual void OnAdd(System.Configuration.SettingsProperty property) => throw null; + protected virtual void OnAddComplete(System.Configuration.SettingsProperty property) => throw null; + protected virtual void OnClear() => throw null; + protected virtual void OnClearComplete() => throw null; + protected virtual void OnRemove(System.Configuration.SettingsProperty property) => throw null; + protected virtual void OnRemoveComplete(System.Configuration.SettingsProperty property) => throw null; + public void Remove(string name) => throw null; + public void SetReadOnly() => throw null; + public object SyncRoot { get => throw null; } + public System.Configuration.SettingsProperty this[string name] { get => throw null; } + } + public class SettingsPropertyIsReadOnlyException : System.Exception + { + public SettingsPropertyIsReadOnlyException(string message) => throw null; + public SettingsPropertyIsReadOnlyException(string message, System.Exception innerException) => throw null; + protected SettingsPropertyIsReadOnlyException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public SettingsPropertyIsReadOnlyException() => throw null; + } + public class SettingsPropertyNotFoundException : System.Exception + { + public SettingsPropertyNotFoundException(string message) => throw null; + public SettingsPropertyNotFoundException(string message, System.Exception innerException) => throw null; + protected SettingsPropertyNotFoundException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public SettingsPropertyNotFoundException() => throw null; + } + public class SettingsPropertyValue + { + public SettingsPropertyValue(System.Configuration.SettingsProperty property) => throw null; + public bool Deserialized { get => throw null; set { } } + public bool IsDirty { get => throw null; set { } } + public string Name { get => throw null; } + public System.Configuration.SettingsProperty Property { get => throw null; } + public object PropertyValue { get => throw null; set { } } + public object SerializedValue { get => throw null; set { } } + public bool UsingDefaultValue { get => throw null; } + } + public class SettingsPropertyValueCollection : System.ICloneable, System.Collections.ICollection, System.Collections.IEnumerable + { + public void Add(System.Configuration.SettingsPropertyValue property) => throw null; + public void Clear() => throw null; + public object Clone() => throw null; + public void CopyTo(System.Array array, int index) => throw null; + public int Count { get => throw null; } + public SettingsPropertyValueCollection() => throw null; + public System.Collections.IEnumerator GetEnumerator() => throw null; + public bool IsSynchronized { get => throw null; } + public void Remove(string name) => throw null; + public void SetReadOnly() => throw null; + public object SyncRoot { get => throw null; } + public System.Configuration.SettingsPropertyValue this[string name] { get => throw null; } + } + public class SettingsPropertyWrongTypeException : System.Exception + { + public SettingsPropertyWrongTypeException(string message) => throw null; + public SettingsPropertyWrongTypeException(string message, System.Exception innerException) => throw null; + protected SettingsPropertyWrongTypeException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; + public SettingsPropertyWrongTypeException() => throw null; + } + public abstract class SettingsProvider : System.Configuration.Provider.ProviderBase + { + public abstract string ApplicationName { get; set; } + protected SettingsProvider() => throw null; + public abstract System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection collection); + public abstract void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection collection); + } + [System.AttributeUsage((System.AttributeTargets)132)] + public sealed class SettingsProviderAttribute : System.Attribute + { + public SettingsProviderAttribute(string providerTypeName) => throw null; + public SettingsProviderAttribute(System.Type providerType) => throw null; + public string ProviderTypeName { get => throw null; } + } + public class SettingsProviderCollection : System.Configuration.Provider.ProviderCollection + { + public override void Add(System.Configuration.Provider.ProviderBase provider) => throw null; + public SettingsProviderCollection() => throw null; + public System.Configuration.SettingsProvider this[string name] { get => throw null; } + } + public delegate void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e); + public enum SettingsSerializeAs + { + String = 0, + Xml = 1, + Binary = 2, + ProviderSpecific = 3, + } + [System.AttributeUsage((System.AttributeTargets)132)] + public sealed class SettingsSerializeAsAttribute : System.Attribute + { + public SettingsSerializeAsAttribute(System.Configuration.SettingsSerializeAs serializeAs) => throw null; + public System.Configuration.SettingsSerializeAs SerializeAs { get => throw null; } + } + public sealed class SettingValueElement : System.Configuration.ConfigurationElement + { + public SettingValueElement() => throw null; + protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey) => throw null; + public override bool Equals(object settingValue) => throw null; + public override int GetHashCode() => throw null; + protected override bool IsModified() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + protected override void Reset(System.Configuration.ConfigurationElement parentElement) => throw null; + protected override void ResetModified() => throw null; + protected override bool SerializeToXmlElement(System.Xml.XmlWriter writer, string elementName) => throw null; + protected override void Unmerge(System.Configuration.ConfigurationElement sourceElement, System.Configuration.ConfigurationElement parentElement, System.Configuration.ConfigurationSaveMode saveMode) => throw null; + public System.Xml.XmlNode ValueXml { get => throw null; set { } } + } + public class SingleTagSectionHandler : System.Configuration.IConfigurationSectionHandler + { + public virtual object Create(object parent, object context, System.Xml.XmlNode section) => throw null; + public SingleTagSectionHandler() => throw null; + } + public enum SpecialSetting + { + ConnectionString = 0, + WebServiceUrl = 1, + } + [System.AttributeUsage((System.AttributeTargets)132)] + public sealed class SpecialSettingAttribute : System.Attribute + { + public SpecialSettingAttribute(System.Configuration.SpecialSetting specialSetting) => throw null; + public System.Configuration.SpecialSetting SpecialSetting { get => throw null; } + } + public class StringValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public StringValidator(int minLength) => throw null; + public StringValidator(int minLength, int maxLength) => throw null; + public StringValidator(int minLength, int maxLength, string invalidCharacters) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class StringValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public StringValidatorAttribute() => throw null; + public string InvalidCharacters { get => throw null; set { } } + public int MaxLength { get => throw null; set { } } + public int MinLength { get => throw null; set { } } + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class SubclassTypeValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public SubclassTypeValidator(System.Type baseClass) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class SubclassTypeValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public System.Type BaseClass { get => throw null; } + public SubclassTypeValidatorAttribute(System.Type baseClass) => throw null; + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public class TimeSpanMinutesConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public TimeSpanMinutesConverter() => throw null; + } + public sealed class TimeSpanMinutesOrInfiniteConverter : System.Configuration.TimeSpanMinutesConverter + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public TimeSpanMinutesOrInfiniteConverter() => throw null; + } + public class TimeSpanSecondsConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public TimeSpanSecondsConverter() => throw null; + } + public sealed class TimeSpanSecondsOrInfiniteConverter : System.Configuration.TimeSpanSecondsConverter + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public TimeSpanSecondsOrInfiniteConverter() => throw null; + } + public class TimeSpanValidator : System.Configuration.ConfigurationValidatorBase + { + public override bool CanValidate(System.Type type) => throw null; + public TimeSpanValidator(System.TimeSpan minValue, System.TimeSpan maxValue) => throw null; + public TimeSpanValidator(System.TimeSpan minValue, System.TimeSpan maxValue, bool rangeIsExclusive) => throw null; + public TimeSpanValidator(System.TimeSpan minValue, System.TimeSpan maxValue, bool rangeIsExclusive, long resolutionInSeconds) => throw null; + public override void Validate(object value) => throw null; + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class TimeSpanValidatorAttribute : System.Configuration.ConfigurationValidatorAttribute + { + public TimeSpanValidatorAttribute() => throw null; + public bool ExcludeRange { get => throw null; set { } } + public System.TimeSpan MaxValue { get => throw null; } + public string MaxValueString { get => throw null; set { } } + public System.TimeSpan MinValue { get => throw null; } + public string MinValueString { get => throw null; set { } } + public const string TimeSpanMaxValue = default; + public const string TimeSpanMinValue = default; + public override System.Configuration.ConfigurationValidatorBase ValidatorInstance { get => throw null; } + } + public sealed class TypeNameConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public TypeNameConverter() => throw null; + } + public sealed class UriSection : System.Configuration.ConfigurationSection + { + public UriSection() => throw null; + public System.Configuration.IdnElement Idn { get => throw null; } + public System.Configuration.IriParsingElement IriParsing { get => throw null; } + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + public System.Configuration.SchemeSettingElementCollection SchemeSettings { get => throw null; } + } + [System.AttributeUsage((System.AttributeTargets)128)] + public sealed class UserScopedSettingAttribute : System.Configuration.SettingAttribute + { + public UserScopedSettingAttribute() => throw null; + } + public sealed class UserSettingsGroup : System.Configuration.ConfigurationSectionGroup + { + public UserSettingsGroup() => throw null; + } + public delegate void ValidatorCallback(object value); + public sealed class WhiteSpaceTrimStringConverter : System.Configuration.ConfigurationConverterBase + { + public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object data) => throw null; + public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext ctx, System.Globalization.CultureInfo ci, object value, System.Type type) => throw null; + public WhiteSpaceTrimStringConverter() => throw null; + } + } + namespace Diagnostics + { + public static class TraceConfiguration + { + public static void Register() => throw null; + } + } + namespace Drawing + { + namespace Configuration + { + public sealed class SystemDrawingSection : System.Configuration.ConfigurationSection + { + public string BitmapSuffix { get => throw null; set { } } + public SystemDrawingSection() => throw null; + protected override System.Configuration.ConfigurationPropertyCollection Properties { get => throw null; } + } + } + } + public enum UriIdnScope + { + None = 0, + AllExceptIntranet = 1, + All = 2, + } +} diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.csproj b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.csproj new file mode 100644 index 00000000000..aca3cc90fda --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/8.0.0/System.Configuration.ConfigurationManager.csproj @@ -0,0 +1,14 @@ + + + net8.0 + true + bin\ + false + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.cs b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.cs new file mode 100644 index 00000000000..35f5a3bf3d2 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.cs @@ -0,0 +1,449 @@ +// This file contains auto-generated code. +// Generated from `System.Data.OleDb, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51`. +namespace System +{ + namespace Data + { + namespace OleDb + { + public sealed class OleDbCommand : System.Data.Common.DbCommand, System.ICloneable, System.Data.IDbCommand, System.IDisposable + { + public override void Cancel() => throw null; + public System.Data.OleDb.OleDbCommand Clone() => throw null; + object System.ICloneable.Clone() => throw null; + public override string CommandText { get => throw null; set { } } + public override int CommandTimeout { get => throw null; set { } } + public override System.Data.CommandType CommandType { get => throw null; set { } } + public System.Data.OleDb.OleDbConnection Connection { get => throw null; set { } } + protected override System.Data.Common.DbParameter CreateDbParameter() => throw null; + public System.Data.OleDb.OleDbParameter CreateParameter() => throw null; + public OleDbCommand() => throw null; + public OleDbCommand(string cmdText) => throw null; + public OleDbCommand(string cmdText, System.Data.OleDb.OleDbConnection connection) => throw null; + public OleDbCommand(string cmdText, System.Data.OleDb.OleDbConnection connection, System.Data.OleDb.OleDbTransaction transaction) => throw null; + protected override System.Data.Common.DbConnection DbConnection { get => throw null; set { } } + protected override System.Data.Common.DbParameterCollection DbParameterCollection { get => throw null; } + protected override System.Data.Common.DbTransaction DbTransaction { get => throw null; set { } } + public override bool DesignTimeVisible { get => throw null; set { } } + protected override void Dispose(bool disposing) => throw null; + protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) => throw null; + public override int ExecuteNonQuery() => throw null; + public System.Data.OleDb.OleDbDataReader ExecuteReader() => throw null; + public System.Data.OleDb.OleDbDataReader ExecuteReader(System.Data.CommandBehavior behavior) => throw null; + System.Data.IDataReader System.Data.IDbCommand.ExecuteReader() => throw null; + System.Data.IDataReader System.Data.IDbCommand.ExecuteReader(System.Data.CommandBehavior behavior) => throw null; + public override object ExecuteScalar() => throw null; + public System.Data.OleDb.OleDbParameterCollection Parameters { get => throw null; } + public override void Prepare() => throw null; + public void ResetCommandTimeout() => throw null; + public System.Data.OleDb.OleDbTransaction Transaction { get => throw null; set { } } + public override System.Data.UpdateRowSource UpdatedRowSource { get => throw null; set { } } + } + public sealed class OleDbCommandBuilder : System.Data.Common.DbCommandBuilder + { + protected override void ApplyParameterInfo(System.Data.Common.DbParameter parameter, System.Data.DataRow datarow, System.Data.StatementType statementType, bool whereClause) => throw null; + public OleDbCommandBuilder() => throw null; + public OleDbCommandBuilder(System.Data.OleDb.OleDbDataAdapter adapter) => throw null; + public System.Data.OleDb.OleDbDataAdapter DataAdapter { get => throw null; set { } } + public static void DeriveParameters(System.Data.OleDb.OleDbCommand command) => throw null; + public System.Data.OleDb.OleDbCommand GetDeleteCommand() => throw null; + public System.Data.OleDb.OleDbCommand GetDeleteCommand(bool useColumnsForParameterNames) => throw null; + public System.Data.OleDb.OleDbCommand GetInsertCommand() => throw null; + public System.Data.OleDb.OleDbCommand GetInsertCommand(bool useColumnsForParameterNames) => throw null; + protected override string GetParameterName(int parameterOrdinal) => throw null; + protected override string GetParameterName(string parameterName) => throw null; + protected override string GetParameterPlaceholder(int parameterOrdinal) => throw null; + public System.Data.OleDb.OleDbCommand GetUpdateCommand() => throw null; + public System.Data.OleDb.OleDbCommand GetUpdateCommand(bool useColumnsForParameterNames) => throw null; + public override string QuoteIdentifier(string unquotedIdentifier) => throw null; + public string QuoteIdentifier(string unquotedIdentifier, System.Data.OleDb.OleDbConnection connection) => throw null; + protected override void SetRowUpdatingHandler(System.Data.Common.DbDataAdapter adapter) => throw null; + public override string UnquoteIdentifier(string quotedIdentifier) => throw null; + public string UnquoteIdentifier(string quotedIdentifier, System.Data.OleDb.OleDbConnection connection) => throw null; + } + public sealed class OleDbConnection : System.Data.Common.DbConnection, System.ICloneable, System.Data.IDbConnection, System.IDisposable + { + protected override System.Data.Common.DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel) => throw null; + public System.Data.OleDb.OleDbTransaction BeginTransaction() => throw null; + public System.Data.OleDb.OleDbTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel) => throw null; + public override void ChangeDatabase(string value) => throw null; + object System.ICloneable.Clone() => throw null; + public override void Close() => throw null; + public override string ConnectionString { get => throw null; set { } } + public override int ConnectionTimeout { get => throw null; } + public System.Data.OleDb.OleDbCommand CreateCommand() => throw null; + protected override System.Data.Common.DbCommand CreateDbCommand() => throw null; + public OleDbConnection() => throw null; + public OleDbConnection(string connectionString) => throw null; + public override string Database { get => throw null; } + public override string DataSource { get => throw null; } + protected override void Dispose(bool disposing) => throw null; + public override void EnlistTransaction(System.Transactions.Transaction transaction) => throw null; + public System.Data.DataTable GetOleDbSchemaTable(System.Guid schema, object[] restrictions) => throw null; + public override System.Data.DataTable GetSchema() => throw null; + public override System.Data.DataTable GetSchema(string collectionName) => throw null; + public override System.Data.DataTable GetSchema(string collectionName, string[] restrictionValues) => throw null; + public event System.Data.OleDb.OleDbInfoMessageEventHandler InfoMessage; + public override void Open() => throw null; + public string Provider { get => throw null; } + public static void ReleaseObjectPool() => throw null; + public void ResetState() => throw null; + public override string ServerVersion { get => throw null; } + public override System.Data.ConnectionState State { get => throw null; } + } + public sealed class OleDbConnectionStringBuilder : System.Data.Common.DbConnectionStringBuilder + { + public override void Clear() => throw null; + public override bool ContainsKey(string keyword) => throw null; + public OleDbConnectionStringBuilder() => throw null; + public OleDbConnectionStringBuilder(string connectionString) => throw null; + public string DataSource { get => throw null; set { } } + public string FileName { get => throw null; set { } } + public override System.Collections.ICollection Keys { get => throw null; } + public int OleDbServices { get => throw null; set { } } + public bool PersistSecurityInfo { get => throw null; set { } } + public string Provider { get => throw null; set { } } + public override bool Remove(string keyword) => throw null; + public override object this[string keyword] { get => throw null; set { } } + public override bool TryGetValue(string keyword, out object value) => throw null; + } + public sealed class OleDbDataAdapter : System.Data.Common.DbDataAdapter, System.ICloneable, System.Data.IDataAdapter, System.Data.IDbDataAdapter + { + object System.ICloneable.Clone() => throw null; + protected override System.Data.Common.RowUpdatedEventArgs CreateRowUpdatedEvent(System.Data.DataRow dataRow, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) => throw null; + protected override System.Data.Common.RowUpdatingEventArgs CreateRowUpdatingEvent(System.Data.DataRow dataRow, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) => throw null; + public OleDbDataAdapter() => throw null; + public OleDbDataAdapter(System.Data.OleDb.OleDbCommand selectCommand) => throw null; + public OleDbDataAdapter(string selectCommandText, System.Data.OleDb.OleDbConnection selectConnection) => throw null; + public OleDbDataAdapter(string selectCommandText, string selectConnectionString) => throw null; + public System.Data.OleDb.OleDbCommand DeleteCommand { get => throw null; set { } } + System.Data.IDbCommand System.Data.IDbDataAdapter.DeleteCommand { get => throw null; set { } } + public int Fill(System.Data.DataSet dataSet, object ADODBRecordSet, string srcTable) => throw null; + public int Fill(System.Data.DataTable dataTable, object ADODBRecordSet) => throw null; + public System.Data.OleDb.OleDbCommand InsertCommand { get => throw null; set { } } + System.Data.IDbCommand System.Data.IDbDataAdapter.InsertCommand { get => throw null; set { } } + protected override void OnRowUpdated(System.Data.Common.RowUpdatedEventArgs value) => throw null; + protected override void OnRowUpdating(System.Data.Common.RowUpdatingEventArgs value) => throw null; + public event System.Data.OleDb.OleDbRowUpdatedEventHandler RowUpdated; + public event System.Data.OleDb.OleDbRowUpdatingEventHandler RowUpdating; + public System.Data.OleDb.OleDbCommand SelectCommand { get => throw null; set { } } + System.Data.IDbCommand System.Data.IDbDataAdapter.SelectCommand { get => throw null; set { } } + System.Data.IDbCommand System.Data.IDbDataAdapter.UpdateCommand { get => throw null; set { } } + public System.Data.OleDb.OleDbCommand UpdateCommand { get => throw null; set { } } + } + public sealed class OleDbDataReader : System.Data.Common.DbDataReader + { + public override void Close() => throw null; + public override int Depth { get => throw null; } + public override int FieldCount { get => throw null; } + public override bool GetBoolean(int ordinal) => throw null; + public override byte GetByte(int ordinal) => throw null; + public override long GetBytes(int ordinal, long dataIndex, byte[] buffer, int bufferIndex, int length) => throw null; + public override char GetChar(int ordinal) => throw null; + public override long GetChars(int ordinal, long dataIndex, char[] buffer, int bufferIndex, int length) => throw null; + public System.Data.OleDb.OleDbDataReader GetData(int ordinal) => throw null; + public override string GetDataTypeName(int index) => throw null; + public override System.DateTime GetDateTime(int ordinal) => throw null; + protected override System.Data.Common.DbDataReader GetDbDataReader(int ordinal) => throw null; + public override decimal GetDecimal(int ordinal) => throw null; + public override double GetDouble(int ordinal) => throw null; + public override System.Collections.IEnumerator GetEnumerator() => throw null; + public override System.Type GetFieldType(int index) => throw null; + public override float GetFloat(int ordinal) => throw null; + public override System.Guid GetGuid(int ordinal) => throw null; + public override short GetInt16(int ordinal) => throw null; + public override int GetInt32(int ordinal) => throw null; + public override long GetInt64(int ordinal) => throw null; + public override string GetName(int index) => throw null; + public override int GetOrdinal(string name) => throw null; + public override System.Data.DataTable GetSchemaTable() => throw null; + public override string GetString(int ordinal) => throw null; + public System.TimeSpan GetTimeSpan(int ordinal) => throw null; + public override object GetValue(int ordinal) => throw null; + public override int GetValues(object[] values) => throw null; + public override bool HasRows { get => throw null; } + public override bool IsClosed { get => throw null; } + public override bool IsDBNull(int ordinal) => throw null; + public override bool NextResult() => throw null; + public override bool Read() => throw null; + public override int RecordsAffected { get => throw null; } + public override object this[int index] { get => throw null; } + public override object this[string name] { get => throw null; } + public override int VisibleFieldCount { get => throw null; } + } + public sealed class OleDbEnumerator + { + public OleDbEnumerator() => throw null; + public System.Data.DataTable GetElements() => throw null; + public static System.Data.OleDb.OleDbDataReader GetEnumerator(System.Type type) => throw null; + public static System.Data.OleDb.OleDbDataReader GetRootEnumerator() => throw null; + } + public sealed class OleDbError + { + public string Message { get => throw null; } + public int NativeError { get => throw null; } + public string Source { get => throw null; } + public string SQLState { get => throw null; } + public override string ToString() => throw null; + } + public sealed class OleDbErrorCollection : System.Collections.ICollection, System.Collections.IEnumerable + { + public void CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Data.OleDb.OleDbError[] array, int index) => throw null; + public int Count { get => throw null; } + public System.Collections.IEnumerator GetEnumerator() => throw null; + bool System.Collections.ICollection.IsSynchronized { get => throw null; } + object System.Collections.ICollection.SyncRoot { get => throw null; } + public System.Data.OleDb.OleDbError this[int index] { get => throw null; } + } + public sealed class OleDbException : System.Data.Common.DbException + { + public override int ErrorCode { get => throw null; } + public System.Data.OleDb.OleDbErrorCollection Errors { get => throw null; } + public override void GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null; + } + public sealed class OleDbFactory : System.Data.Common.DbProviderFactory + { + public override System.Data.Common.DbCommand CreateCommand() => throw null; + public override System.Data.Common.DbCommandBuilder CreateCommandBuilder() => throw null; + public override System.Data.Common.DbConnection CreateConnection() => throw null; + public override System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() => throw null; + public override System.Data.Common.DbDataAdapter CreateDataAdapter() => throw null; + public override System.Data.Common.DbParameter CreateParameter() => throw null; + public static readonly System.Data.OleDb.OleDbFactory Instance; + } + public sealed class OleDbInfoMessageEventArgs : System.EventArgs + { + public int ErrorCode { get => throw null; } + public System.Data.OleDb.OleDbErrorCollection Errors { get => throw null; } + public string Message { get => throw null; } + public string Source { get => throw null; } + public override string ToString() => throw null; + } + public delegate void OleDbInfoMessageEventHandler(object sender, System.Data.OleDb.OleDbInfoMessageEventArgs e); + public enum OleDbLiteral + { + Invalid = 0, + Binary_Literal = 1, + Catalog_Name = 2, + Catalog_Separator = 3, + Char_Literal = 4, + Column_Alias = 5, + Column_Name = 6, + Correlation_Name = 7, + Cursor_Name = 8, + Escape_Percent_Prefix = 9, + Escape_Underscore_Prefix = 10, + Index_Name = 11, + Like_Percent = 12, + Like_Underscore = 13, + Procedure_Name = 14, + Quote_Prefix = 15, + Schema_Name = 16, + Table_Name = 17, + Text_Command = 18, + User_Name = 19, + View_Name = 20, + Cube_Name = 21, + Dimension_Name = 22, + Hierarchy_Name = 23, + Level_Name = 24, + Member_Name = 25, + Property_Name = 26, + Schema_Separator = 27, + Quote_Suffix = 28, + Escape_Percent_Suffix = 29, + Escape_Underscore_Suffix = 30, + } + public static class OleDbMetaDataCollectionNames + { + public static readonly string Catalogs; + public static readonly string Collations; + public static readonly string Columns; + public static readonly string Indexes; + public static readonly string ProcedureColumns; + public static readonly string ProcedureParameters; + public static readonly string Procedures; + public static readonly string Tables; + public static readonly string Views; + } + public static class OleDbMetaDataColumnNames + { + public static readonly string BooleanFalseLiteral; + public static readonly string BooleanTrueLiteral; + public static readonly string DateTimeDigits; + public static readonly string NativeDataType; + } + public sealed class OleDbParameter : System.Data.Common.DbParameter, System.ICloneable, System.Data.IDataParameter, System.Data.IDbDataParameter + { + object System.ICloneable.Clone() => throw null; + public OleDbParameter() => throw null; + public OleDbParameter(string name, System.Data.OleDb.OleDbType dataType) => throw null; + public OleDbParameter(string name, System.Data.OleDb.OleDbType dataType, int size) => throw null; + public OleDbParameter(string parameterName, System.Data.OleDb.OleDbType dbType, int size, System.Data.ParameterDirection direction, bool isNullable, byte precision, byte scale, string srcColumn, System.Data.DataRowVersion srcVersion, object value) => throw null; + public OleDbParameter(string parameterName, System.Data.OleDb.OleDbType dbType, int size, System.Data.ParameterDirection direction, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value) => throw null; + public OleDbParameter(string name, System.Data.OleDb.OleDbType dataType, int size, string srcColumn) => throw null; + public OleDbParameter(string name, object value) => throw null; + public override System.Data.DbType DbType { get => throw null; set { } } + public override System.Data.ParameterDirection Direction { get => throw null; set { } } + public override bool IsNullable { get => throw null; set { } } + public System.Data.OleDb.OleDbType OleDbType { get => throw null; set { } } + public override string ParameterName { get => throw null; set { } } + public byte Precision { get => throw null; set { } } + public override void ResetDbType() => throw null; + public void ResetOleDbType() => throw null; + public byte Scale { get => throw null; set { } } + public override int Size { get => throw null; set { } } + public override string SourceColumn { get => throw null; set { } } + public override bool SourceColumnNullMapping { get => throw null; set { } } + public override System.Data.DataRowVersion SourceVersion { get => throw null; set { } } + public override string ToString() => throw null; + public override object Value { get => throw null; set { } } + } + public sealed class OleDbParameterCollection : System.Data.Common.DbParameterCollection + { + public System.Data.OleDb.OleDbParameter Add(System.Data.OleDb.OleDbParameter value) => throw null; + public override int Add(object value) => throw null; + public System.Data.OleDb.OleDbParameter Add(string parameterName, System.Data.OleDb.OleDbType oleDbType) => throw null; + public System.Data.OleDb.OleDbParameter Add(string parameterName, System.Data.OleDb.OleDbType oleDbType, int size) => throw null; + public System.Data.OleDb.OleDbParameter Add(string parameterName, System.Data.OleDb.OleDbType oleDbType, int size, string sourceColumn) => throw null; + public System.Data.OleDb.OleDbParameter Add(string parameterName, object value) => throw null; + public override void AddRange(System.Array values) => throw null; + public void AddRange(System.Data.OleDb.OleDbParameter[] values) => throw null; + public System.Data.OleDb.OleDbParameter AddWithValue(string parameterName, object value) => throw null; + public override void Clear() => throw null; + public bool Contains(System.Data.OleDb.OleDbParameter value) => throw null; + public override bool Contains(object value) => throw null; + public override bool Contains(string value) => throw null; + public override void CopyTo(System.Array array, int index) => throw null; + public void CopyTo(System.Data.OleDb.OleDbParameter[] array, int index) => throw null; + public override int Count { get => throw null; } + public override System.Collections.IEnumerator GetEnumerator() => throw null; + protected override System.Data.Common.DbParameter GetParameter(int index) => throw null; + protected override System.Data.Common.DbParameter GetParameter(string parameterName) => throw null; + public int IndexOf(System.Data.OleDb.OleDbParameter value) => throw null; + public override int IndexOf(object value) => throw null; + public override int IndexOf(string parameterName) => throw null; + public void Insert(int index, System.Data.OleDb.OleDbParameter value) => throw null; + public override void Insert(int index, object value) => throw null; + public override bool IsFixedSize { get => throw null; } + public override bool IsReadOnly { get => throw null; } + public override bool IsSynchronized { get => throw null; } + public void Remove(System.Data.OleDb.OleDbParameter value) => throw null; + public override void Remove(object value) => throw null; + public override void RemoveAt(int index) => throw null; + public override void RemoveAt(string parameterName) => throw null; + protected override void SetParameter(int index, System.Data.Common.DbParameter value) => throw null; + protected override void SetParameter(string parameterName, System.Data.Common.DbParameter value) => throw null; + public override object SyncRoot { get => throw null; } + public System.Data.OleDb.OleDbParameter this[int index] { get => throw null; set { } } + public System.Data.OleDb.OleDbParameter this[string parameterName] { get => throw null; set { } } + } + public sealed class OleDbRowUpdatedEventArgs : System.Data.Common.RowUpdatedEventArgs + { + public System.Data.OleDb.OleDbCommand Command { get => throw null; } + public OleDbRowUpdatedEventArgs(System.Data.DataRow dataRow, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) : base(default(System.Data.DataRow), default(System.Data.IDbCommand), default(System.Data.StatementType), default(System.Data.Common.DataTableMapping)) => throw null; + } + public delegate void OleDbRowUpdatedEventHandler(object sender, System.Data.OleDb.OleDbRowUpdatedEventArgs e); + public sealed class OleDbRowUpdatingEventArgs : System.Data.Common.RowUpdatingEventArgs + { + protected override System.Data.IDbCommand BaseCommand { get => throw null; set { } } + public System.Data.OleDb.OleDbCommand Command { get => throw null; set { } } + public OleDbRowUpdatingEventArgs(System.Data.DataRow dataRow, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) : base(default(System.Data.DataRow), default(System.Data.IDbCommand), default(System.Data.StatementType), default(System.Data.Common.DataTableMapping)) => throw null; + } + public delegate void OleDbRowUpdatingEventHandler(object sender, System.Data.OleDb.OleDbRowUpdatingEventArgs e); + public sealed class OleDbSchemaGuid + { + public static readonly System.Guid Assertions; + public static readonly System.Guid Catalogs; + public static readonly System.Guid Character_Sets; + public static readonly System.Guid Check_Constraints; + public static readonly System.Guid Check_Constraints_By_Table; + public static readonly System.Guid Collations; + public static readonly System.Guid Column_Domain_Usage; + public static readonly System.Guid Column_Privileges; + public static readonly System.Guid Columns; + public static readonly System.Guid Constraint_Column_Usage; + public static readonly System.Guid Constraint_Table_Usage; + public OleDbSchemaGuid() => throw null; + public static readonly System.Guid DbInfoKeywords; + public static readonly System.Guid DbInfoLiterals; + public static readonly System.Guid Foreign_Keys; + public static readonly System.Guid Indexes; + public static readonly System.Guid Key_Column_Usage; + public static readonly System.Guid Primary_Keys; + public static readonly System.Guid Procedure_Columns; + public static readonly System.Guid Procedure_Parameters; + public static readonly System.Guid Procedures; + public static readonly System.Guid Provider_Types; + public static readonly System.Guid Referential_Constraints; + public static readonly System.Guid SchemaGuids; + public static readonly System.Guid Schemata; + public static readonly System.Guid Sql_Languages; + public static readonly System.Guid Statistics; + public static readonly System.Guid Table_Constraints; + public static readonly System.Guid Table_Privileges; + public static readonly System.Guid Table_Statistics; + public static readonly System.Guid Tables; + public static readonly System.Guid Tables_Info; + public static readonly System.Guid Translations; + public static readonly System.Guid Trustee; + public static readonly System.Guid Usage_Privileges; + public static readonly System.Guid View_Column_Usage; + public static readonly System.Guid View_Table_Usage; + public static readonly System.Guid Views; + } + public sealed class OleDbTransaction : System.Data.Common.DbTransaction + { + public System.Data.OleDb.OleDbTransaction Begin() => throw null; + public System.Data.OleDb.OleDbTransaction Begin(System.Data.IsolationLevel isolevel) => throw null; + public override void Commit() => throw null; + public System.Data.OleDb.OleDbConnection Connection { get => throw null; } + protected override System.Data.Common.DbConnection DbConnection { get => throw null; } + protected override void Dispose(bool disposing) => throw null; + public override System.Data.IsolationLevel IsolationLevel { get => throw null; } + public override void Rollback() => throw null; + } + public enum OleDbType + { + Empty = 0, + SmallInt = 2, + Integer = 3, + Single = 4, + Double = 5, + Currency = 6, + Date = 7, + BSTR = 8, + IDispatch = 9, + Error = 10, + Boolean = 11, + Variant = 12, + IUnknown = 13, + Decimal = 14, + TinyInt = 16, + UnsignedTinyInt = 17, + UnsignedSmallInt = 18, + UnsignedInt = 19, + BigInt = 20, + UnsignedBigInt = 21, + Filetime = 64, + Guid = 72, + Binary = 128, + Char = 129, + WChar = 130, + Numeric = 131, + DBDate = 133, + DBTime = 134, + DBTimeStamp = 135, + PropVariant = 138, + VarNumeric = 139, + VarChar = 200, + LongVarChar = 201, + VarWChar = 202, + LongVarWChar = 203, + VarBinary = 204, + LongVarBinary = 205, + } + } + } +} diff --git a/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj new file mode 100644 index 00000000000..93c7940e335 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj @@ -0,0 +1,14 @@ + + + net8.0 + true + bin\ + false + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/8.0.0/System.Diagnostics.EventLog.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/8.0.0/System.Diagnostics.EventLog.csproj new file mode 100644 index 00000000000..61622bc5296 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/8.0.0/System.Diagnostics.EventLog.csproj @@ -0,0 +1,12 @@ + + + net8.0 + true + bin\ + false + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.cs b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.cs new file mode 100644 index 00000000000..b7fa657a816 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.cs @@ -0,0 +1,275 @@ +// This file contains auto-generated code. +// Generated from `System.Diagnostics.PerformanceCounter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51`. +namespace System +{ + namespace Diagnostics + { + public class CounterCreationData + { + public string CounterHelp { get => throw null; set { } } + public string CounterName { get => throw null; set { } } + public System.Diagnostics.PerformanceCounterType CounterType { get => throw null; set { } } + public CounterCreationData() => throw null; + public CounterCreationData(string counterName, string counterHelp, System.Diagnostics.PerformanceCounterType counterType) => throw null; + } + public class CounterCreationDataCollection : System.Collections.CollectionBase + { + public int Add(System.Diagnostics.CounterCreationData value) => throw null; + public void AddRange(System.Diagnostics.CounterCreationDataCollection value) => throw null; + public void AddRange(System.Diagnostics.CounterCreationData[] value) => throw null; + public bool Contains(System.Diagnostics.CounterCreationData value) => throw null; + public void CopyTo(System.Diagnostics.CounterCreationData[] array, int index) => throw null; + public CounterCreationDataCollection() => throw null; + public CounterCreationDataCollection(System.Diagnostics.CounterCreationDataCollection value) => throw null; + public CounterCreationDataCollection(System.Diagnostics.CounterCreationData[] value) => throw null; + public int IndexOf(System.Diagnostics.CounterCreationData value) => throw null; + public void Insert(int index, System.Diagnostics.CounterCreationData value) => throw null; + protected override void OnValidate(object value) => throw null; + public virtual void Remove(System.Diagnostics.CounterCreationData value) => throw null; + public System.Diagnostics.CounterCreationData this[int index] { get => throw null; set { } } + } + public struct CounterSample : System.IEquatable + { + public long BaseValue { get => throw null; } + public static float Calculate(System.Diagnostics.CounterSample counterSample) => throw null; + public static float Calculate(System.Diagnostics.CounterSample counterSample, System.Diagnostics.CounterSample nextCounterSample) => throw null; + public long CounterFrequency { get => throw null; } + public long CounterTimeStamp { get => throw null; } + public System.Diagnostics.PerformanceCounterType CounterType { get => throw null; } + public CounterSample(long rawValue, long baseValue, long counterFrequency, long systemFrequency, long timeStamp, long timeStamp100nSec, System.Diagnostics.PerformanceCounterType counterType) => throw null; + public CounterSample(long rawValue, long baseValue, long counterFrequency, long systemFrequency, long timeStamp, long timeStamp100nSec, System.Diagnostics.PerformanceCounterType counterType, long counterTimeStamp) => throw null; + public static System.Diagnostics.CounterSample Empty; + public bool Equals(System.Diagnostics.CounterSample sample) => throw null; + public override bool Equals(object o) => throw null; + public override int GetHashCode() => throw null; + public static bool operator ==(System.Diagnostics.CounterSample a, System.Diagnostics.CounterSample b) => throw null; + public static bool operator !=(System.Diagnostics.CounterSample a, System.Diagnostics.CounterSample b) => throw null; + public long RawValue { get => throw null; } + public long SystemFrequency { get => throw null; } + public long TimeStamp { get => throw null; } + public long TimeStamp100nSec { get => throw null; } + } + public static class CounterSampleCalculator + { + public static float ComputeCounterValue(System.Diagnostics.CounterSample newSample) => throw null; + public static float ComputeCounterValue(System.Diagnostics.CounterSample oldSample, System.Diagnostics.CounterSample newSample) => throw null; + } + public interface ICollectData + { + void CloseData(); + void CollectData(int id, nint valueName, nint data, int totalBytes, out nint res); + } + public class InstanceData + { + public InstanceData(string instanceName, System.Diagnostics.CounterSample sample) => throw null; + public string InstanceName { get => throw null; } + public long RawValue { get => throw null; } + public System.Diagnostics.CounterSample Sample { get => throw null; } + } + public class InstanceDataCollection : System.Collections.DictionaryBase + { + public bool Contains(string instanceName) => throw null; + public void CopyTo(System.Diagnostics.InstanceData[] instances, int index) => throw null; + public string CounterName { get => throw null; } + public InstanceDataCollection(string counterName) => throw null; + public System.Collections.ICollection Keys { get => throw null; } + public System.Diagnostics.InstanceData this[string instanceName] { get => throw null; } + public System.Collections.ICollection Values { get => throw null; } + } + public class InstanceDataCollectionCollection : System.Collections.DictionaryBase + { + public bool Contains(string counterName) => throw null; + public void CopyTo(System.Diagnostics.InstanceDataCollection[] counters, int index) => throw null; + public InstanceDataCollectionCollection() => throw null; + public System.Collections.ICollection Keys { get => throw null; } + public System.Diagnostics.InstanceDataCollection this[string counterName] { get => throw null; } + public System.Collections.ICollection Values { get => throw null; } + } + public sealed class PerformanceCounter : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize + { + public void BeginInit() => throw null; + public string CategoryName { get => throw null; set { } } + public void Close() => throw null; + public static void CloseSharedResources() => throw null; + public string CounterHelp { get => throw null; } + public string CounterName { get => throw null; set { } } + public System.Diagnostics.PerformanceCounterType CounterType { get => throw null; } + public PerformanceCounter() => throw null; + public PerformanceCounter(string categoryName, string counterName) => throw null; + public PerformanceCounter(string categoryName, string counterName, bool readOnly) => throw null; + public PerformanceCounter(string categoryName, string counterName, string instanceName) => throw null; + public PerformanceCounter(string categoryName, string counterName, string instanceName, bool readOnly) => throw null; + public PerformanceCounter(string categoryName, string counterName, string instanceName, string machineName) => throw null; + public long Decrement() => throw null; + public static int DefaultFileMappingSize; + protected override void Dispose(bool disposing) => throw null; + public void EndInit() => throw null; + public long Increment() => throw null; + public long IncrementBy(long value) => throw null; + public System.Diagnostics.PerformanceCounterInstanceLifetime InstanceLifetime { get => throw null; set { } } + public string InstanceName { get => throw null; set { } } + public string MachineName { get => throw null; set { } } + public System.Diagnostics.CounterSample NextSample() => throw null; + public float NextValue() => throw null; + public long RawValue { get => throw null; set { } } + public bool ReadOnly { get => throw null; set { } } + public void RemoveInstance() => throw null; + } + public sealed class PerformanceCounterCategory + { + public string CategoryHelp { get => throw null; } + public string CategoryName { get => throw null; set { } } + public System.Diagnostics.PerformanceCounterCategoryType CategoryType { get => throw null; } + public bool CounterExists(string counterName) => throw null; + public static bool CounterExists(string counterName, string categoryName) => throw null; + public static bool CounterExists(string counterName, string categoryName, string machineName) => throw null; + public static System.Diagnostics.PerformanceCounterCategory Create(string categoryName, string categoryHelp, System.Diagnostics.CounterCreationDataCollection counterData) => throw null; + public static System.Diagnostics.PerformanceCounterCategory Create(string categoryName, string categoryHelp, System.Diagnostics.PerformanceCounterCategoryType categoryType, System.Diagnostics.CounterCreationDataCollection counterData) => throw null; + public static System.Diagnostics.PerformanceCounterCategory Create(string categoryName, string categoryHelp, System.Diagnostics.PerformanceCounterCategoryType categoryType, string counterName, string counterHelp) => throw null; + public static System.Diagnostics.PerformanceCounterCategory Create(string categoryName, string categoryHelp, string counterName, string counterHelp) => throw null; + public PerformanceCounterCategory() => throw null; + public PerformanceCounterCategory(string categoryName) => throw null; + public PerformanceCounterCategory(string categoryName, string machineName) => throw null; + public static void Delete(string categoryName) => throw null; + public static bool Exists(string categoryName) => throw null; + public static bool Exists(string categoryName, string machineName) => throw null; + public static System.Diagnostics.PerformanceCounterCategory[] GetCategories() => throw null; + public static System.Diagnostics.PerformanceCounterCategory[] GetCategories(string machineName) => throw null; + public System.Diagnostics.PerformanceCounter[] GetCounters() => throw null; + public System.Diagnostics.PerformanceCounter[] GetCounters(string instanceName) => throw null; + public string[] GetInstanceNames() => throw null; + public bool InstanceExists(string instanceName) => throw null; + public static bool InstanceExists(string instanceName, string categoryName) => throw null; + public static bool InstanceExists(string instanceName, string categoryName, string machineName) => throw null; + public string MachineName { get => throw null; set { } } + public System.Diagnostics.InstanceDataCollectionCollection ReadCategory() => throw null; + } + public enum PerformanceCounterCategoryType + { + Unknown = -1, + SingleInstance = 0, + MultiInstance = 1, + } + public enum PerformanceCounterInstanceLifetime + { + Global = 0, + Process = 1, + } + public sealed class PerformanceCounterManager : System.Diagnostics.ICollectData + { + void System.Diagnostics.ICollectData.CloseData() => throw null; + void System.Diagnostics.ICollectData.CollectData(int callIdx, nint valueNamePtr, nint dataPtr, int totalBytes, out nint res) => throw null; + public PerformanceCounterManager() => throw null; + } + public enum PerformanceCounterType + { + NumberOfItemsHEX32 = 0, + NumberOfItemsHEX64 = 256, + NumberOfItems32 = 65536, + NumberOfItems64 = 65792, + CounterDelta32 = 4195328, + CounterDelta64 = 4195584, + SampleCounter = 4260864, + CountPerTimeInterval32 = 4523008, + CountPerTimeInterval64 = 4523264, + RateOfCountsPerSecond32 = 272696320, + RateOfCountsPerSecond64 = 272696576, + RawFraction = 537003008, + CounterTimer = 541132032, + Timer100Ns = 542180608, + SampleFraction = 549585920, + CounterTimerInverse = 557909248, + Timer100NsInverse = 558957824, + CounterMultiTimer = 574686464, + CounterMultiTimer100Ns = 575735040, + CounterMultiTimerInverse = 591463680, + CounterMultiTimer100NsInverse = 592512256, + AverageTimer32 = 805438464, + ElapsedTime = 807666944, + AverageCount64 = 1073874176, + SampleBase = 1073939457, + AverageBase = 1073939458, + RawBase = 1073939459, + CounterMultiBase = 1107494144, + } + namespace PerformanceData + { + public sealed class CounterData + { + public void Decrement() => throw null; + public void Increment() => throw null; + public void IncrementBy(long value) => throw null; + public long RawValue { get => throw null; set { } } + public long Value { get => throw null; set { } } + } + public class CounterSet : System.IDisposable + { + public void AddCounter(int counterId, System.Diagnostics.PerformanceData.CounterType counterType) => throw null; + public void AddCounter(int counterId, System.Diagnostics.PerformanceData.CounterType counterType, string counterName) => throw null; + public System.Diagnostics.PerformanceData.CounterSetInstance CreateCounterSetInstance(string instanceName) => throw null; + public CounterSet(System.Guid providerGuid, System.Guid counterSetGuid, System.Diagnostics.PerformanceData.CounterSetInstanceType instanceType) => throw null; + public void Dispose() => throw null; + protected virtual void Dispose(bool disposing) => throw null; + } + public sealed class CounterSetInstance : System.IDisposable + { + public System.Diagnostics.PerformanceData.CounterSetInstanceCounterDataSet Counters { get => throw null; } + public void Dispose() => throw null; + } + public sealed class CounterSetInstanceCounterDataSet : System.IDisposable + { + public void Dispose() => throw null; + public System.Diagnostics.PerformanceData.CounterData this[int counterId] { get => throw null; } + public System.Diagnostics.PerformanceData.CounterData this[string counterName] { get => throw null; } + } + public enum CounterSetInstanceType + { + Single = 0, + Multiple = 2, + GlobalAggregate = 4, + MultipleAggregate = 6, + GlobalAggregateWithHistory = 11, + InstanceAggregate = 22, + } + public enum CounterType + { + RawDataHex32 = 0, + RawDataHex64 = 256, + RawData32 = 65536, + RawData64 = 65792, + Delta32 = 4195328, + Delta64 = 4195584, + SampleCounter = 4260864, + QueueLength = 4523008, + LargeQueueLength = 4523264, + QueueLength100Ns = 5571840, + QueueLengthObjectTime = 6620416, + RateOfCountPerSecond32 = 272696320, + RateOfCountPerSecond64 = 272696576, + RawFraction32 = 537003008, + RawFraction64 = 537003264, + PercentageActive = 541132032, + PrecisionSystemTimer = 541525248, + PercentageActive100Ns = 542180608, + PrecisionTimer100Ns = 542573824, + ObjectSpecificTimer = 543229184, + PrecisionObjectSpecificTimer = 543622400, + SampleFraction = 549585920, + PercentageNotActive = 557909248, + PercentageNotActive100Ns = 558957824, + MultiTimerPercentageActive = 574686464, + MultiTimerPercentageActive100Ns = 575735040, + MultiTimerPercentageNotActive = 591463680, + MultiTimerPercentageNotActive100Ns = 592512256, + AverageTimer32 = 805438464, + ElapsedTime = 807666944, + AverageCount64 = 1073874176, + SampleBase = 1073939457, + AverageBase = 1073939458, + RawBase32 = 1073939459, + RawBase64 = 1073939712, + MultiTimerBase = 1107494144, + } + } + } +} diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj new file mode 100644 index 00000000000..7f55f3e68b2 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj @@ -0,0 +1,13 @@ + + + net8.0 + true + bin\ + false + + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj b/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj new file mode 100644 index 00000000000..d602f3967ef --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj @@ -0,0 +1,14 @@ + + + net8.0 + true + bin\ + false + + + + + + + + diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.cs b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.cs new file mode 100644 index 00000000000..2d018b3bc7f --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.cs @@ -0,0 +1,21 @@ +// This file contains auto-generated code. +// Generated from `System.Security.Cryptography.ProtectedData, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`. +namespace System +{ + namespace Security + { + namespace Cryptography + { + public enum DataProtectionScope + { + CurrentUser = 0, + LocalMachine = 1, + } + public static class ProtectedData + { + public static byte[] Protect(byte[] userData, byte[] optionalEntropy, System.Security.Cryptography.DataProtectionScope scope) => throw null; + public static byte[] Unprotect(byte[] encryptedData, byte[] optionalEntropy, System.Security.Cryptography.DataProtectionScope scope) => throw null; + } + } + } +} diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.csproj new file mode 100644 index 00000000000..61622bc5296 --- /dev/null +++ b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/8.0.0/System.Security.Cryptography.ProtectedData.csproj @@ -0,0 +1,12 @@ + + + net8.0 + true + bin\ + false + + + + + + diff --git a/csharp/scripts/stubs/make_stubs_all.py b/csharp/scripts/stubs/make_stubs_all.py index fe506bd2e0d..39b50354296 100644 --- a/csharp/scripts/stubs/make_stubs_all.py +++ b/csharp/scripts/stubs/make_stubs_all.py @@ -17,6 +17,7 @@ packages = [ "NHibernate", "ServiceStack", "ServiceStack.OrmLite.SqlServer", + "System.Data.OleDb", "System.Data.SqlClient", "System.Data.SQLite", ] From 19a4cf3a7b27116f6b66992e6624c0296c1374f8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 11:36:13 +0100 Subject: [PATCH 137/205] C#: Update test cases that depends on System.Data.cs to use generated stubs. --- .../frameworks/EntityFramework/options | 5 +++-- .../library-tests/frameworks/sql/Sql1.expected | 16 ++++++++-------- .../test/library-tests/frameworks/sql/options | 6 +++--- .../test/library-tests/frameworks/sql/sql.cs | 18 ++++++++++++++---- .../security/dataflow/flowsources/options | 5 ++++- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/options b/csharp/ql/test/library-tests/frameworks/EntityFramework/options index 24115b19ffc..fe4620d4008 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/options +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/options @@ -1,2 +1,3 @@ -semmle-extractor-options: /r:System.Data.dll /r:System.ComponentModel.Primitives.dll /r:System.ComponentModel.TypeConverter.dll ${testdir}/../../../resources/stubs/EntityFramework.cs ${testdir}/../../../resources/stubs/System.Data.cs /r:System.ComponentModel.TypeConverter.dll /r:System.Data.Common.dll /r:System.Linq.dll -semmle-extractor-options: ${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/System.ComponentModel.Annotations.cs ${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/System.ComponentModel.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFramework.cs diff --git a/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected b/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected index 84f522a4367..00c5ffbd573 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected +++ b/csharp/ql/test/library-tests/frameworks/sql/Sql1.expected @@ -1,10 +1,10 @@ sqlExpressions -| sql.cs:44:23:44:44 | object creation of type MySqlCommand | sql.cs:44:40:44:43 | access to parameter text | -| sql.cs:45:13:45:38 | ... = ... | sql.cs:45:35:45:38 | access to parameter text | -| sql.cs:46:13:46:34 | object creation of type MySqlCommand | sql.cs:46:30:46:33 | access to parameter text | -| sql.cs:46:13:46:53 | ... = ... | sql.cs:46:50:46:53 | access to parameter text | +| sql.cs:54:23:54:44 | object creation of type MySqlCommand | sql.cs:54:40:54:43 | access to parameter text | +| sql.cs:55:13:55:38 | ... = ... | sql.cs:55:35:55:38 | access to parameter text | +| sql.cs:56:13:56:34 | object creation of type MySqlCommand | sql.cs:56:30:56:33 | access to parameter text | +| sql.cs:56:13:56:53 | ... = ... | sql.cs:56:50:56:53 | access to parameter text | sqlCsvSinks -| sql.cs:43:46:43:65 | object creation of type SqlCommand | sql.cs:43:61:43:64 | access to parameter text | -| sql.cs:47:13:47:42 | object creation of type SqlDataAdapter | sql.cs:47:32:47:35 | access to parameter text | -| sql.cs:48:13:48:47 | call to method ExecuteScalar | sql.cs:48:43:48:46 | access to parameter text | -| sql.cs:49:13:49:75 | call to method ExecuteScalar | sql.cs:49:71:49:74 | access to parameter text | +| sql.cs:53:46:53:65 | object creation of type SqlCommand | sql.cs:53:61:53:64 | access to parameter text | +| sql.cs:57:13:57:50 | object creation of type SqlDataAdapter | sql.cs:57:32:57:35 | access to parameter text | +| sql.cs:58:13:58:47 | call to method ExecuteScalar | sql.cs:58:43:58:46 | access to parameter text | +| sql.cs:59:13:59:75 | call to method ExecuteScalar | sql.cs:59:71:59:74 | access to parameter text | diff --git a/csharp/ql/test/library-tests/frameworks/sql/options b/csharp/ql/test/library-tests/frameworks/sql/options index 38870455fc8..f767c33228f 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/options +++ b/csharp/ql/test/library-tests/frameworks/sql/options @@ -1,3 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Data.cs -semmle-extractor-options: ${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/System.ComponentModel.cs -semmle-extractor-options: /r:System.ComponentModel.TypeConverter.dll /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.5/System.Data.SqlClient.csproj diff --git a/csharp/ql/test/library-tests/frameworks/sql/sql.cs b/csharp/ql/test/library-tests/frameworks/sql/sql.cs index f495268034f..78f906bdf75 100644 --- a/csharp/ql/test/library-tests/frameworks/sql/sql.cs +++ b/csharp/ql/test/library-tests/frameworks/sql/sql.cs @@ -8,11 +8,21 @@ namespace MySql.Data.MySqlClient { public MySqlCommand(string commandText) { } + public void Cancel() => throw null; public string CommandText { get; set; } - - public IDataReader ExecuteReader() => throw null; + public int CommandTimeout { get; set; } public CommandType CommandType { get; set; } - public IDataParameterCollection Parameters { get; set; } + public IDbConnection Connection { get; set; } + public IDbDataParameter CreateParameter() => throw null; + public int ExecuteNonQuery() => throw null; + public IDataReader ExecuteReader() => throw null; + public IDataReader ExecuteReader(CommandBehavior behavior) => throw null; + public object ExecuteScalar() => throw null; + public IDataParameterCollection Parameters { get; } + public void Prepare() => throw null; + public IDbTransaction Transaction { get; set; } + public UpdateRowSource UpdatedRowSource { get; set; } + public void Dispose() => throw null; } public class MySqlHelper @@ -44,7 +54,7 @@ namespace SqlClientTests command = new MySqlCommand(text); command.CommandText = text; new MySqlCommand(text).CommandText = text; - new SqlDataAdapter(text, null); + new SqlDataAdapter(text, string.Empty); MySqlHelper.ExecuteScalar("", text); SqlHelper.ExecuteScalar("", System.Data.CommandType.Text, text); } diff --git a/csharp/ql/test/library-tests/security/dataflow/flowsources/options b/csharp/ql/test/library-tests/security/dataflow/flowsources/options index 84f5c37cb74..bb2d8d0768e 100644 --- a/csharp/ql/test/library-tests/security/dataflow/flowsources/options +++ b/csharp/ql/test/library-tests/security/dataflow/flowsources/options @@ -1 +1,4 @@ -semmle-extractor-options: /r:System.Data.dll /r:System.ComponentModel.Primitives.dll /r:System.ComponentModel.TypeConverter.dll ${testdir}/../../../../resources/stubs/EntityFramework.cs ${testdir}/../../../../resources/stubs/System.Data.cs /r:System.ComponentModel.TypeConverter.dll /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/EntityFramework.cs From e12165707f2103162e3315cc8fa898e97fb3d58f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 11:36:45 +0100 Subject: [PATCH 138/205] C#: Delete the hand written stub System.Data.cs. --- csharp/ql/test/resources/stubs/System.Data.cs | 187 ------------------ 1 file changed, 187 deletions(-) delete mode 100644 csharp/ql/test/resources/stubs/System.Data.cs diff --git a/csharp/ql/test/resources/stubs/System.Data.cs b/csharp/ql/test/resources/stubs/System.Data.cs deleted file mode 100644 index b03a2e04cda..00000000000 --- a/csharp/ql/test/resources/stubs/System.Data.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; - -namespace System.Data.SqlClient -{ - - public class SqlConnection : Common.DbConnection, IDisposable - { - public SqlConnection() { } - public SqlConnection(string connectionString) { } - public void Dispose() { } - public override string ConnectionString { get; set; } - public override void Open() { } - public override void Close() { } - } - - public class SqlCommand : Common.DbCommand - { - public SqlCommand(string s) { } - public SqlCommand(string s, SqlConnection t) { } - public SqlDataReader ExecuteReader() => null; - } - - public class SqlDataReader : Common.DbDataReader, IDataReader, IDataRecord - { - public override string GetString(int i) => ""; - } - - public class SqlDataAdapter : Common.DbDataAdapter, IDbDataAdapter, IDataAdapter - { - public SqlDataAdapter(string a, SqlConnection b) { } - public void Fill(DataSet ds) { } - public SqlCommand SelectCommand { get; set; } - } - - public class SqlParameter : Common.DbParameter, IDbDataParameter, IDataParameter - { - public SqlParameter(string s, object o) { } - } - - public class SqlParameterCollection : Common.DbParameterCollection - { - } - - public class SqlConnectionStringBuilder : Common.DbConnectionStringBuilder - { - } - - public class SqlException : Common.DbException - { - } -} - -namespace System.Data -{ - public interface IDbDataParameter - { - } - - public interface IDbConnection - { - string ConnectionString { get; set; } - } - - public interface IDataRecord - { - string GetString(int i); - } - - public interface IDbCommand - { - IDataReader ExecuteReader(); - CommandType CommandType { get; set; } - IDataParameterCollection Parameters { get; set; } - string CommandText { get; set; } - } - - public interface IDataReader - { - bool Read(); - void Close(); - string GetString(int i); - } - - - public interface IDataAdapter - { - } - - public interface IDbDataAdapter - { - } - - public interface IDataParameter - { - } - - public interface IDataParameterCollection - { - void Add(object obj); - } -} - -namespace System.Data.Common -{ - - public abstract class DbConnection : IDbConnection - { - public virtual string ConnectionString { get; set; } - string IDbConnection.ConnectionString { get; set; } - public abstract void Open(); - public abstract void Close(); - } - - public class DbDataReader : IDataReader - { - public bool Read() => false; - public void Close() { } - public virtual string GetString(int i) => ""; - } - - public abstract class DbCommand : IDbCommand, IDisposable - { - public DbDataReader ExecuteReader() => null; - public CommandType CommandType { get; set; } - public IDataParameterCollection Parameters { get; set; } - IDataReader IDbCommand.ExecuteReader() => null; - public void Dispose() { } - public string CommandText { get; set; } - } - - public class DbDataAdapter : IDataAdapter, IDbDataAdapter - { - } - - public class DbParameter : IDbDataParameter, IDataParameter - { - } - - public class DbParameterCollection : IDataParameterCollection - { - public void Add(object obj) { } - } - - public class DbConnectionStringBuilder - { - public virtual object this[string keyword] { get => null; set { } } - public virtual string ConnectionString { get; set; } - } - - public class DbException : Exception - { - } -} - -namespace System.Data.OleDb -{ - - public class OleDbConnection : Common.DbConnection, IDisposable - { - public OleDbConnection(string s) { } - void IDisposable.Dispose() { } - public override void Open() { } - public override void Close() { } - } - - public class OleDbDataReader : Common.DbDataReader - { - public bool Read() => false; - public void Close() - { - } - - public string GetString(int x) => null; - - public object this[string s] => null; - } - - public class OleDbCommand : Common.DbCommand - { - public OleDbCommand(string e, OleDbConnection c) - { - } - - public OleDbDataReader ExecuteReader() => null; - } -} - From b6974d674c71175c4c0e20f7cb6e743d2ee13843 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 11:47:46 +0100 Subject: [PATCH 139/205] Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- .../lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll index ba44561c0cc..029aba0a4bb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll @@ -1,5 +1,5 @@ /** - * This file contains module that implements the _debug_ version of + * This file contains a module that implements the _debug_ version of * `toString` for `Instruction` and `Operand` dataflow nodes. */ From 37b510cac03fe9732661e0d4577ced043fea2cb7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 11:52:59 +0100 Subject: [PATCH 140/205] C#: Add stubs for entity framework. --- csharp/scripts/stubs/make_stubs_all.py | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/scripts/stubs/make_stubs_all.py b/csharp/scripts/stubs/make_stubs_all.py index 39b50354296..0902a06f51c 100644 --- a/csharp/scripts/stubs/make_stubs_all.py +++ b/csharp/scripts/stubs/make_stubs_all.py @@ -13,6 +13,7 @@ packages = [ "Amazon.Lambda.Core", "Amazon.Lambda.APIGatewayEvents", "Dapper", + "EntityFramework", "Newtonsoft.Json", "NHibernate", "ServiceStack", From 937e0ee8d227939c28afae9ad9d4467100674c2a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 12:00:19 +0100 Subject: [PATCH 141/205] C++: Go back to abstract classes. --- .../cpp/ir/dataflow/internal/DebugPrinting.qll | 10 ++++------ .../cpp/ir/dataflow/internal/Node0ToString.qll | 1 + .../ir/dataflow/internal/Node0ToStringSig.qll | 16 ++++++++++++---- .../ir/dataflow/internal/NormalNode0ToString.qll | 10 ++++------ 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll index 029aba0a4bb..9e4da3fe82c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll @@ -8,14 +8,12 @@ private import codeql.util.Unit private import Node0ToStringSig private import DataFlowUtil -private module DebugNode0ToString implements Node0ToStringSig { - string instructionToString(Instruction i) { result = i.getDumpString() } +class DebugNode0ToString extends Node0ToString { + override string instructionToString(Instruction i) { result = i.getDumpString() } - string operandToString(Operand op) { + override string operandToString(Operand op) { result = op.getDumpString() + " @ " + op.getUse().getResultId() } - string toExprString(Node n) { none() } + override string toExprString(Node n) { none() } } - -import DebugNode0ToString diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll index 3458226c2cf..b9fa33f9953 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll @@ -5,4 +5,5 @@ * one can import `DebugPrinting.qll` to better correlate the dataflow nodes with their underlying instructions and operands. */ +import Node0ToStringSig import NormalNode0ToString diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll index df75123a6a3..bc59958f9d5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll @@ -7,19 +7,27 @@ private import codeql.util.Unit private import DataFlowUtil /** A signature for a module to control the behavior of `Node.toString`. */ -signature module Node0ToStringSig { +abstract class Node0ToString extends Unit { /** * Gets the string that should be used by `OperandNode.toString`. */ - string operandToString(Operand op); + abstract string operandToString(Operand op); /** * Gets the string that should be used by `InstructionNode.toString`. */ - string instructionToString(Instruction i); + abstract string instructionToString(Instruction i); /** * Gets the string representation of the `Expr` associated with `n`, if any. */ - string toExprString(Node n); + abstract string toExprString(Node n); } + +string operandToString(Operand op) { result = any(Node0ToString s).operandToString(op) } + +string instructionToString(Instruction instr) { + result = any(Node0ToString s).instructionToString(instr) +} + +string toExprString(Node n) { result = any(Node0ToString s).toExprString(n) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll index e97f0af3fce..478be97dba1 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll @@ -9,25 +9,23 @@ private import Node0ToStringSig private import DataFlowUtil private import DataFlowPrivate -private module NormalNode0ToStringImpl implements Node0ToStringSig { - string instructionToString(Instruction i) { +class NormalNode0ToStringImpl extends Node0ToString { + override string instructionToString(Instruction i) { if i.(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable then result = "this" else result = i.getAst().toString() } - string operandToString(Operand op) { + override string operandToString(Operand op) { if op.getDef().(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable then result = "this" else result = op.getDef().getAst().toString() } - string toExprString(Node n) { + override string toExprString(Node n) { result = n.asExpr(0).toString() or not exists(n.asExpr()) and result = stars(n) + n.asIndirectExpr(0, 1).toString() } } - -import NormalNode0ToStringImpl From 4844c43f0626ee37a0d52bef23645927b1ddeb31 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 12:10:23 +0100 Subject: [PATCH 142/205] C++: Cleanup now that we're back to an abstract class. --- .../ir/dataflow/internal/DebugPrinting.qll | 6 +-- .../ir/dataflow/internal/Node0ToString.qll | 54 +++++++++++++++++-- .../ir/dataflow/internal/Node0ToStringSig.qll | 33 ------------ .../dataflow/internal/NormalNode0ToString.qll | 6 +-- 4 files changed, 55 insertions(+), 44 deletions(-) delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll index 9e4da3fe82c..c75603d0b92 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll @@ -1,14 +1,14 @@ /** - * This file contains a module that implements the _debug_ version of + * This file contains the class that implements the _debug_ version of * `toString` for `Instruction` and `Operand` dataflow nodes. */ private import semmle.code.cpp.ir.IR private import codeql.util.Unit -private import Node0ToStringSig +private import Node0ToString private import DataFlowUtil -class DebugNode0ToString extends Node0ToString { +private class DebugNode0ToString extends Node0ToString { override string instructionToString(Instruction i) { result = i.getDumpString() } override string operandToString(Operand op) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll index b9fa33f9953..6d1d6c7ab5c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToString.qll @@ -1,9 +1,53 @@ /** - * This file imports the module that is used to construct the strings used by `Node.ToString`. + * This file imports the class that is used to construct the strings used by + * `Node.ToString`. * - * Normally, this file should just import `NormalNode0ToString` to compute the efficient `toString`, but for debugging purposes - * one can import `DebugPrinting.qll` to better correlate the dataflow nodes with their underlying instructions and operands. + * Normally, this file should just import `NormalNode0ToString` to compute the + * efficient `toString`, but for debugging purposes one can import + * `DebugPrinting.qll` to better correlate the dataflow nodes with their + * underlying instructions and operands. */ -import Node0ToStringSig -import NormalNode0ToString +private import semmle.code.cpp.ir.IR +private import codeql.util.Unit +private import DataFlowUtil +import NormalNode0ToString // Change this import to control which version should be used. + +/** An abstract class to control the behavior of `Node.toString`. */ +abstract class Node0ToString extends Unit { + /** + * Gets the string that should be used by `OperandNode.toString` to print the + * dataflow node whose underlying operand is `op.` + */ + abstract string operandToString(Operand op); + + /** + * Gets the string that should be used by `InstructionNode.toString` to print + * the dataflow node whose underlying instruction is `instr`. + */ + abstract string instructionToString(Instruction i); + + /** + * Gets the string representation of the `Expr` associated with `n`, if any. + */ + abstract string toExprString(Node n); +} + +/** + * Gets the string that should be used by `OperandNode.toString` to print the + * dataflow node whose underlying operand is `op.` + */ +string operandToString(Operand op) { result = any(Node0ToString s).operandToString(op) } + +/** + * Gets the string that should be used by `InstructionNode.toString` to print + * the dataflow node whose underlying instruction is `instr`. + */ +string instructionToString(Instruction instr) { + result = any(Node0ToString s).instructionToString(instr) +} + +/** + * Gets the string representation of the `Expr` associated with `n`, if any. + */ +string toExprString(Node n) { result = any(Node0ToString s).toExprString(n) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll deleted file mode 100644 index bc59958f9d5..00000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/Node0ToStringSig.qll +++ /dev/null @@ -1,33 +0,0 @@ -/** - * This file contains the signature module for controlling the behavior of `Node.toString`. - */ - -private import semmle.code.cpp.ir.IR -private import codeql.util.Unit -private import DataFlowUtil - -/** A signature for a module to control the behavior of `Node.toString`. */ -abstract class Node0ToString extends Unit { - /** - * Gets the string that should be used by `OperandNode.toString`. - */ - abstract string operandToString(Operand op); - - /** - * Gets the string that should be used by `InstructionNode.toString`. - */ - abstract string instructionToString(Instruction i); - - /** - * Gets the string representation of the `Expr` associated with `n`, if any. - */ - abstract string toExprString(Node n); -} - -string operandToString(Operand op) { result = any(Node0ToString s).operandToString(op) } - -string instructionToString(Instruction instr) { - result = any(Node0ToString s).instructionToString(instr) -} - -string toExprString(Node n) { result = any(Node0ToString s).toExprString(n) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll index 478be97dba1..e5d638750de 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll @@ -1,15 +1,15 @@ /** - * This file contains module that implements the non-debug version of + * This file contains the class that implements the non-debug version of * `toString` for `Instruction` and `Operand` dataflow nodes. */ private import semmle.code.cpp.ir.IR private import codeql.util.Unit -private import Node0ToStringSig +private import Node0ToString private import DataFlowUtil private import DataFlowPrivate -class NormalNode0ToStringImpl extends Node0ToString { +private class NormalNode0ToString extends Node0ToString { override string instructionToString(Instruction i) { if i.(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable then result = "this" From 95cd31fce38b22cd58eaa0acd984e3d50e7bb3df Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 19 Dec 2023 12:29:16 +0100 Subject: [PATCH 143/205] C++: Silence warnings. --- .../semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll | 5 +++++ .../code/cpp/ir/dataflow/internal/NormalNode0ToString.qll | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll index c75603d0b92..7c2bf25aab5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DebugPrinting.qll @@ -9,6 +9,11 @@ private import Node0ToString private import DataFlowUtil private class DebugNode0ToString extends Node0ToString { + DebugNode0ToString() { + // Silence warning about `this` not being bound. + exists(this) + } + override string instructionToString(Instruction i) { result = i.getDumpString() } override string operandToString(Operand op) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll index e5d638750de..ef2681104cb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/NormalNode0ToString.qll @@ -10,6 +10,11 @@ private import DataFlowUtil private import DataFlowPrivate private class NormalNode0ToString extends Node0ToString { + NormalNode0ToString() { + // Silence warning about `this` not being bound. + exists(this) + } + override string instructionToString(Instruction i) { if i.(InitializeParameterInstruction).getIRVariable() instanceof IRThisVariable then result = "this" From 71dbd1a059f697cc415a0bea5b95f527c6ba1823 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Tue, 19 Dec 2023 11:33:26 +0000 Subject: [PATCH 144/205] C#: Mention more XSS sanitisation options in query help. --- .../src/Security Features/CWE-079/XSS.qhelp | 31 +++++++++++++++---- .../src/Security Features/CWE-079/XSSGood.cs | 13 ++++++++ .../src/Security Features/CWE-079/XSSGood2.cs | 13 ++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 csharp/ql/src/Security Features/CWE-079/XSSGood.cs create mode 100644 csharp/ql/src/Security Features/CWE-079/XSSGood2.cs diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp index 409be1030e7..ce49ddfdfbb 100644 --- a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp +++ b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp @@ -11,17 +11,33 @@ without properly sanitizing the input first, allows for a cross-site scripting v -

    To guard against cross-site scripting, consider using contextual output encoding/escaping before -writing user input to the page, or one of the other solutions that are mentioned in the -references.

    +

    +To guard against cross-site scripting, consider using a library providing suitable encoding +functionality, such as the System.Net.WebUtility class or the AntiXSS library, +to sanitize the untrusted input before writing it to the page. +The references also mention other possible solutions. +

    -

    The following example shows the page parameter being written directly to the server error page, -leaving the website vulnerable to cross-site scripting.

    - +

    +The following example shows the page parameter being written directly to the server error page, +leaving the website vulnerable to cross-site scripting. +

    +

    +Sanitizing the user-controlled data using WebUtility.HtmlEncode method prevents the vulnerability: +

    + +

    +Alternatively, the AntiXSS library can be used to sanitize the user-controlled data: +

    + +

    +Recall that this solution requires the AntiXSS library to be installed, for example by +adding a package reference to the AntiXSS NuGet package to the project file. +

    @@ -35,6 +51,9 @@ OWASP:
  • Wikipedia: Cross-site scripting.
  • +
  • +AntiXSS: AntiXSS NuGet package. +
  • diff --git a/csharp/ql/src/Security Features/CWE-079/XSSGood.cs b/csharp/ql/src/Security Features/CWE-079/XSSGood.cs new file mode 100644 index 00000000000..af719488a7c --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-079/XSSGood.cs @@ -0,0 +1,13 @@ +using System; +using System.Web; +using System.Net; + +public class XSSHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + string page = WebUtility.HtmlEncode(ctx.Request.QueryString["page"]); + ctx.Response.Write( + "The page \"" + page + "\" was not found."); + } +} diff --git a/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs b/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs new file mode 100644 index 00000000000..34011bf8c4f --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs @@ -0,0 +1,13 @@ +using System; +using System.Web; +using Microsoft.Security.Application; + +public class XSSHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + string page = Encoder.HtmlEncode(ctx.Request.QueryString["page"]); + ctx.Response.Write( + "The page \"" + page + "\" was not found."); + } +} From dd64b436c0ffc88684db9978643db0c144974afe Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 19 Dec 2023 12:54:00 +0100 Subject: [PATCH 145/205] C#: Fix working directory structures in standalone --- .../DependencyManager.cs | 8 +++--- csharp/extractor/Semmle.Util/FileUtils.cs | 28 ++++++++++++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 7412c3ba340..bf9199ec8e5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -52,7 +52,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching this.progressMonitor = new ProgressMonitor(logger); this.sourceDir = new DirectoryInfo(srcDir); - packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName)); + packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName, "packages")); legacyPackageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName, "legacypackages")); missingPackageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName, "missingpackages")); @@ -467,7 +467,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// with this source tree. Use a SHA1 of the directory name. /// /// The full path of the temp directory. - private static string ComputeTempDirectory(string srcDir, string packages = "packages") + private static string ComputeTempDirectory(string srcDir, string subfolderName) { var bytes = Encoding.Unicode.GetBytes(srcDir); var sha = SHA1.HashData(bytes); @@ -475,7 +475,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching foreach (var b in sha.Take(8)) sb.AppendFormat("{0:x2}", b); - return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out var _), "GitHub", packages, sb.ToString()); + return Path.Combine(FileUtils.GetTemporaryWorkingDirectory(out var _), sb.ToString(), subfolderName); } /// @@ -723,7 +723,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, package => { progressMonitor.NugetInstall(package); - using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package)); + using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package, "missingpackages_workingdir")); var success = dotnet.New(tempDir.DirInfo.FullName); if (!success) { diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 5cf38e6b48e..873bca533e2 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -144,20 +144,40 @@ namespace Semmle.Util return nested; } + private static string? tempFolderPath = null; + private static readonly object lockObject = new(); + public static string GetTemporaryWorkingDirectory(Func getEnvironmentVariable, string lang, out bool shouldCleanUp) { shouldCleanUp = false; var tempFolder = getEnvironmentVariable($"CODEQL_EXTRACTOR_{lang}_SCRATCH_DIR"); - - if (string.IsNullOrEmpty(tempFolder)) + if (!string.IsNullOrEmpty(tempFolder)) { + return tempFolder; + } + + if (!string.IsNullOrEmpty(tempFolderPath)) + { + shouldCleanUp = true; + return tempFolderPath; + } + + lock (lockObject) + { + if (!string.IsNullOrEmpty(tempFolderPath)) + { + shouldCleanUp = true; + return tempFolderPath; + } + var tempPath = Path.GetTempPath(); var name = Guid.NewGuid().ToString("N").ToUpper(); tempFolder = Path.Combine(tempPath, "GitHub", name); + Directory.CreateDirectory(tempFolder); + tempFolderPath = tempFolder; shouldCleanUp = true; + return tempFolder; } - - return tempFolder; } public static string GetTemporaryWorkingDirectory(out bool shouldCleanUp) => From ad394a0d84c45153b1fe8c584e0bc5637609101f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 19 Dec 2023 13:11:22 +0100 Subject: [PATCH 146/205] C#: Download dotnet-install.sh to the scratch dir --- .../autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index 9dd441c5481..20cebd82f56 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -190,18 +190,20 @@ namespace Semmle.Autobuild.CSharp } else { + var dotnetInstallPath = builder.Actions.PathCombine(FileUtils.GetTemporaryWorkingDirectory(builder.Actions.GetEnvironmentVariable, builder.Options.Language.UpperCaseName, out var _), ".dotnet", "dotnet-install.sh"); + var downloadDotNetInstallSh = BuildScript.DownloadFile( "https://dot.net/v1/dotnet-install.sh", - "dotnet-install.sh", + dotnetInstallPath, e => builder.Log(Severity.Warning, $"Failed to download 'dotnet-install.sh': {e.Message}")); var chmod = new CommandBuilder(builder.Actions). RunCommand("chmod"). Argument("u+x"). - Argument("dotnet-install.sh"); + Argument(dotnetInstallPath); var install = new CommandBuilder(builder.Actions). - RunCommand("./dotnet-install.sh"). + RunCommand(dotnetInstallPath). Argument("--channel"). Argument("release"). Argument("--version"). @@ -211,7 +213,7 @@ namespace Semmle.Autobuild.CSharp var removeScript = new CommandBuilder(builder.Actions). RunCommand("rm"). - Argument("dotnet-install.sh"); + Argument(dotnetInstallPath); return downloadDotNetInstallSh & chmod.Script & install.Script & BuildScript.Try(removeScript.Script); } From d22acfb4494c55118df67fd98e22c3efc31e150d Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Tue, 19 Dec 2023 13:49:53 +0100 Subject: [PATCH 147/205] C#: Classify test support files in model editor queries --- .../modeleditor/FrameworkModeEndpointsQuery.qll | 6 +++++- csharp/ql/src/utils/modeleditor/ModelEditor.qll | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll index 31eb497b44c..51387628d51 100644 --- a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll +++ b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll @@ -7,7 +7,11 @@ private import ModelEditor * A class of effectively public callables from source code. */ class PublicEndpointFromSource extends Endpoint { - PublicEndpointFromSource() { this.fromSource() and not this.getFile() instanceof TestFile } + PublicEndpointFromSource() { + this.fromSource() and + not this.getFile() instanceof TestFile and + not this.getFile() instanceof TestSupportFile + } override predicate isSource() { this instanceof SourceCallable } diff --git a/csharp/ql/src/utils/modeleditor/ModelEditor.qll b/csharp/ql/src/utils/modeleditor/ModelEditor.qll index 44d16707c12..9ae15965dc2 100644 --- a/csharp/ql/src/utils/modeleditor/ModelEditor.qll +++ b/csharp/ql/src/utils/modeleditor/ModelEditor.qll @@ -110,9 +110,11 @@ string supportedType(Endpoint endpoint) { } string methodClassification(Call method) { - method.getFile() instanceof TestFile and result = "test" + (method.getFile() instanceof TestFile or method.getFile() instanceof TestSupportFile) and + result = "test" or not method.getFile() instanceof TestFile and + not method.getFile() instanceof TestSupportFile and result = "source" } @@ -129,3 +131,12 @@ private string qualifiedTypeName(string namespace, Type t) { private string qualifiedCallableName(string namespace, string type, Callable c) { exists(string name | hasQualifiedMethodName(c, namespace, type, name) | result = name) } + +/** A file that doesn't contain tests itself, but is only used in tests. */ +class TestSupportFile extends File { + TestSupportFile() { + not this instanceof TestFile and + this.getAbsolutePath().matches(["%/test/%", "%/tests/%"]) and + not this.getAbsolutePath().matches("%/ql/test/%") // allows our test cases to work + } +} From c8a369d9ef3f9c5363b8812f6d2eb9082ad5c890 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 19 Dec 2023 14:58:07 +0100 Subject: [PATCH 148/205] Update java/ql/lib/ext/jakarta.persistence.model.yml --- java/ql/lib/ext/jakarta.persistence.model.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/ext/jakarta.persistence.model.yml b/java/ql/lib/ext/jakarta.persistence.model.yml index 0ee0eee2eec..f20c2b225aa 100644 --- a/java/ql/lib/ext/jakarta.persistence.model.yml +++ b/java/ql/lib/ext/jakarta.persistence.model.yml @@ -5,4 +5,3 @@ extensions: data: - ["jakarta.persistence", "EntityManager", True, "createNativeQuery", "(String,Class)", "", "Argument[0]", "sql-injection", "ai-manual"] - ["jakarta.persistence", "EntityManager", True, "createQuery", "(CriteriaDelete)", "", "Argument[0]", "sql-injection", "ai-manual"] - - ["jakarta.persistence", "Query", True, "setParameter", "(Parameter,Object)", "", "Argument[this]", "sql-injection", "ai-manual"] From 016d20035597565674d3f8c78c640f9972a80b8b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 19 Dec 2023 15:14:47 +0100 Subject: [PATCH 149/205] Fix unit tests --- .../BuildScripts.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index 155ae44d494..966e8a10b1e 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -936,9 +936,9 @@ namespace Semmle.Autobuild.CSharp.Tests { actions.RunProcess["dotnet --list-sdks"] = 0; actions.RunProcessOut["dotnet --list-sdks"] = "2.1.2 [C:\\Program Files\\dotnet\\sdks]\n2.1.4 [C:\\Program Files\\dotnet\\sdks]"; - actions.RunProcess[@"chmod u+x dotnet-install.sh"] = 0; - actions.RunProcess[@"./dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"rm dotnet-install.sh"] = 0; + actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; + actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; + actions.RunProcess[@"rm scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet --info"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet clean C:\Project/test.csproj"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet restore C:\Project/test.csproj"] = 0; @@ -960,7 +960,8 @@ namespace Semmle.Autobuild.CSharp.Tests "); actions.LoadXml[@"C:\Project/test.csproj"] = xml; - actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "dotnet-install.sh")); + actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "scratch/.dotnet/dotnet-install.sh")); + actions.CreateDirectories.Add(@"scratch/.dotnet"); var autobuilder = CreateAutoBuilder(false, dotnetVersion: "2.1.3"); TestAutobuilderScript(autobuilder, 0, 8); @@ -972,9 +973,9 @@ namespace Semmle.Autobuild.CSharp.Tests actions.RunProcess["dotnet --list-sdks"] = 0; actions.RunProcessOut["dotnet --list-sdks"] = @"2.1.3 [C:\Program Files\dotnet\sdks] 2.1.4 [C:\Program Files\dotnet\sdks]"; - actions.RunProcess[@"chmod u+x dotnet-install.sh"] = 0; - actions.RunProcess[@"./dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"rm dotnet-install.sh"] = 0; + actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; + actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; + actions.RunProcess[@"rm scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet --info"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet clean C:\Project/test.csproj"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet restore C:\Project/test.csproj"] = 0; @@ -996,7 +997,8 @@ namespace Semmle.Autobuild.CSharp.Tests "); actions.LoadXml[@"C:\Project/test.csproj"] = xml; - actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "dotnet-install.sh")); + actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "scratch/.dotnet/dotnet-install.sh")); + actions.CreateDirectories.Add(@"scratch/.dotnet"); var autobuilder = CreateAutoBuilder(false, dotnetVersion: "2.1.3"); TestAutobuilderScript(autobuilder, 0, 8); From 272f3265ea0cc7acf3c55d5a46a33ec7017de5a8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 15:20:53 +0100 Subject: [PATCH 150/205] C#: Delete the handwritten EntityFramework stubs. --- ...ityFramework.cs => EntityFrameworkCore.cs} | 48 ------------------- 1 file changed, 48 deletions(-) rename csharp/ql/test/resources/stubs/{EntityFramework.cs => EntityFrameworkCore.cs} (67%) diff --git a/csharp/ql/test/resources/stubs/EntityFramework.cs b/csharp/ql/test/resources/stubs/EntityFrameworkCore.cs similarity index 67% rename from csharp/ql/test/resources/stubs/EntityFramework.cs rename to csharp/ql/test/resources/stubs/EntityFrameworkCore.cs index dca9c1685cb..db77ca4dc9c 100644 --- a/csharp/ql/test/resources/stubs/EntityFramework.cs +++ b/csharp/ql/test/resources/stubs/EntityFrameworkCore.cs @@ -4,54 +4,6 @@ using System.ComponentModel; using System.Threading.Tasks; using System; -namespace System.Data.Entity -{ - public class DbSet - { - } - - public class DbSet : IEnumerable - { - public void Add(TEntity t) { } - public void AddRange(IEnumerable t) { } - public void Attach(TEntity t) { } - IEnumerator IEnumerable.GetEnumerator() => null; - IEnumerator IEnumerable.GetEnumerator() => null; - } - - public class Database - { - public int ExecuteSqlQuery(string sql, params object[] parameters) => 0; - public int ExecuteSqlCommand(string sql, params object[] parameters) => 0; - public async Task ExecuteSqlCommandAsync(string sql, params object[] parameters) => throw null; - public Infrastructure.DbRawSqlQuery SqlQuery(string sql, params object[] parameters) => null; - } - - public class DbContext : IDisposable - { - public void Dispose() { } - public Database Database => null; - public Infrastructure.DbRawSqlQuery SqlQuery(string sql, params object[] parameters) => null; - public int SaveChanges() => 0; - public System.Threading.Tasks.Task SaveChangesAsync() => null; - } -} - -namespace System.Data.Entity.Infrastructure -{ - interface IDbAsyncEnumerable - { - } - - public class DbRawSqlQuery : IEnumerable, IListSource, IDbAsyncEnumerable - { - IEnumerator IEnumerable.GetEnumerator() => null; - IEnumerator IEnumerable.GetEnumerator() => null; - bool IListSource.ContainsListCollection => false; - IList IListSource.GetList() => null; - } -} - namespace Microsoft.EntityFrameworkCore { public class DbSet : IEnumerable From 80f3c6cc2bbc5cada2fd3d1e10b750c29a6a54c3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 15:21:56 +0100 Subject: [PATCH 151/205] C#: Manual changes to the project dependecies to avoid conflicts when multiple projects are loaded from source. --- .../stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj | 2 +- .../8.0.0/System.Diagnostics.PerformanceCounter.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj index 93c7940e335..5d32dddf523 100644 --- a/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj @@ -7,7 +7,7 @@ - + diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj index 7f55f3e68b2..6ea89ebc26b 100644 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj +++ b/csharp/ql/test/resources/stubs/System.Diagnostics.PerformanceCounter/8.0.0/System.Diagnostics.PerformanceCounter.csproj @@ -7,7 +7,7 @@ - + From 681ac7e5f02db465f4335ad7084b74470a1a0cec Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 19 Dec 2023 15:22:45 +0100 Subject: [PATCH 152/205] C#: Update tests (and expected output) to use the generated EntityFramework stubs. --- .../dataflow/library/FlowSummaries.expected | 5592 ++++++++++++++++- .../library/FlowSummariesFiltered.expected | 1217 ++++ .../library-tests/dataflow/library/options | 3 +- .../EntityFramework/FlowSummaries.expected | 29 + .../frameworks/EntityFramework/options | 3 +- .../frameworks/system/data/entity/options | 4 +- .../security/dataflow/flowsources/options | 2 +- 7 files changed, 6842 insertions(+), 8 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 821f493e9b0..e69e0cd4982 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -931,6 +931,11 @@ summary | Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;taint;df-generated | | Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;taint;df-generated | | Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CSharpCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[this];taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CreateCompiler;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CreateGenerator;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | | Microsoft.EntityFrameworkCore;DbSet;false;Add;(TEntity);;Argument[0];Argument[this].Element;value;manual | | Microsoft.EntityFrameworkCore;DbSet;false;AddAsync;(TEntity,System.Threading.CancellationToken);;Argument[0];Argument[this].Element;value;manual | | Microsoft.EntityFrameworkCore;DbSet;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].WithElement;Argument[this];value;manual | @@ -1739,10 +1744,50 @@ summary | Microsoft.VisualBasic;Collection;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;false;get_Item;(System.String);;Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | +| Microsoft.VisualBasic;VBCodeProvider;false;CreateCompiler;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;CreateGenerator;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;VBCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeFileHandle;false;SafeFileHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafePipeHandle;false;SafePipeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeProcessHandle;false;SafeProcessHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeWaitHandle;false;SafeWaitHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.Win32;PowerModeChangedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.PowerModeChangedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionEndedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionEndedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionEndingEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionEndingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionSwitchEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionSwitchEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_DisplaySettingsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_DisplaySettingsChanging;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_EventsThreadShutdown;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_InstalledFontsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_LowMemory;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_PaletteChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_PowerModeChanged;(Microsoft.Win32.PowerModeChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionEnded;(Microsoft.Win32.SessionEndedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionEnding;(Microsoft.Win32.SessionEndingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionSwitch;(Microsoft.Win32.SessionSwitchEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_TimeChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_TimerElapsed;(Microsoft.Win32.TimerElapsedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_UserPreferenceChanged;(Microsoft.Win32.UserPreferenceChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_UserPreferenceChanging;(Microsoft.Win32.UserPreferenceChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_DisplaySettingsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_DisplaySettingsChanging;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_EventsThreadShutdown;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_InstalledFontsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_LowMemory;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_PaletteChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_PowerModeChanged;(Microsoft.Win32.PowerModeChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionEnded;(Microsoft.Win32.SessionEndedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionEnding;(Microsoft.Win32.SessionEndingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionSwitch;(Microsoft.Win32.SessionSwitchEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_TimeChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_TimerElapsed;(Microsoft.Win32.TimerElapsedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_UserPreferenceChanged;(Microsoft.Win32.UserPreferenceChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_UserPreferenceChanging;(Microsoft.Win32.UserPreferenceChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;TimerElapsedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.TimerElapsedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;UserPreferenceChangedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.UserPreferenceChangedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;UserPreferenceChangingEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.UserPreferenceChangingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Newtonsoft.Json.Linq;JArray;false;Add;(Newtonsoft.Json.Linq.JToken);;Argument[0];Argument[this].Element;value;manual | | Newtonsoft.Json.Linq;JArray;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | Newtonsoft.Json.Linq;JArray;false;CopyTo;(Newtonsoft.Json.Linq.JToken[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | @@ -4016,6 +4061,72 @@ summary | System.Buffers;SequenceReader;false;get_Position;();;Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SequenceReader;false;get_UnreadSequence;();;Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SpanAction;false;BeginInvoke;(System.Span,TArg,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[1];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.IO.TextWriter);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateTypes;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentClass;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMember;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMemberName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentTypeName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_Options;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_Output;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateNamespace;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_BracingStyle;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_IndentString;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Add;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CopyTo;(System.CodeDom.Compiler.CompilerError[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Insert;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Remove;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;set_Item;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;GetExtensions;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;GetLanguages;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;get_CodeDomProviderType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerParameters;false;set_TempFiles;(System.CodeDom.Compiler.TempFileCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerResults;false;get_CompiledAssembly;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerResults;false;set_CompiledAssembly;(System.Reflection.Assembly);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[1].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Tool;();;Argument[this];ReturnValue;taint;df-generated | @@ -4069,6 +4180,355 @@ summary | System.CodeDom.Compiler;IndentedTextWriter;false;get_InnerWriter;();;Argument[this];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;false;get_NewLine;();;Argument[this];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;false;set_NewLine;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.CodeDom.Compiler;TempFileCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.CodeDom.Compiler;TempFileCollection;false;TempFileCollection;(System.String,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;get_BasePath;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;get_TempDir;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;CodeArgumentReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;get_ParameterName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;set_ParameterName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;get_Initializers;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttachEventStatement;false;CodeAttachEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttachEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;CodeAttributeArgument;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Add;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CopyTo;(System.CodeDom.CodeAttributeArgument[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Remove;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_Arguments;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_AttributeType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Add;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeAttributeDeclaration[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Remove;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;set_TargetType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;get_LocalName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCatchClause;false;set_CatchExceptionType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;set_LocalName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Add;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CopyTo;(System.CodeDom.CodeCatchClause[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Insert;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Remove;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;CodeChecksumPragma;(System.String,System.Guid,System.Byte[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;get_FileName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;CodeComment;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;CodeComment;(System.String,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;get_Text;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeComment;false;set_Text;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Add;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CopyTo;(System.CodeDom.CodeCommentStatement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Remove;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeDefaultValueExpression;false;CodeDefaultValueExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDefaultValueExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;get_MethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;set_DelegateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;set_MethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Add;(System.CodeDom.CodeDirective);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CopyTo;(System.CodeDom.CodeDirective[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Insert;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Remove;(System.CodeDom.CodeDirective);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;set_Item;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;CodeEventReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;get_EventName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;set_EventName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Add;(System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CopyTo;(System.CodeDom.CodeExpression[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Remove;(System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;CodeFieldReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;get_FieldName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;set_FieldName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;CodeGotoStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;get_Label;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;set_Label;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String,System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;get_Label;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;set_Label;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLinePragma;false;CodeLinePragma;(System.String,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLinePragma;false;get_FileName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeLinePragma;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberEvent;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateImplementationTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateParameters;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateStatements;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;get_ImplementationTypes;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;get_Parameters;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;get_Statements;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateImplementationTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateParameters;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateStatements;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberProperty;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeMethodReferenceExpression,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;set_Method;(System.CodeDom.CodeMethodReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeTypeReference[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;get_MethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;set_MethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespace;false;CodeNamespace;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateComments;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateImports;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;get_Comments;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Imports;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Types;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateComments;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateImports;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Add;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CopyTo;(System.CodeDom.CodeNamespace[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Insert;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Remove;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;CodeNamespaceImport;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;get_Namespace;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;set_Namespace;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Add;(System.CodeDom.CodeNamespaceImport);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Add;(System.Object);;Argument[0];Argument[this].Element;value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;AddRange;(System.CodeDom.CodeNamespaceImport[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespaceImport);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Add;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CopyTo;(System.CodeDom.CodeParameterDeclarationExpression[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Remove;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;CodePropertyReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;get_PropertyName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;set_PropertyName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;CodeRegionDirective;(System.CodeDom.CodeRegionMode,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;get_RegionText;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;set_RegionText;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;CodeSnippetCompileUnit;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;CodeSnippetExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;CodeSnippetStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;CodeSnippetTypeMember;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;get_Text;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;set_Text;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Add;(System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CopyTo;(System.CodeDom.CodeStatement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Remove;(System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;CodeTypeDeclaration;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;add_PopulateBaseTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;add_PopulateMembers;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;get_BaseTypes;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;get_Members;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;remove_PopulateBaseTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;remove_PopulateMembers;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Add;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeTypeDeclaration[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Remove;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDelegate;false;CodeTypeDelegate;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDelegate;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMember;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeMember;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMember;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Add;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CopyTo;(System.CodeDom.CodeTypeMember[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Remove;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;CodeTypeParameter;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Add;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CopyTo;(System.CodeDom.CodeTypeParameter[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Remove;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String,System.CodeDom.CodeTypeReferenceOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;get_BaseType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeReference;false;set_BaseType;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CopyTo;(System.CodeDom.CodeTypeReference[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Remove;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;CodeVariableReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;get_VariableName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;set_VariableName;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Concurrent;BlockingCollection;false;Add;(T);;Argument[0];Argument[this].Element;value;manual | | System.Collections.Concurrent;BlockingCollection;false;Add;(T,System.Threading.CancellationToken);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Concurrent;BlockingCollection;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection);;Argument[0].Element;Argument[this];taint;df-generated | @@ -5895,6 +6355,329 @@ summary | System.ComponentModel;WarningException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;Win32Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;Win32Exception;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetConfigTypeName;(System.Type);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);;Argument[4].Element;ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForRead;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForRead;(System.String,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigHost;true;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigHost;true;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;add_ConfigChanged;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;add_ConfigRemoved;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;remove_ConfigChanged;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;remove_ConfigRemoved;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;InternalConfigEventHandler;false;BeginInvoke;(System.Object,System.Configuration.Internal.InternalConfigEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;StreamChangeCallback;false;BeginInvoke;(System.String,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration.Provider;ProviderCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration.Provider;ProviderCollection;false;CopyTo;(System.Configuration.Provider.ProviderBase[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration.Provider;ProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;AppSettingsReader;false;GetValue;(System.String,System.Type);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;AppSettingsSection;false;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;AppSettingsSection;false;GetRuntimeObject;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;AppSettingsSection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;AppSettingsSection;false;get_File;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;AppSettingsSection;false;get_Settings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.ComponentModel.IComponent,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;add_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingChanging;(System.Configuration.SettingChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingsLoaded;(System.Configuration.SettingsLoadedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingsSaving;(System.Configuration.SettingsSavingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;get_Context;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;get_PropertyValues;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;get_SettingsKey;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingChanging;(System.Configuration.SettingChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingsLoaded;(System.Configuration.SettingsLoadedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingsSaving;(System.Configuration.SettingsSavingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;set_SettingsKey;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CallbackValidator;false;CallbackValidator;(System.Type,System.Configuration.ValidatorCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_CallbackMethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_ValidatorInstance;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;set_CallbackMethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;set_Type;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ClientSettingsSection;false;get_Settings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;AddRange;(System.String[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;CommaDelimitedStringCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Insert;(System.Int32,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;set_Item;(System.Int32,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateCDataSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateComment;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateSignificantWhitespace;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateTextNode;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateWhitespace;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;Load;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;LoadSingleElement;(System.String,System.Xml.XmlTextReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;GetSectionGroup;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_AssemblyStringTransformer;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_RootSectionGroup;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_SectionGroups;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_Sections;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_TypeStringTransformer;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;set_AssemblyStringTransformer;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;Configuration;false;set_TypeStringTransformer;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_AddItemName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_ClearItemsName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_RemoveItemName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_AddItemName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_ClearItemsName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_RemoveItemName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;false;get_EvaluationContext;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;GetTransformedAssemblyString;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;GetTransformedTypeString;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;SerializeElement;(System.Xml.XmlWriter,System.Boolean);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElement;true;SerializeToXmlElement;(System.Xml.XmlWriter,System.String);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElement;true;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;get_ElementProperty;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;BaseAdd;(System.Configuration.ConfigurationElement,System.Boolean);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;ConfigurationElementCollection;(System.Collections.IComparer);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration;ConfigurationElementCollection;false;CopyTo;(System.Configuration.ConfigurationElement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;ConfigurationElementCollection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;SerializeElement;(System.Xml.XmlWriter,System.Boolean);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_AddElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_ClearElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_RemoveElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_AddElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_ClearElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_RemoveElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Configuration.ConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Int32,System.Configuration.ConfigurationElement);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlReader);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Errors;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Message;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;ConfigurationException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationException;false;ConfigurationException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationException;false;GetXmlNodeFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;get_BareMessage;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationFileMap;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLocation;false;OpenConfiguration;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationLockCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration;ConfigurationLockCollection;false;CopyTo;(System.String[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;ConfigurationLockCollection;false;SetFromList;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;get_AttributeList;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;ConfigurationManager;false;OpenExeConfiguration;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedMachineConfiguration;(System.Configuration.ConfigurationFileMap);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationProperty;false;ConfigurationProperty;(System.String,System.Type,System.Object,System.ComponentModel.TypeConverter,System.Configuration.ConfigurationValidatorBase,System.Configuration.ConfigurationPropertyOptions,System.String);;Argument[3];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationProperty;false;get_Converter;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;Add;(System.Configuration.ConfigurationProperty);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationPropertyCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration;ConfigurationPropertyCollection;false;CopyTo;(System.Configuration.ConfigurationProperty[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;ConfigurationPropertyCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSection;true;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSection;true;GetRuntimeObject;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;ConfigurationSectionCollection;false;Add;(System.String,System.Configuration.ConfigurationSection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationSectionCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;ConfigurationSectionCollection;false;GetKey;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_SectionGroups;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_Sections;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;set_Type;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationSectionGroupCollection;false;CopyTo;(System.Configuration.ConfigurationSectionGroup[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;ConfigurationSectionGroupCollection;false;GetKey;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_ConnectionString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_ProviderName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;Add;(System.Configuration.ConnectionStringSettings);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;BaseAdd;(System.Int32,System.Configuration.ConfigurationElement);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConnectionStringSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ConnectionStringSettings);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConnectionStringsSection;false;GetRuntimeObject;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;ConnectionStringsSection;false;get_ConnectionStrings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ContextInformation;false;get_HostingContext;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DefaultSection;false;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;DefaultSection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;DefaultSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DefaultSettingValueAttribute;false;DefaultSettingValueAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;DefaultSettingValueAttribute;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DictionarySectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;DpapiProtectedConfigurationProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;DpapiProtectedConfigurationProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration;GenericEnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;GenericEnumConverter;false;GenericEnumConverter;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;IdnElement;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;IgnoreSection;false;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;IgnoreSection;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;IgnoreSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;InfiniteTimeSpanConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;InfiniteTimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;IriParsingElement;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationCollection;false;Add;(System.Configuration.KeyValueConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;KeyValueConfigurationCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;KeyValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;get_Key;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;get_ApplicationName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;set_ApplicationName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;Add;(System.Configuration.NameValueConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;NameValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;set_Item;(System.String,System.Configuration.NameValueConfigurationElement);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;NameValueConfigurationElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;NameValueConfigurationElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;NameValueFileSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.Configuration;NameValueSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.Configuration;PropertyInformation;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;PropertyInformationCollection;false;CopyTo;(System.Configuration.PropertyInformation[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;PropertyInformationCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;PropertyInformationCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationSection;false;get_DefaultProvider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationSection;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedProviderSettings;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedProviderSettings;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ProviderSettings;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Parameters;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;Add;(System.Configuration.ProviderSettings);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ProviderSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ProviderSettings);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;RegexStringValidator;false;RegexStringValidator;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SchemeSettingElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SchemeSettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_ConfigSource;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_ProtectionProvider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;set_ConfigSource;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SectionInformation;false;set_Type;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[3];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_NewValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingClass;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingKey;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventHandler;false;BeginInvoke;(System.Object,System.Configuration.SettingChangingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;SettingElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingElementCollection;false;Add;(System.Configuration.SettingElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;SettingElementCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SettingValueElement;false;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingValueElement;false;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingValueElement;false;SerializeToXmlElement;(System.Xml.XmlWriter,System.String);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;SettingValueElement;false;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingValueElement;false;get_ValueXml;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingValueElement;false;set_ValueXml;(System.Xml.XmlNode);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[2].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Synchronized;(System.Configuration.SettingsBase);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Context;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_PropertyValues;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsDescriptionAttribute;false;SettingsDescriptionAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsDescriptionAttribute;false;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsGroupDescriptionAttribute;false;SettingsGroupDescriptionAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsGroupDescriptionAttribute;false;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsGroupNameAttribute;false;SettingsGroupNameAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsGroupNameAttribute;false;get_GroupName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsLoadedEventArgs;false;SettingsLoadedEventArgs;(System.Configuration.SettingsProvider);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsLoadedEventArgs;false;get_Provider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsLoadedEventHandler;false;BeginInvoke;(System.Object,System.Configuration.SettingsLoadedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;SettingsPropertyCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingsPropertyCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration;SettingsPropertyCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;SettingsPropertyCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;SettingsPropertyValue;false;get_PropertyValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;get_SerializedValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;set_PropertyValue;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;set_SerializedValue;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;Add;(System.Configuration.SettingsPropertyValue);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingsPropertyValueCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Configuration;SettingsPropertyValueCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Configuration;SettingsPropertyValueCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsProviderAttribute;false;get_ProviderTypeName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsSavingEventHandler;false;BeginInvoke;(System.Object,System.ComponentModel.CancelEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;StringValidator;false;StringValidator;(System.Int32,System.Int32,System.String);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;SubclassTypeValidator;false;SubclassTypeValidator;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;TypeNameConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_Idn;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_IriParsing;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_SchemeSettings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ValidatorCallback;false;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Data.Common;DataAdapter;false;add_FillError;(System.Data.FillErrorEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Common;DataAdapter;false;get_TableMappings;();;Argument[this];ReturnValue;taint;df-generated | | System.Data.Common;DataAdapter;false;remove_FillError;(System.Data.FillErrorEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -6118,13 +6901,480 @@ summary | System.Data.Common;RowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[this];taint;df-generated | | System.Data.Common;RowUpdatingEventArgs;false;set_Command;(System.Data.IDbCommand);;Argument[0];Argument[this];taint;df-generated | | System.Data.Common;RowUpdatingEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[this];taint;df-generated | -| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | -| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;All;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Any;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;CrossApply;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;FullOuterJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;InnerJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;LeftOuterJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderBy;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderBy;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OuterApply;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Select;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenBy;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenBy;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Where;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[16];Argument[16].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[15];Argument[15].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[14];Argument[14].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[13];Argument[13].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[12];Argument[12].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[11];Argument[11].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[10];Argument[10].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[9];Argument[9].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[6];Argument[6].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common;DbCommandDefinition;false;DbCommandDefinition;(System.Data.Common.DbCommand,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common;DbProviderServices;true;RegisterInfoMessageHandler;(System.Data.Common.DbConnection,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.EntityClient;EntityCommand;false;ExecuteDbDataReaderAsync;(System.Data.CommandBehavior,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnection;false;OpenAsync;(System.Threading.CancellationToken);;Argument[0];ReturnValue;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;false;get_Keys;();;Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | +| System.Data.Entity.Core.EntityClient;EntityDataReader;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.EntityClient;EntityDataReader;false;GetProviderSpecificValue;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityDataReader;false;GetProviderSpecificValues;(System.Object[]);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;Add;(System.Object);;Argument[0];Argument[this].Element;value;manual | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;AddRange;(System.Array);;Argument[0].Element;Argument[this].Element;value;manual | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.EntityClient;EntityParameterCollection;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | +| System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;false;add_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;false;remove_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;LoadFromAssembly;(System.Reflection.Assembly,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;ObjectItemCollection;false;LoadFromAssembly;(System.Reflection.Assembly,System.Data.Entity.Core.Metadata.Edm.EdmItemCollection,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;SsdlSerializer;false;add_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;SsdlSerializer;false;remove_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;false;Add;(TEntity);;Argument[0];Argument[this].Element;value;manual | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;false;CopyTo;(TEntity[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Core.Objects.DataClasses;EntityCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Objects.DataClasses;RelatedEnd;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Objects.DataClasses;RelatedEnd;false;add_AssociationChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;RelatedEnd;false;remove_AssociationChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;StructuralObject;false;add_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;StructuralObject;false;add_PropertyChanging;(System.ComponentModel.PropertyChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;StructuralObject;false;remove_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;StructuralObject;false;remove_PropertyChanging;(System.ComponentModel.PropertyChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;LoadProperty;(TEntity,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;LoadProperty;(TEntity,System.Linq.Expressions.Expression>,System.Data.Entity.Core.Objects.MergeOption);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;add_ObjectMaterialized;(System.Data.Entity.Core.Objects.ObjectMaterializedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;add_SavingChanges;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;remove_ObjectMaterialized;(System.Data.Entity.Core.Objects.ObjectMaterializedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;remove_SavingChanges;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectMaterializedEventHandler;false;BeginInvoke;(System.Object,System.Data.Entity.Core.Objects.ObjectMaterializedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;false;Add;(System.Data.Entity.Core.Objects.ObjectParameter);;Argument[0];Argument[this].Element;value;manual | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;false;CopyTo;(System.Data.Entity.Core.Objects.ObjectParameter[],System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectParameterCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectResult;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectResult;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;ChangeRelationshipState;(TEntity,System.Object,System.Linq.Expressions.Expression>,System.Data.Entity.EntityState);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;add_ObjectStateManagerChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;remove_ObjectStateManagerChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;DbConfigurationLoadedEventArgs;false;ReplaceService;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;ExecutionStrategyResolver;false;ExecutionStrategyResolver;(System.String,System.String,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;SingletonDependencyResolver;false;SingletonDependencyResolver;(T,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;TransactionHandlerResolver;false;TransactionHandlerResolver;(System.Func,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Func>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Interception;DatabaseLogFormatter;false;DatabaseLogFormatter;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Interception;DatabaseLogFormatter;false;DatabaseLogFormatter;(System.Data.Entity.DbContext,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;CommitFailureHandler;false;CommitFailureHandler;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbComplexPropertyEntry;false;ComplexProperty;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbComplexPropertyEntry;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbContextInfo;false;set_OnModelCreating;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Collection;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;ComplexProperty;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Reference;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;ExecuteAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;ExecuteAsync;(System.Func>,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;UnwrapAndHandleException;(System.Exception,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Infrastructure;DbQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Infrastructure;DbQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AllAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AllAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AnyAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AnyAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;CountAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;CountAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstOrDefaultAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstOrDefaultAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;LongCountAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;LongCountAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleOrDefaultAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleOrDefaultAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DefaultExecutionStrategy;false;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DefaultExecutionStrategy;false;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DefaultExecutionStrategy;false;ExecuteAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DefaultExecutionStrategy;false;ExecuteAsync;(System.Func>,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;ExecuteAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;ExecuteAsync;(System.Func>,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;ForeignKey;(System.String,System.Linq.Expressions.Expression>,System.Boolean,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;Index;(System.Linq.Expressions.Expression>,System.String,System.Boolean,System.Boolean,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;PrimaryKey;(System.Linq.Expressions.Expression>,System.String,System.Boolean,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.Char[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object);;Argument[1];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[1];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object,System.Object);;Argument[2];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object[]);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;Write;(System.String,System.Object[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.Char[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.Char[],System.Int32,System.Int32);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object);;Argument[1];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[1];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object,System.Object);;Argument[2];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object[]);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;WriteLine;(System.String,System.Object[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;get_NewLine;();;Argument[this];ReturnValue;taint;df-generated | +| System.Data.Entity.Migrations.Utilities;IndentedTextWriter;false;set_NewLine;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Migrations;DbMigration;false;AddColumn;(System.String,System.String,System.Func,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterColumn;(System.String,System.String,System.Func,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterStoredProcedure;(System.String,System.Func,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterTableAnnotations;(System.String,System.Func,System.Collections.Generic.IDictionary,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateStoredProcedure;(System.String,System.Func,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateTable;(System.String,System.Func,System.Collections.Generic.IDictionary,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateTable;(System.String,System.Func,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigrationsConfiguration;false;SetHistoryContextFactory;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbSetMigrationsExtensions;false;AddOrUpdate;(System.Data.Entity.IDbSet,System.Linq.Expressions.Expression>,TEntity[]);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Delete;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Insert;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Update;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;MapToStoredProcedures;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DependentNavigationPropertyConfiguration;false;HasForeignKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Properties;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Requires;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ForeignKeyNavigationPropertyConfiguration;false;Map;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProceduresConfiguration;false;Delete;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProceduresConfiguration;false;Insert;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyNavigationPropertyConfiguration;false;Map;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyNavigationPropertyConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Delete;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Insert;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Update;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithOptionalDependent;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithOptionalPrincipal;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionWithHavingConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithRequiredDependent;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithRequiredPrincipal;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Configure;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionWithHavingConfiguration;false;Configure;(System.Action,TValue>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionWithHavingConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Conventions;AttributeToColumnAnnotationConvention;false;AttributeToColumnAnnotationConvention;(System.String,System.Func,TAnnotation>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Conventions;AttributeToTableAnnotationConvention;false;AttributeToTableAnnotationConvention;(System.String,System.Func,TAnnotation>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;ComplexTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasIndex;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>,System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Map;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Map;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.SqlServer.Utilities;TaskExtensions+CultureAwaiter;false;OnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.SqlServer.Utilities;TaskExtensions+CultureAwaiter;false;UnsafeOnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.SqlServer.Utilities;TaskExtensions+CultureAwaiter;false;OnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.SqlServer.Utilities;TaskExtensions+CultureAwaiter;false;UnsafeOnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.SqlServer;SqlProviderServices;false;RegisterInfoMessageHandler;(System.Data.Common.DbConnection,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Utilities;TaskExtensions+CultureAwaiter;false;OnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Utilities;TaskExtensions+CultureAwaiter;false;UnsafeOnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Utilities;TaskExtensions+CultureAwaiter;false;OnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Utilities;TaskExtensions+CultureAwaiter;false;UnsafeOnCompleted;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;Database;false;set_Log;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetContextFactory;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetContextFactory;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDatabaseLogFormatter;(System.Func,System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDefaultHistoryContext;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDefaultTransactionHandler;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetExecutionStrategy;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetExecutionStrategy;(System.String,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetHistoryContext;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetMetadataAnnotationSerializer;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetMigrationSqlGenerator;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetModelCacheKey;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetTransactionHandler;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetTransactionHandler;(System.String,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;add_Loaded;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;remove_Loaded;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Entity;DbSet;false;Add;(TEntity);;Argument[0];Argument[this].Element;value;manual | | System.Data.Entity;DbSet;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].WithElement;Argument[this];value;manual | | System.Data.Entity;DbSet;false;Attach;(TEntity);;Argument[0];Argument[this].Element;value;manual | -| System.Data.Entity;DbSet;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | -| System.Data.Entity;DbSet;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Data.Entity;QueryableExtensions;false;AllAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AllAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AnyAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AnyAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;CountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;CountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Include;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;LongCountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;LongCountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MaxAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MaxAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MinAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MinAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Skip;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Take;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Threading.CancellationToken);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;OnChangeEventHandler;false;BeginInvoke;(System.Object,System.Data.SqlClient.SqlNotificationEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlBulkCopy;false;add_SqlRowsCopied;(System.Data.SqlClient.SqlRowsCopiedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlBulkCopy;false;remove_SqlRowsCopied;(System.Data.SqlClient.SqlRowsCopiedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -7006,6 +8256,27 @@ summary | System.Diagnostics;TraceSource;false;get_Switch;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;TraceSource;false;remove_Initializing;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Diagnostics;TraceSource;false;set_Switch;(System.Diagnostics.SourceSwitch);;Argument[0];Argument[this];taint;df-generated | +| System.Drawing.Configuration;SystemDrawingSection;false;get_BitmapSuffix;();;Argument[this];ReturnValue;taint;df-generated | +| System.Drawing.Imaging;PlayRecordCallback;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_BeginPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_EndPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_PrintPage;(System.Drawing.Printing.PrintPageEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_QueryPageSettings;(System.Drawing.Printing.QueryPageSettingsEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_BeginPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_EndPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_PrintPage;(System.Drawing.Printing.PrintPageEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_QueryPageSettings;(System.Drawing.Printing.QueryPageSettingsEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.PrintEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintPageEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.PrintPageEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Drawing.Printing;PrinterSettings+StringCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Drawing.Printing;PrinterSettings+StringCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Drawing.Printing;QueryPageSettingsEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.QueryPageSettingsEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Drawing;Color;false;FromName;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;Color;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System.Drawing;Color;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | @@ -7013,6 +8284,58 @@ summary | System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Drawing;ColorTranslator;false;FromHtml;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;ColorTranslator;false;ToHtml;(System.Drawing.Color);;Argument[0];ReturnValue;taint;df-generated | +| System.Drawing;Graphics+DrawImageAbort;false;BeginInvoke;(System.IntPtr,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback,System.AsyncCallback,System.Object);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;Invoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.Int32);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.Int32);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.IntPtr);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.IntPtr);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Image+GetThumbnailImageAbort;false;BeginInvoke;(System.AsyncCallback,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Image;false;GetThumbnailImage;(System.Int32,System.Int32,System.Drawing.Image+GetThumbnailImageAbort,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;ImageAnimator;false;Animate;(System.Drawing.Image,System.EventHandler);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Drawing;ImageAnimator;false;StopAnimate;(System.Drawing.Image,System.EventHandler);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Drawing;Rectangle;false;Inflate;(System.Drawing.Rectangle,System.Int32,System.Int32);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | @@ -9323,6 +10646,12 @@ summary | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[1].Element;Argument[2].Parameter[1];value;manual | | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2].ReturnValue;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2];Argument[2].Parameter[delegate-self];value;manual | +| System.Media;SoundPlayer;false;add_LoadCompleted;(System.ComponentModel.AsyncCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;add_SoundLocationChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;add_StreamChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_LoadCompleted;(System.ComponentModel.AsyncCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_SoundLocationChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_StreamChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.DateTime);;Argument[0];Argument[this];taint;df-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan);;Argument[1];Argument[this];taint;df-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[1];Argument[this];taint;df-generated | @@ -9802,6 +11131,7 @@ summary | System.Net.NetworkInformation;NetworkChange;false;add_NetworkAvailabilityChanged;(System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.NetworkInformation;NetworkChange;false;remove_NetworkAddressChanged;(System.Net.NetworkInformation.NetworkAddressChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.NetworkInformation;NetworkChange;false;remove_NetworkAvailabilityChanged;(System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | | System.Net.NetworkInformation;PhysicalAddress;false;GetAddressBytes;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.NetworkInformation;PhysicalAddress;false;PhysicalAddress;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.Net.NetworkInformation;Ping;false;add_PingCompleted;(System.Net.NetworkInformation.PingCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -12477,9 +13807,33 @@ summary | System.Security.Cryptography;TripleDESCryptoServiceProvider;false;get_LegalKeySizes;();;Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_IV;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.Security.Cryptography;TripleDESCryptoServiceProvider;false;set_Key;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Security.Permissions;FileDialogPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;FileIOPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Security.Permissions;PrincipalPermission;false;Copy;();;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[0];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Union;(System.Security.IPermission);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;ReflectionPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;SecurityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;UIPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;ApplicationTrustCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Security.Policy;ApplicationTrustCollection;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | +| System.Security.Policy;ApplicationTrustCollection;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Security.Policy;Evidence;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | System.Security.Policy;Evidence;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Security.Policy;Evidence;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | +| System.Security.Policy;HashMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;PolicyStatement;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;PublisherMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;ZoneMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | | System.Security.Principal;GenericIdentity;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | | System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.Security.Principal.GenericIdentity);;Argument[0];Argument[this];taint;df-generated | | System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String);;Argument[0];Argument[this];taint;df-generated | @@ -12500,9 +13854,11 @@ summary | System.Security.Principal;WindowsIdentity;false;RunImpersonated;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security.Principal;WindowsIdentity;false;RunImpersonatedAsync;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security.Principal;WindowsIdentity;false;RunImpersonatedAsync;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Security;HostProtectionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.Security;PermissionSet;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Security;PermissionSet;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Security;PermissionSet;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Security;SecurityContext;false;Run;(System.Security.SecurityContext,System.Threading.ContextCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | | System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | | System.Security;SecurityElement;false;AddChild;(System.Security.SecurityElement);;Argument[0];Argument[this];taint;df-generated | @@ -17332,6 +18688,8 @@ neutral | Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.String);summary;df-generated | | Microsoft.CSharp.RuntimeBinder;RuntimeBinderInternalCompilerException;RuntimeBinderInternalCompilerException;(System.String,System.Exception);summary;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;GetConverter;(System.Type);summary;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;get_FileExtension;();summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetString;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String);summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;GetStringAsync;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Threading.CancellationToken);summary;df-generated | | Microsoft.Extensions.Caching.Distributed;DistributedCacheExtensions;Set;(Microsoft.Extensions.Caching.Distributed.IDistributedCache,System.String,System.Byte[]);summary;df-generated | @@ -18968,6 +20326,9 @@ neutral | Microsoft.VisualBasic;Strings;Trim;(System.String);summary;df-generated | | Microsoft.VisualBasic;Strings;UCase;(System.Char);summary;df-generated | | Microsoft.VisualBasic;Strings;UCase;(System.String);summary;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;GetConverter;(System.Type);summary;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;get_FileExtension;();summary;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;get_LanguageOptions;();summary;df-generated | | Microsoft.VisualBasic;VBFixedArrayAttribute;VBFixedArrayAttribute;(System.Int32);summary;df-generated | | Microsoft.VisualBasic;VBFixedArrayAttribute;VBFixedArrayAttribute;(System.Int32,System.Int32);summary;df-generated | | Microsoft.VisualBasic;VBFixedArrayAttribute;get_Bounds;();summary;df-generated | @@ -19009,6 +20370,8 @@ neutral | Microsoft.Win32.SafeHandles;SafeWaitHandle;ReleaseHandle;();summary;df-generated | | Microsoft.Win32.SafeHandles;SafeX509ChainHandle;Dispose;(System.Boolean);summary;df-generated | | Microsoft.Win32.SafeHandles;SafeX509ChainHandle;ReleaseHandle;();summary;df-generated | +| Microsoft.Win32;PowerModeChangedEventArgs;PowerModeChangedEventArgs;(Microsoft.Win32.PowerModes);summary;df-generated | +| Microsoft.Win32;PowerModeChangedEventArgs;get_Mode;();summary;df-generated | | Microsoft.Win32;Registry;GetValue;(System.String,System.String,System.Object);summary;df-generated | | Microsoft.Win32;Registry;SetValue;(System.String,System.String,System.Object);summary;df-generated | | Microsoft.Win32;Registry;SetValue;(System.String,System.String,System.Object,Microsoft.Win32.RegistryValueKind);summary;df-generated | @@ -19055,6 +20418,23 @@ neutral | Microsoft.Win32;RegistryKey;get_SubKeyCount;();summary;df-generated | | Microsoft.Win32;RegistryKey;get_ValueCount;();summary;df-generated | | Microsoft.Win32;RegistryKey;get_View;();summary;df-generated | +| Microsoft.Win32;SessionEndedEventArgs;SessionEndedEventArgs;(Microsoft.Win32.SessionEndReasons);summary;df-generated | +| Microsoft.Win32;SessionEndedEventArgs;get_Reason;();summary;df-generated | +| Microsoft.Win32;SessionEndingEventArgs;SessionEndingEventArgs;(Microsoft.Win32.SessionEndReasons);summary;df-generated | +| Microsoft.Win32;SessionEndingEventArgs;get_Cancel;();summary;df-generated | +| Microsoft.Win32;SessionEndingEventArgs;get_Reason;();summary;df-generated | +| Microsoft.Win32;SessionEndingEventArgs;set_Cancel;(System.Boolean);summary;df-generated | +| Microsoft.Win32;SessionSwitchEventArgs;SessionSwitchEventArgs;(Microsoft.Win32.SessionSwitchReason);summary;df-generated | +| Microsoft.Win32;SessionSwitchEventArgs;get_Reason;();summary;df-generated | +| Microsoft.Win32;SystemEvents;CreateTimer;(System.Int32);summary;df-generated | +| Microsoft.Win32;SystemEvents;InvokeOnEventsThread;(System.Delegate);summary;df-generated | +| Microsoft.Win32;SystemEvents;KillTimer;(System.IntPtr);summary;df-generated | +| Microsoft.Win32;TimerElapsedEventArgs;TimerElapsedEventArgs;(System.IntPtr);summary;df-generated | +| Microsoft.Win32;TimerElapsedEventArgs;get_TimerId;();summary;df-generated | +| Microsoft.Win32;UserPreferenceChangedEventArgs;UserPreferenceChangedEventArgs;(Microsoft.Win32.UserPreferenceCategory);summary;df-generated | +| Microsoft.Win32;UserPreferenceChangedEventArgs;get_Category;();summary;df-generated | +| Microsoft.Win32;UserPreferenceChangingEventArgs;UserPreferenceChangingEventArgs;(Microsoft.Win32.UserPreferenceCategory);summary;df-generated | +| Microsoft.Win32;UserPreferenceChangingEventArgs;get_Category;();summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadDoubleBigEndian;(System.ReadOnlySpan);summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadDoubleLittleEndian;(System.ReadOnlySpan);summary;df-generated | | System.Buffers.Binary;BinaryPrimitives;ReadHalfBigEndian;(System.ReadOnlySpan);summary;df-generated | @@ -19282,6 +20662,237 @@ neutral | System.Buffers;StandardFormat;get_Symbol;();summary;df-generated | | System.Buffers;StandardFormat;op_Equality;(System.Buffers.StandardFormat,System.Buffers.StandardFormat);summary;df-generated | | System.Buffers;StandardFormat;op_Inequality;(System.Buffers.StandardFormat,System.Buffers.StandardFormat);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CmdArgsFromParameters;(System.CodeDom.Compiler.CompilerParameters);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromDomBatch;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromFile;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromFileBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromSource;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromSourceBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromDomBatch;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromFile;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromFileBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromSource;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;FromSourceBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;GetResponseFileCmdArgs;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;ProcessCompilerOutputLine;(System.CodeDom.Compiler.CompilerResults,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;get_CompilerName;();summary;df-generated | +| System.CodeDom.Compiler;CodeCompiler;get_FileExtension;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CompileAssemblyFromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit[]);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CompileAssemblyFromFile;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CompileAssemblyFromSource;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CreateCompiler;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CreateGenerator;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CreateParser;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CreateProvider;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;CreateProvider;(System.String,System.Collections.Generic.IDictionary);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;GetAllCompilerInfo;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;GetCompilerInfo;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;GetConverter;(System.Type);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;GetLanguageFromExtension;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;IsDefinedExtension;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;IsDefinedLanguage;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;IsValidIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;Parse;(System.IO.TextReader);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;Supports;(System.CodeDom.Compiler.GeneratorSupport);summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;get_FileExtension;();summary;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;get_LanguageOptions;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;ContinueOnNewLine;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;CreateEscapedIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;CreateValidIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateArgumentReferenceExpression;(System.CodeDom.CodeArgumentReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateArrayCreateExpression;(System.CodeDom.CodeArrayCreateExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateArrayIndexerExpression;(System.CodeDom.CodeArrayIndexerExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateAssignStatement;(System.CodeDom.CodeAssignStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateAttachEventStatement;(System.CodeDom.CodeAttachEventStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateAttributeDeclarationsEnd;(System.CodeDom.CodeAttributeDeclarationCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateAttributeDeclarationsStart;(System.CodeDom.CodeAttributeDeclarationCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateBaseReferenceExpression;(System.CodeDom.CodeBaseReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateBinaryOperatorExpression;(System.CodeDom.CodeBinaryOperatorExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCastExpression;(System.CodeDom.CodeCastExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateComment;(System.CodeDom.CodeComment);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCommentStatement;(System.CodeDom.CodeCommentStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCommentStatements;(System.CodeDom.CodeCommentStatementCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCompileUnit;(System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCompileUnitEnd;(System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateCompileUnitStart;(System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateConditionStatement;(System.CodeDom.CodeConditionStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateConstructor;(System.CodeDom.CodeConstructor,System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDecimalValue;(System.Decimal);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDefaultValueExpression;(System.CodeDom.CodeDefaultValueExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDelegateCreateExpression;(System.CodeDom.CodeDelegateCreateExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDelegateInvokeExpression;(System.CodeDom.CodeDelegateInvokeExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDirectionExpression;(System.CodeDom.CodeDirectionExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDirectives;(System.CodeDom.CodeDirectiveCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateDoubleValue;(System.Double);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateEntryPointMethod;(System.CodeDom.CodeEntryPointMethod,System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateEvent;(System.CodeDom.CodeMemberEvent,System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateEventReferenceExpression;(System.CodeDom.CodeEventReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateExpression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateExpressionStatement;(System.CodeDom.CodeExpressionStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateField;(System.CodeDom.CodeMemberField);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateFieldReferenceExpression;(System.CodeDom.CodeFieldReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateGotoStatement;(System.CodeDom.CodeGotoStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateIndexerExpression;(System.CodeDom.CodeIndexerExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateIterationStatement;(System.CodeDom.CodeIterationStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateLabeledStatement;(System.CodeDom.CodeLabeledStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateLinePragmaEnd;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateLinePragmaStart;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateMethod;(System.CodeDom.CodeMemberMethod,System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateMethodInvokeExpression;(System.CodeDom.CodeMethodInvokeExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateMethodReferenceExpression;(System.CodeDom.CodeMethodReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateMethodReturnStatement;(System.CodeDom.CodeMethodReturnStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateNamespaceEnd;(System.CodeDom.CodeNamespace);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateNamespaceImport;(System.CodeDom.CodeNamespaceImport);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateNamespaceImports;(System.CodeDom.CodeNamespace);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateNamespaceStart;(System.CodeDom.CodeNamespace);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateNamespaces;(System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateObjectCreateExpression;(System.CodeDom.CodeObjectCreateExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateParameterDeclarationExpression;(System.CodeDom.CodeParameterDeclarationExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GeneratePrimitiveExpression;(System.CodeDom.CodePrimitiveExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateProperty;(System.CodeDom.CodeMemberProperty,System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GeneratePropertyReferenceExpression;(System.CodeDom.CodePropertyReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GeneratePropertySetValueReferenceExpression;(System.CodeDom.CodePropertySetValueReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateRemoveEventStatement;(System.CodeDom.CodeRemoveEventStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateSingleFloatValue;(System.Single);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateSnippetCompileUnit;(System.CodeDom.CodeSnippetCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateSnippetExpression;(System.CodeDom.CodeSnippetExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateSnippetMember;(System.CodeDom.CodeSnippetTypeMember);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateSnippetStatement;(System.CodeDom.CodeSnippetStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateStatement;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateStatements;(System.CodeDom.CodeStatementCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateThisReferenceExpression;(System.CodeDom.CodeThisReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateThrowExceptionStatement;(System.CodeDom.CodeThrowExceptionStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTryCatchFinallyStatement;(System.CodeDom.CodeTryCatchFinallyStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTypeConstructor;(System.CodeDom.CodeTypeConstructor);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTypeEnd;(System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTypeOfExpression;(System.CodeDom.CodeTypeOfExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTypeReferenceExpression;(System.CodeDom.CodeTypeReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateTypeStart;(System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateVariableDeclarationStatement;(System.CodeDom.CodeVariableDeclarationStatement);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GenerateVariableReferenceExpression;(System.CodeDom.CodeVariableReferenceExpression);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;GetTypeOutput;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;IsValidIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;IsValidLanguageIndependentIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputAttributeArgument;(System.CodeDom.CodeAttributeArgument);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputAttributeDeclarations;(System.CodeDom.CodeAttributeDeclarationCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputDirection;(System.CodeDom.FieldDirection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputExpressionList;(System.CodeDom.CodeExpressionCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputExpressionList;(System.CodeDom.CodeExpressionCollection,System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputFieldScopeModifier;(System.CodeDom.MemberAttributes);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputMemberAccessModifier;(System.CodeDom.MemberAttributes);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputMemberScopeModifier;(System.CodeDom.MemberAttributes);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputOperator;(System.CodeDom.CodeBinaryOperatorType);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputParameters;(System.CodeDom.CodeParameterDeclarationExpressionCollection);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputType;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputTypeAttributes;(System.Reflection.TypeAttributes,System.Boolean,System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;OutputTypeNamePair;(System.CodeDom.CodeTypeReference,System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;QuoteSnippetString;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;Supports;(System.CodeDom.Compiler.GeneratorSupport);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;ValidateIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;ValidateIdentifiers;(System.CodeDom.CodeObject);summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_Indent;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_IsCurrentClass;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_IsCurrentDelegate;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_IsCurrentEnum;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_IsCurrentInterface;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_IsCurrentStruct;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;get_NullToken;();summary;df-generated | +| System.CodeDom.Compiler;CodeGenerator;set_Indent;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;get_BlankLinesBetweenMembers;();summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;get_ElseOnClosing;();summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;get_VerbatimOrder;();summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_BlankLinesBetweenMembers;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_BracingStyle;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_ElseOnClosing;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_IndentString;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_Item;(System.String,System.Object);summary;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;set_VerbatimOrder;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CodeParser;Parse;(System.IO.TextReader);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;CompilerError;(System.String,System.Int32,System.Int32,System.String,System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;ToString;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_Column;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_ErrorNumber;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_ErrorText;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_FileName;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_IsWarning;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;get_Line;();summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_Column;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_ErrorNumber;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_ErrorText;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_FileName;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_IsWarning;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerError;set_Line;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;Contains;(System.CodeDom.Compiler.CompilerError);summary;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;IndexOf;(System.CodeDom.Compiler.CompilerError);summary;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;get_HasErrors;();summary;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;get_HasWarnings;();summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;CreateDefaultCompilerParameters;();summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;CreateProvider;();summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;CreateProvider;(System.Collections.Generic.IDictionary);summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;Equals;(System.Object);summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;GetHashCode;();summary;df-generated | +| System.CodeDom.Compiler;CompilerInfo;get_IsCodeDomProviderTypeValid;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[]);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String,System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_CompilerOptions;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_CoreAssemblyFileName;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_EmbeddedResources;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_GenerateExecutable;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_GenerateInMemory;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_IncludeDebugInformation;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_LinkedResources;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_MainClass;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_OutputAssembly;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_ReferencedAssemblies;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_TempFiles;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_TreatWarningsAsErrors;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_UserToken;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_WarningLevel;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;get_Win32Resource;();summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_CompilerOptions;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_CoreAssemblyFileName;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_GenerateExecutable;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_GenerateInMemory;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_IncludeDebugInformation;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_MainClass;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_OutputAssembly;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_TreatWarningsAsErrors;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_UserToken;(System.IntPtr);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_WarningLevel;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;CompilerParameters;set_Win32Resource;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;CompilerResults;(System.CodeDom.Compiler.TempFileCollection);summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;get_Errors;();summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;get_NativeCompilerReturnValue;();summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;get_Output;();summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;get_PathToAssembly;();summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;get_TempFiles;();summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;set_NativeCompilerReturnValue;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;set_PathToAssembly;(System.String);summary;df-generated | +| System.CodeDom.Compiler;CompilerResults;set_TempFiles;(System.CodeDom.Compiler.TempFileCollection);summary;df-generated | +| System.CodeDom.Compiler;Executor;ExecWait;(System.String,System.CodeDom.Compiler.TempFileCollection);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromDomBatch;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit[]);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromFile;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromFileBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromSource;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromSourceBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;CreateEscapedIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;CreateValidIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;GetTypeOutput;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;IsValidIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;Supports;(System.CodeDom.Compiler.GeneratorSupport);summary;df-generated | +| System.CodeDom.Compiler;ICodeGenerator;ValidateIdentifier;(System.String);summary;df-generated | +| System.CodeDom.Compiler;ICodeParser;Parse;(System.IO.TextReader);summary;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;Close;();summary;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;DisposeAsync;();summary;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;Flush;();summary;df-generated | @@ -19330,6 +20941,257 @@ neutral | System.CodeDom.Compiler;IndentedTextWriter;WriteLineNoTabs;(System.String);summary;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;get_Indent;();summary;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;set_Indent;(System.Int32);summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;AddFile;(System.String,System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;CopyTo;(System.String[],System.Int32);summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;Delete;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;Dispose;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;Dispose;(System.Boolean);summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;GetEnumerator;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;TempFileCollection;(System.String);summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;get_Count;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;get_IsSynchronized;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;get_KeepFiles;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;get_SyncRoot;();summary;df-generated | +| System.CodeDom.Compiler;TempFileCollection;set_KeepFiles;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeArrayCreateExpression;get_CreateType;();summary;df-generated | +| System.CodeDom;CodeArrayCreateExpression;get_Size;();summary;df-generated | +| System.CodeDom;CodeArrayCreateExpression;get_SizeExpression;();summary;df-generated | +| System.CodeDom;CodeArrayCreateExpression;set_Size;(System.Int32);summary;df-generated | +| System.CodeDom;CodeArrayCreateExpression;set_SizeExpression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeArrayIndexerExpression;CodeArrayIndexerExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression[]);summary;df-generated | +| System.CodeDom;CodeArrayIndexerExpression;get_Indices;();summary;df-generated | +| System.CodeDom;CodeArrayIndexerExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeArrayIndexerExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAssignStatement;CodeAssignStatement;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAssignStatement;get_Left;();summary;df-generated | +| System.CodeDom;CodeAssignStatement;get_Right;();summary;df-generated | +| System.CodeDom;CodeAssignStatement;set_Left;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAssignStatement;set_Right;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAttachEventStatement;CodeAttachEventStatement;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAttachEventStatement;get_Event;();summary;df-generated | +| System.CodeDom;CodeAttachEventStatement;get_Listener;();summary;df-generated | +| System.CodeDom;CodeAttachEventStatement;set_Listener;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAttributeArgument;CodeAttributeArgument;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAttributeArgument;get_Value;();summary;df-generated | +| System.CodeDom;CodeAttributeArgument;set_Value;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;Contains;(System.CodeDom.CodeAttributeArgument);summary;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;IndexOf;(System.CodeDom.CodeAttributeArgument);summary;df-generated | +| System.CodeDom;CodeAttributeDeclaration;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;Contains;(System.CodeDom.CodeAttributeDeclaration);summary;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;IndexOf;(System.CodeDom.CodeAttributeDeclaration);summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;CodeBinaryOperatorExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeBinaryOperatorType,System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;get_Left;();summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;get_Operator;();summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;get_Right;();summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;set_Left;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;set_Operator;(System.CodeDom.CodeBinaryOperatorType);summary;df-generated | +| System.CodeDom;CodeBinaryOperatorExpression;set_Right;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeCastExpression;get_Expression;();summary;df-generated | +| System.CodeDom;CodeCastExpression;get_TargetType;();summary;df-generated | +| System.CodeDom;CodeCastExpression;set_Expression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeCatchClause;get_CatchExceptionType;();summary;df-generated | +| System.CodeDom;CodeCatchClause;get_Statements;();summary;df-generated | +| System.CodeDom;CodeCatchClauseCollection;Contains;(System.CodeDom.CodeCatchClause);summary;df-generated | +| System.CodeDom;CodeCatchClauseCollection;IndexOf;(System.CodeDom.CodeCatchClause);summary;df-generated | +| System.CodeDom;CodeChecksumPragma;get_ChecksumAlgorithmId;();summary;df-generated | +| System.CodeDom;CodeChecksumPragma;get_ChecksumData;();summary;df-generated | +| System.CodeDom;CodeChecksumPragma;set_ChecksumAlgorithmId;(System.Guid);summary;df-generated | +| System.CodeDom;CodeChecksumPragma;set_ChecksumData;(System.Byte[]);summary;df-generated | +| System.CodeDom;CodeComment;get_DocComment;();summary;df-generated | +| System.CodeDom;CodeComment;set_DocComment;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeCommentStatement;CodeCommentStatement;(System.CodeDom.CodeComment);summary;df-generated | +| System.CodeDom;CodeCommentStatement;CodeCommentStatement;(System.String);summary;df-generated | +| System.CodeDom;CodeCommentStatement;CodeCommentStatement;(System.String,System.Boolean);summary;df-generated | +| System.CodeDom;CodeCommentStatement;get_Comment;();summary;df-generated | +| System.CodeDom;CodeCommentStatement;set_Comment;(System.CodeDom.CodeComment);summary;df-generated | +| System.CodeDom;CodeCommentStatementCollection;Contains;(System.CodeDom.CodeCommentStatement);summary;df-generated | +| System.CodeDom;CodeCommentStatementCollection;IndexOf;(System.CodeDom.CodeCommentStatement);summary;df-generated | +| System.CodeDom;CodeCompileUnit;get_AssemblyCustomAttributes;();summary;df-generated | +| System.CodeDom;CodeCompileUnit;get_EndDirectives;();summary;df-generated | +| System.CodeDom;CodeCompileUnit;get_Namespaces;();summary;df-generated | +| System.CodeDom;CodeCompileUnit;get_ReferencedAssemblies;();summary;df-generated | +| System.CodeDom;CodeCompileUnit;get_StartDirectives;();summary;df-generated | +| System.CodeDom;CodeConditionStatement;CodeConditionStatement;(System.CodeDom.CodeExpression,System.CodeDom.CodeStatement[]);summary;df-generated | +| System.CodeDom;CodeConditionStatement;CodeConditionStatement;(System.CodeDom.CodeExpression,System.CodeDom.CodeStatement[],System.CodeDom.CodeStatement[]);summary;df-generated | +| System.CodeDom;CodeConditionStatement;get_Condition;();summary;df-generated | +| System.CodeDom;CodeConditionStatement;get_FalseStatements;();summary;df-generated | +| System.CodeDom;CodeConditionStatement;get_TrueStatements;();summary;df-generated | +| System.CodeDom;CodeConditionStatement;set_Condition;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeConstructor;get_BaseConstructorArgs;();summary;df-generated | +| System.CodeDom;CodeConstructor;get_ChainedConstructorArgs;();summary;df-generated | +| System.CodeDom;CodeDefaultValueExpression;get_Type;();summary;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;get_DelegateType;();summary;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeDelegateInvokeExpression;CodeDelegateInvokeExpression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeDelegateInvokeExpression;CodeDelegateInvokeExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression[]);summary;df-generated | +| System.CodeDom;CodeDelegateInvokeExpression;get_Parameters;();summary;df-generated | +| System.CodeDom;CodeDelegateInvokeExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeDelegateInvokeExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeDirectionExpression;CodeDirectionExpression;(System.CodeDom.FieldDirection,System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeDirectionExpression;get_Direction;();summary;df-generated | +| System.CodeDom;CodeDirectionExpression;get_Expression;();summary;df-generated | +| System.CodeDom;CodeDirectionExpression;set_Direction;(System.CodeDom.FieldDirection);summary;df-generated | +| System.CodeDom;CodeDirectionExpression;set_Expression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeDirectiveCollection;Contains;(System.CodeDom.CodeDirective);summary;df-generated | +| System.CodeDom;CodeDirectiveCollection;IndexOf;(System.CodeDom.CodeDirective);summary;df-generated | +| System.CodeDom;CodeEventReferenceExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeEventReferenceExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeExpressionCollection;Contains;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeExpressionCollection;IndexOf;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeExpressionStatement;CodeExpressionStatement;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeExpressionStatement;get_Expression;();summary;df-generated | +| System.CodeDom;CodeExpressionStatement;set_Expression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeIndexerExpression;CodeIndexerExpression;(System.CodeDom.CodeExpression,System.CodeDom.CodeExpression[]);summary;df-generated | +| System.CodeDom;CodeIndexerExpression;get_Indices;();summary;df-generated | +| System.CodeDom;CodeIndexerExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeIndexerExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeIterationStatement;CodeIterationStatement;(System.CodeDom.CodeStatement,System.CodeDom.CodeExpression,System.CodeDom.CodeStatement,System.CodeDom.CodeStatement[]);summary;df-generated | +| System.CodeDom;CodeIterationStatement;get_IncrementStatement;();summary;df-generated | +| System.CodeDom;CodeIterationStatement;get_InitStatement;();summary;df-generated | +| System.CodeDom;CodeIterationStatement;get_Statements;();summary;df-generated | +| System.CodeDom;CodeIterationStatement;get_TestExpression;();summary;df-generated | +| System.CodeDom;CodeIterationStatement;set_IncrementStatement;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom;CodeIterationStatement;set_InitStatement;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom;CodeIterationStatement;set_TestExpression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeLabeledStatement;get_Statement;();summary;df-generated | +| System.CodeDom;CodeLabeledStatement;set_Statement;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom;CodeLinePragma;get_LineNumber;();summary;df-generated | +| System.CodeDom;CodeLinePragma;set_LineNumber;(System.Int32);summary;df-generated | +| System.CodeDom;CodeMemberEvent;get_ImplementationTypes;();summary;df-generated | +| System.CodeDom;CodeMemberEvent;get_PrivateImplementationType;();summary;df-generated | +| System.CodeDom;CodeMemberEvent;get_Type;();summary;df-generated | +| System.CodeDom;CodeMemberEvent;set_PrivateImplementationType;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeMemberField;get_InitExpression;();summary;df-generated | +| System.CodeDom;CodeMemberField;get_Type;();summary;df-generated | +| System.CodeDom;CodeMemberField;set_InitExpression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeMemberMethod;get_PrivateImplementationType;();summary;df-generated | +| System.CodeDom;CodeMemberMethod;get_ReturnType;();summary;df-generated | +| System.CodeDom;CodeMemberMethod;get_ReturnTypeCustomAttributes;();summary;df-generated | +| System.CodeDom;CodeMemberMethod;get_TypeParameters;();summary;df-generated | +| System.CodeDom;CodeMemberMethod;set_PrivateImplementationType;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_GetStatements;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_HasGet;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_HasSet;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_ImplementationTypes;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_Parameters;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_PrivateImplementationType;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_SetStatements;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;get_Type;();summary;df-generated | +| System.CodeDom;CodeMemberProperty;set_HasGet;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeMemberProperty;set_HasSet;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeMemberProperty;set_PrivateImplementationType;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;get_Method;();summary;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;get_Parameters;();summary;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;get_TypeArguments;();summary;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeMethodReturnStatement;CodeMethodReturnStatement;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeMethodReturnStatement;get_Expression;();summary;df-generated | +| System.CodeDom;CodeMethodReturnStatement;set_Expression;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeNamespaceCollection;Contains;(System.CodeDom.CodeNamespace);summary;df-generated | +| System.CodeDom;CodeNamespaceCollection;IndexOf;(System.CodeDom.CodeNamespace);summary;df-generated | +| System.CodeDom;CodeNamespaceImport;get_LinePragma;();summary;df-generated | +| System.CodeDom;CodeNamespaceImport;set_LinePragma;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;Contains;(System.Object);summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;IndexOf;(System.Object);summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;Remove;(System.Object);summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;get_Count;();summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;get_IsFixedSize;();summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;get_IsReadOnly;();summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;get_IsSynchronized;();summary;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;get_SyncRoot;();summary;df-generated | +| System.CodeDom;CodeObject;get_UserData;();summary;df-generated | +| System.CodeDom;CodeObjectCreateExpression;get_CreateType;();summary;df-generated | +| System.CodeDom;CodeObjectCreateExpression;get_Parameters;();summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;get_CustomAttributes;();summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;get_Direction;();summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;get_Type;();summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;set_Direction;(System.CodeDom.FieldDirection);summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;Contains;(System.CodeDom.CodeParameterDeclarationExpression);summary;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;IndexOf;(System.CodeDom.CodeParameterDeclarationExpression);summary;df-generated | +| System.CodeDom;CodePrimitiveExpression;CodePrimitiveExpression;(System.Object);summary;df-generated | +| System.CodeDom;CodePrimitiveExpression;get_Value;();summary;df-generated | +| System.CodeDom;CodePrimitiveExpression;set_Value;(System.Object);summary;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;get_TargetObject;();summary;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;set_TargetObject;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeRegionDirective;get_RegionMode;();summary;df-generated | +| System.CodeDom;CodeRegionDirective;set_RegionMode;(System.CodeDom.CodeRegionMode);summary;df-generated | +| System.CodeDom;CodeRemoveEventStatement;get_Event;();summary;df-generated | +| System.CodeDom;CodeRemoveEventStatement;get_Listener;();summary;df-generated | +| System.CodeDom;CodeRemoveEventStatement;set_Listener;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;get_LinePragma;();summary;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;set_LinePragma;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom;CodeStatement;get_EndDirectives;();summary;df-generated | +| System.CodeDom;CodeStatement;get_LinePragma;();summary;df-generated | +| System.CodeDom;CodeStatement;get_StartDirectives;();summary;df-generated | +| System.CodeDom;CodeStatement;set_LinePragma;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom;CodeStatementCollection;Add;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeStatementCollection;Contains;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom;CodeStatementCollection;IndexOf;(System.CodeDom.CodeStatement);summary;df-generated | +| System.CodeDom;CodeThrowExceptionStatement;CodeThrowExceptionStatement;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeThrowExceptionStatement;get_ToThrow;();summary;df-generated | +| System.CodeDom;CodeThrowExceptionStatement;set_ToThrow;(System.CodeDom.CodeExpression);summary;df-generated | +| System.CodeDom;CodeTryCatchFinallyStatement;CodeTryCatchFinallyStatement;(System.CodeDom.CodeStatement[],System.CodeDom.CodeCatchClause[]);summary;df-generated | +| System.CodeDom;CodeTryCatchFinallyStatement;CodeTryCatchFinallyStatement;(System.CodeDom.CodeStatement[],System.CodeDom.CodeCatchClause[],System.CodeDom.CodeStatement[]);summary;df-generated | +| System.CodeDom;CodeTryCatchFinallyStatement;get_CatchClauses;();summary;df-generated | +| System.CodeDom;CodeTryCatchFinallyStatement;get_FinallyStatements;();summary;df-generated | +| System.CodeDom;CodeTryCatchFinallyStatement;get_TryStatements;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_IsClass;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_IsEnum;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_IsInterface;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_IsPartial;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_IsStruct;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_TypeAttributes;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;get_TypeParameters;();summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_IsClass;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_IsEnum;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_IsInterface;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_IsPartial;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_IsStruct;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeDeclaration;set_TypeAttributes;(System.Reflection.TypeAttributes);summary;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;Contains;(System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;IndexOf;(System.CodeDom.CodeTypeDeclaration);summary;df-generated | +| System.CodeDom;CodeTypeDelegate;get_Parameters;();summary;df-generated | +| System.CodeDom;CodeTypeDelegate;get_ReturnType;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_Attributes;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_Comments;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_CustomAttributes;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_EndDirectives;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_LinePragma;();summary;df-generated | +| System.CodeDom;CodeTypeMember;get_StartDirectives;();summary;df-generated | +| System.CodeDom;CodeTypeMember;set_Attributes;(System.CodeDom.MemberAttributes);summary;df-generated | +| System.CodeDom;CodeTypeMember;set_LinePragma;(System.CodeDom.CodeLinePragma);summary;df-generated | +| System.CodeDom;CodeTypeMemberCollection;Contains;(System.CodeDom.CodeTypeMember);summary;df-generated | +| System.CodeDom;CodeTypeMemberCollection;IndexOf;(System.CodeDom.CodeTypeMember);summary;df-generated | +| System.CodeDom;CodeTypeOfExpression;get_Type;();summary;df-generated | +| System.CodeDom;CodeTypeParameter;get_Constraints;();summary;df-generated | +| System.CodeDom;CodeTypeParameter;get_CustomAttributes;();summary;df-generated | +| System.CodeDom;CodeTypeParameter;get_HasConstructorConstraint;();summary;df-generated | +| System.CodeDom;CodeTypeParameter;set_HasConstructorConstraint;(System.Boolean);summary;df-generated | +| System.CodeDom;CodeTypeParameterCollection;Contains;(System.CodeDom.CodeTypeParameter);summary;df-generated | +| System.CodeDom;CodeTypeParameterCollection;IndexOf;(System.CodeDom.CodeTypeParameter);summary;df-generated | +| System.CodeDom;CodeTypeReference;CodeTypeReference;(System.CodeDom.CodeTypeParameter);summary;df-generated | +| System.CodeDom;CodeTypeReference;CodeTypeReference;(System.CodeDom.CodeTypeReference,System.Int32);summary;df-generated | +| System.CodeDom;CodeTypeReference;CodeTypeReference;(System.String,System.CodeDom.CodeTypeReference[]);summary;df-generated | +| System.CodeDom;CodeTypeReference;CodeTypeReference;(System.String,System.Int32);summary;df-generated | +| System.CodeDom;CodeTypeReference;CodeTypeReference;(System.Type,System.CodeDom.CodeTypeReferenceOptions);summary;df-generated | +| System.CodeDom;CodeTypeReference;get_ArrayElementType;();summary;df-generated | +| System.CodeDom;CodeTypeReference;get_ArrayRank;();summary;df-generated | +| System.CodeDom;CodeTypeReference;get_Options;();summary;df-generated | +| System.CodeDom;CodeTypeReference;get_TypeArguments;();summary;df-generated | +| System.CodeDom;CodeTypeReference;set_ArrayElementType;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeTypeReference;set_ArrayRank;(System.Int32);summary;df-generated | +| System.CodeDom;CodeTypeReference;set_Options;(System.CodeDom.CodeTypeReferenceOptions);summary;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;Contains;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;IndexOf;(System.CodeDom.CodeTypeReference);summary;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;get_Type;();summary;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;get_InitExpression;();summary;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;get_Type;();summary;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;set_InitExpression;(System.CodeDom.CodeExpression);summary;df-generated | | System.Collections.Concurrent;BlockingCollection;AddToAny;(System.Collections.Concurrent.BlockingCollection[],T);summary;df-generated | | System.Collections.Concurrent;BlockingCollection;AddToAny;(System.Collections.Concurrent.BlockingCollection[],T,System.Threading.CancellationToken);summary;df-generated | | System.Collections.Concurrent;BlockingCollection;BlockingCollection;(System.Int32);summary;df-generated | @@ -21873,6 +23735,723 @@ neutral | System.ComponentModel;Win32Exception;Win32Exception;(System.String);summary;df-generated | | System.ComponentModel;Win32Exception;Win32Exception;(System.String,System.Exception);summary;df-generated | | System.ComponentModel;Win32Exception;get_NativeErrorCode;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;CreateConfigurationContext;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;CreateDeprecatedConfigContext;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;DecryptSection;(System.String,System.Configuration.ProtectedConfigurationProvider,System.Configuration.ProtectedConfigurationSection);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;DeleteStream;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;EncryptSection;(System.String,System.Configuration.ProtectedConfigurationProvider,System.Configuration.ProtectedConfigurationSection);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;GetConfigPathFromLocationSubPath;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;GetConfigType;(System.String,System.Boolean);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;GetRestrictedPermissions;(System.Configuration.Internal.IInternalConfigRecord,System.Security.PermissionSet,System.Boolean);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;GetStreamName;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;GetStreamVersion;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;Impersonate;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;Init;(System.Configuration.Internal.IInternalConfigRoot,System.Object[]);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsAboveApplication;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsConfigRecordRequired;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsDefinitionAllowed;(System.String,System.Configuration.ConfigurationAllowDefinition,System.Configuration.ConfigurationAllowExeDefinition);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsFile;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsFullTrustSectionWithoutAptcaAllowed;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsInitDelayed;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsLocationApplicable;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsSecondaryRoot;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;IsTrustedConfigPath;(System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;PrefetchAll;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;PrefetchSection;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;RefreshConfigPaths;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;RequireCompleteInit;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;VerifyDefinitionAllowed;(System.String,System.Configuration.ConfigurationAllowDefinition,System.Configuration.ConfigurationAllowExeDefinition,System.Configuration.Internal.IConfigErrorInfo);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;WriteCompleted;(System.String,System.Boolean,System.Object);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;WriteCompleted;(System.String,System.Boolean,System.Object,System.Boolean);summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_HasLocalConfig;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_HasRoamingConfig;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_Host;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_IsAppConfigHttp;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_IsRemote;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_SupportsChangeNotifications;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_SupportsLocation;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_SupportsPath;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;get_SupportsRefresh;();summary;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;set_Host;(System.Configuration.Internal.IInternalConfigHost);summary;df-generated | +| System.Configuration.Internal;IConfigErrorInfo;get_Filename;();summary;df-generated | +| System.Configuration.Internal;IConfigErrorInfo;get_LineNumber;();summary;df-generated | +| System.Configuration.Internal;IConfigSystem;Init;(System.Type,System.Object[]);summary;df-generated | +| System.Configuration.Internal;IConfigSystem;get_Host;();summary;df-generated | +| System.Configuration.Internal;IConfigSystem;get_Root;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerHelper;EnsureNetConfigLoaded;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ApplicationConfigUri;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeLocalConfigDirectory;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeLocalConfigPath;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeProductName;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeProductVersion;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeRoamingConfigDirectory;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_ExeRoamingConfigPath;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_MachineConfigPath;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_SetConfigurationSystemInProgress;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_SupportsUserConfig;();summary;df-generated | +| System.Configuration.Internal;IConfigurationManagerInternal;get_UserConfigFilename;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;GetExeConfigPath;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;GetLocalUserConfigPath;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;GetRoamingUserConfigPath;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;IsExeConfig;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;IsLocalUserConfig;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigClientHost;IsRoamingUserConfig;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigConfigurationFactory;Create;(System.Type,System.Object[]);summary;df-generated | +| System.Configuration.Internal;IInternalConfigConfigurationFactory;NormalizeLocationSubPath;(System.String,System.Configuration.Internal.IConfigErrorInfo);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;CreateConfigurationContext;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;CreateDeprecatedConfigContext;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;DecryptSection;(System.String,System.Configuration.ProtectedConfigurationProvider,System.Configuration.ProtectedConfigurationSection);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;DeleteStream;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;EncryptSection;(System.String,System.Configuration.ProtectedConfigurationProvider,System.Configuration.ProtectedConfigurationSection);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetConfigPathFromLocationSubPath;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetConfigType;(System.String,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetConfigTypeName;(System.Type);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetRestrictedPermissions;(System.Configuration.Internal.IInternalConfigRecord,System.Security.PermissionSet,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetStreamName;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetStreamNameForConfigSource;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;GetStreamVersion;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;Impersonate;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;Init;(System.Configuration.Internal.IInternalConfigRoot,System.Object[]);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsAboveApplication;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsConfigRecordRequired;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsDefinitionAllowed;(System.String,System.Configuration.ConfigurationAllowDefinition,System.Configuration.ConfigurationAllowExeDefinition);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsFile;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsFullTrustSectionWithoutAptcaAllowed;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsInitDelayed;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsLocationApplicable;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsSecondaryRoot;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;IsTrustedConfigPath;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;PrefetchAll;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;PrefetchSection;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;RequireCompleteInit;(System.Configuration.Internal.IInternalConfigRecord);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;VerifyDefinitionAllowed;(System.String,System.Configuration.ConfigurationAllowDefinition,System.Configuration.ConfigurationAllowExeDefinition,System.Configuration.Internal.IConfigErrorInfo);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;WriteCompleted;(System.String,System.Boolean,System.Object);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;WriteCompleted;(System.String,System.Boolean,System.Object,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;get_IsRemote;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;get_SupportsChangeNotifications;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;get_SupportsLocation;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;get_SupportsPath;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigHost;get_SupportsRefresh;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;GetLkgSection;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;GetSection;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;RefreshSection;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;Remove;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;ThrowIfInitErrors;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;get_ConfigPath;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;get_HasInitErrors;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRecord;get_StreamName;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;GetConfigRecord;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;GetSection;(System.String,System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;GetUniqueConfigPath;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;GetUniqueConfigRecord;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;Init;(System.Configuration.Internal.IInternalConfigHost,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;RemoveConfig;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigRoot;get_IsDesignTime;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigSettingsFactory;CompleteInit;();summary;df-generated | +| System.Configuration.Internal;IInternalConfigSettingsFactory;SetConfigurationSystem;(System.Configuration.Internal.IInternalConfigSystem,System.Boolean);summary;df-generated | +| System.Configuration.Internal;IInternalConfigSystem;GetSection;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigSystem;RefreshConfig;(System.String);summary;df-generated | +| System.Configuration.Internal;IInternalConfigSystem;get_SupportsUserConfig;();summary;df-generated | +| System.Configuration.Internal;InternalConfigEventArgs;InternalConfigEventArgs;(System.String);summary;df-generated | +| System.Configuration.Internal;InternalConfigEventArgs;get_ConfigPath;();summary;df-generated | +| System.Configuration.Internal;InternalConfigEventArgs;set_ConfigPath;(System.String);summary;df-generated | +| System.Configuration.Provider;ProviderCollection;Add;(System.Configuration.Provider.ProviderBase);summary;df-generated | +| System.Configuration.Provider;ProviderCollection;Remove;(System.String);summary;df-generated | +| System.Configuration.Provider;ProviderCollection;SetReadOnly;();summary;df-generated | +| System.Configuration.Provider;ProviderCollection;get_Count;();summary;df-generated | +| System.Configuration.Provider;ProviderCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration.Provider;ProviderException;ProviderException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration.Provider;ProviderException;ProviderException;(System.String);summary;df-generated | +| System.Configuration.Provider;ProviderException;ProviderException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;AppSettingsSection;GetRuntimeObject;();summary;df-generated | +| System.Configuration;AppSettingsSection;get_Properties;();summary;df-generated | +| System.Configuration;AppSettingsSection;set_File;(System.String);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;ApplicationSettingsBase;(System.ComponentModel.IComponent);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;GetPreviousVersion;(System.String);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;OnPropertyChanged;(System.Object,System.ComponentModel.PropertyChangedEventArgs);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;OnSettingChanging;(System.Object,System.Configuration.SettingChangingEventArgs);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;OnSettingsLoaded;(System.Object,System.Configuration.SettingsLoadedEventArgs);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;OnSettingsSaving;(System.Object,System.ComponentModel.CancelEventArgs);summary;df-generated | +| System.Configuration;ApplicationSettingsBase;Reload;();summary;df-generated | +| System.Configuration;ApplicationSettingsBase;Reset;();summary;df-generated | +| System.Configuration;ApplicationSettingsBase;Save;();summary;df-generated | +| System.Configuration;ApplicationSettingsBase;Upgrade;();summary;df-generated | +| System.Configuration;ApplicationSettingsBase;set_Item;(System.String,System.Object);summary;df-generated | +| System.Configuration;CallbackValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;CallbackValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;ClientSettingsSection;get_Properties;();summary;df-generated | +| System.Configuration;CommaDelimitedStringCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;CommaDelimitedStringCollection;SetReadOnly;();summary;df-generated | +| System.Configuration;CommaDelimitedStringCollection;get_IsModified;();summary;df-generated | +| System.Configuration;CommaDelimitedStringCollection;get_IsReadOnly;();summary;df-generated | +| System.Configuration;ConfigXmlDocument;get_LineNumber;();summary;df-generated | +| System.Configuration;Configuration;GetSection;(System.String);summary;df-generated | +| System.Configuration;Configuration;Save;();summary;df-generated | +| System.Configuration;Configuration;Save;(System.Configuration.ConfigurationSaveMode);summary;df-generated | +| System.Configuration;Configuration;Save;(System.Configuration.ConfigurationSaveMode,System.Boolean);summary;df-generated | +| System.Configuration;Configuration;SaveAs;(System.String);summary;df-generated | +| System.Configuration;Configuration;SaveAs;(System.String,System.Configuration.ConfigurationSaveMode);summary;df-generated | +| System.Configuration;Configuration;SaveAs;(System.String,System.Configuration.ConfigurationSaveMode,System.Boolean);summary;df-generated | +| System.Configuration;Configuration;get_AppSettings;();summary;df-generated | +| System.Configuration;Configuration;get_ConnectionStrings;();summary;df-generated | +| System.Configuration;Configuration;get_EvaluationContext;();summary;df-generated | +| System.Configuration;Configuration;get_FilePath;();summary;df-generated | +| System.Configuration;Configuration;get_HasFile;();summary;df-generated | +| System.Configuration;Configuration;get_Locations;();summary;df-generated | +| System.Configuration;Configuration;get_NamespaceDeclared;();summary;df-generated | +| System.Configuration;Configuration;get_TargetFramework;();summary;df-generated | +| System.Configuration;Configuration;set_NamespaceDeclared;(System.Boolean);summary;df-generated | +| System.Configuration;Configuration;set_TargetFramework;(System.Runtime.Versioning.FrameworkName);summary;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;ConfigurationCollectionAttribute;(System.Type);summary;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;get_CollectionType;();summary;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;get_ItemType;();summary;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;set_CollectionType;(System.Configuration.ConfigurationElementCollectionType);summary;df-generated | +| System.Configuration;ConfigurationConverterBase;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Configuration;ConfigurationConverterBase;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Configuration;ConfigurationElement;Equals;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationElement;GetHashCode;();summary;df-generated | +| System.Configuration;ConfigurationElement;Init;();summary;df-generated | +| System.Configuration;ConfigurationElement;InitializeDefault;();summary;df-generated | +| System.Configuration;ConfigurationElement;IsModified;();summary;df-generated | +| System.Configuration;ConfigurationElement;IsReadOnly;();summary;df-generated | +| System.Configuration;ConfigurationElement;ListErrors;(System.Collections.IList);summary;df-generated | +| System.Configuration;ConfigurationElement;OnDeserializeUnrecognizedAttribute;(System.String,System.String);summary;df-generated | +| System.Configuration;ConfigurationElement;OnDeserializeUnrecognizedElement;(System.String,System.Xml.XmlReader);summary;df-generated | +| System.Configuration;ConfigurationElement;OnRequiredPropertyNotFound;(System.String);summary;df-generated | +| System.Configuration;ConfigurationElement;PostDeserialize;();summary;df-generated | +| System.Configuration;ConfigurationElement;PreSerialize;(System.Xml.XmlWriter);summary;df-generated | +| System.Configuration;ConfigurationElement;ResetModified;();summary;df-generated | +| System.Configuration;ConfigurationElement;SetPropertyValue;(System.Configuration.ConfigurationProperty,System.Object,System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationElement;SetReadOnly;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_CurrentConfiguration;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_ElementInformation;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_HasContext;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_Item;(System.Configuration.ConfigurationProperty);summary;df-generated | +| System.Configuration;ConfigurationElement;get_LockAllAttributesExcept;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_LockAllElementsExcept;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_LockAttributes;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_LockElements;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_LockItem;();summary;df-generated | +| System.Configuration;ConfigurationElement;get_Properties;();summary;df-generated | +| System.Configuration;ConfigurationElement;set_Item;(System.Configuration.ConfigurationProperty,System.Object);summary;df-generated | +| System.Configuration;ConfigurationElement;set_Item;(System.String,System.Object);summary;df-generated | +| System.Configuration;ConfigurationElement;set_LockItem;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseClear;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseGet;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseGet;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseGetAllKeys;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseGetKey;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseIndexOf;(System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseIsRemoved;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseRemove;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;BaseRemoveAt;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;CreateNewElement;(System.String);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;Equals;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;GetElementKey;(System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;GetHashCode;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;IsElementName;(System.String);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;IsElementRemovable;(System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;IsModified;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;IsReadOnly;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;OnDeserializeUnrecognizedElement;(System.String,System.Xml.XmlReader);summary;df-generated | +| System.Configuration;ConfigurationElementCollection;ResetModified;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;SetReadOnly;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_CollectionType;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_Count;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_ElementName;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_EmitClear;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_SyncRoot;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;get_ThrowOnDuplicate;();summary;df-generated | +| System.Configuration;ConfigurationElementCollection;set_EmitClear;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationElementProperty;ConfigurationElementProperty;(System.Configuration.ConfigurationValidatorBase);summary;df-generated | +| System.Configuration;ConfigurationElementProperty;get_Validator;();summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.Exception,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.Exception,System.Xml.XmlReader);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.String,System.Int32);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;ConfigurationErrorsException;(System.String,System.Xml.XmlReader);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;GetLineNumber;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;GetLineNumber;(System.Xml.XmlReader);summary;df-generated | +| System.Configuration;ConfigurationErrorsException;get_Line;();summary;df-generated | +| System.Configuration;ConfigurationException;ConfigurationException;(System.String);summary;df-generated | +| System.Configuration;ConfigurationException;ConfigurationException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;ConfigurationException;ConfigurationException;(System.String,System.Exception,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationException;ConfigurationException;(System.String,System.String,System.Int32);summary;df-generated | +| System.Configuration;ConfigurationException;ConfigurationException;(System.String,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationException;GetXmlNodeLineNumber;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ConfigurationException;get_Line;();summary;df-generated | +| System.Configuration;ConfigurationException;get_Message;();summary;df-generated | +| System.Configuration;ConfigurationFileMap;ConfigurationFileMap;(System.String);summary;df-generated | +| System.Configuration;ConfigurationFileMap;get_MachineConfigFilename;();summary;df-generated | +| System.Configuration;ConfigurationFileMap;set_MachineConfigFilename;(System.String);summary;df-generated | +| System.Configuration;ConfigurationLocation;get_Path;();summary;df-generated | +| System.Configuration;ConfigurationLocationCollection;get_Item;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationLockCollection;Contains;(System.String);summary;df-generated | +| System.Configuration;ConfigurationLockCollection;IsReadOnly;(System.String);summary;df-generated | +| System.Configuration;ConfigurationLockCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ConfigurationLockCollection;get_Count;();summary;df-generated | +| System.Configuration;ConfigurationLockCollection;get_HasParentElements;();summary;df-generated | +| System.Configuration;ConfigurationLockCollection;get_IsModified;();summary;df-generated | +| System.Configuration;ConfigurationLockCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration;ConfigurationManager;GetSection;(System.String);summary;df-generated | +| System.Configuration;ConfigurationManager;OpenExeConfiguration;(System.Configuration.ConfigurationUserLevel);summary;df-generated | +| System.Configuration;ConfigurationManager;OpenMachineConfiguration;();summary;df-generated | +| System.Configuration;ConfigurationManager;RefreshSection;(System.String);summary;df-generated | +| System.Configuration;ConfigurationManager;get_AppSettings;();summary;df-generated | +| System.Configuration;ConfigurationManager;get_ConnectionStrings;();summary;df-generated | +| System.Configuration;ConfigurationPermission;ConfigurationPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Configuration;ConfigurationPermission;Copy;();summary;df-generated | +| System.Configuration;ConfigurationPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Configuration;ConfigurationPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Configuration;ConfigurationPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Configuration;ConfigurationPermission;IsUnrestricted;();summary;df-generated | +| System.Configuration;ConfigurationPermission;ToXml;();summary;df-generated | +| System.Configuration;ConfigurationPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Configuration;ConfigurationPermissionAttribute;ConfigurationPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Configuration;ConfigurationPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Configuration;ConfigurationProperty;ConfigurationProperty;(System.String,System.Type);summary;df-generated | +| System.Configuration;ConfigurationProperty;ConfigurationProperty;(System.String,System.Type,System.Object);summary;df-generated | +| System.Configuration;ConfigurationProperty;ConfigurationProperty;(System.String,System.Type,System.Object,System.ComponentModel.TypeConverter,System.Configuration.ConfigurationValidatorBase,System.Configuration.ConfigurationPropertyOptions);summary;df-generated | +| System.Configuration;ConfigurationProperty;ConfigurationProperty;(System.String,System.Type,System.Object,System.Configuration.ConfigurationPropertyOptions);summary;df-generated | +| System.Configuration;ConfigurationProperty;get_DefaultValue;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_Description;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsAssemblyStringTransformationRequired;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsDefaultCollection;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsKey;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsRequired;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsTypeStringTransformationRequired;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_IsVersionCheckRequired;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_Name;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_Type;();summary;df-generated | +| System.Configuration;ConfigurationProperty;get_Validator;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;ConfigurationPropertyAttribute;(System.String);summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_DefaultValue;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_IsDefaultCollection;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_IsKey;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_IsRequired;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_Name;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;get_Options;();summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;set_DefaultValue;(System.Object);summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;set_IsDefaultCollection;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;set_IsKey;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;set_IsRequired;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationPropertyAttribute;set_Options;(System.Configuration.ConfigurationPropertyOptions);summary;df-generated | +| System.Configuration;ConfigurationPropertyCollection;Contains;(System.String);summary;df-generated | +| System.Configuration;ConfigurationPropertyCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ConfigurationPropertyCollection;get_Count;();summary;df-generated | +| System.Configuration;ConfigurationPropertyCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration;ConfigurationSection;IsModified;();summary;df-generated | +| System.Configuration;ConfigurationSection;ResetModified;();summary;df-generated | +| System.Configuration;ConfigurationSection;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);summary;df-generated | +| System.Configuration;ConfigurationSection;ShouldSerializeElementInTargetVersion;(System.Configuration.ConfigurationElement,System.String,System.Runtime.Versioning.FrameworkName);summary;df-generated | +| System.Configuration;ConfigurationSection;ShouldSerializePropertyInTargetVersion;(System.Configuration.ConfigurationProperty,System.String,System.Runtime.Versioning.FrameworkName,System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;ConfigurationSection;ShouldSerializeSectionInTargetVersion;(System.Runtime.Versioning.FrameworkName);summary;df-generated | +| System.Configuration;ConfigurationSection;get_SectionInformation;();summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;CopyTo;(System.Configuration.ConfigurationSection[],System.Int32);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;Get;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;Get;(System.String);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;get_Item;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationSectionCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;ForceDeclaration;();summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;ForceDeclaration;(System.Boolean);summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;ShouldSerializeSectionGroupInTargetVersion;(System.Runtime.Versioning.FrameworkName);summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;get_IsDeclarationRequired;();summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;get_IsDeclared;();summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;get_Name;();summary;df-generated | +| System.Configuration;ConfigurationSectionGroup;get_SectionGroupName;();summary;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Configuration;ConfigurationSettings;GetConfig;(System.String);summary;df-generated | +| System.Configuration;ConfigurationSettings;get_AppSettings;();summary;df-generated | +| System.Configuration;ConfigurationValidatorAttribute;ConfigurationValidatorAttribute;(System.Type);summary;df-generated | +| System.Configuration;ConfigurationValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;ConfigurationValidatorAttribute;get_ValidatorType;();summary;df-generated | +| System.Configuration;ConfigurationValidatorBase;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;ConfigurationValidatorBase;Validate;(System.Object);summary;df-generated | +| System.Configuration;ConnectionStringSettings;ConnectionStringSettings;(System.String,System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettings;ConnectionStringSettings;(System.String,System.String,System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettings;get_Properties;();summary;df-generated | +| System.Configuration;ConnectionStringSettings;set_ConnectionString;(System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettings;set_Name;(System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettings;set_ProviderName;(System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;IndexOf;(System.Configuration.ConnectionStringSettings);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;Remove;(System.Configuration.ConnectionStringSettings);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;RemoveAt;(System.Int32);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;get_Item;(System.Int32);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;get_Properties;();summary;df-generated | +| System.Configuration;ConnectionStringsSection;get_Properties;();summary;df-generated | +| System.Configuration;ContextInformation;GetSection;(System.String);summary;df-generated | +| System.Configuration;ContextInformation;get_IsMachineLevel;();summary;df-generated | +| System.Configuration;DefaultSection;DeserializeSection;(System.Xml.XmlReader);summary;df-generated | +| System.Configuration;DefaultSection;IsModified;();summary;df-generated | +| System.Configuration;DefaultSection;Reset;(System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;DefaultSection;ResetModified;();summary;df-generated | +| System.Configuration;DefaultSection;get_Properties;();summary;df-generated | +| System.Configuration;DefaultValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;DefaultValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;DictionarySectionHandler;get_KeyAttributeName;();summary;df-generated | +| System.Configuration;DictionarySectionHandler;get_ValueAttributeName;();summary;df-generated | +| System.Configuration;DpapiProtectedConfigurationProvider;Decrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;DpapiProtectedConfigurationProvider;Encrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;DpapiProtectedConfigurationProvider;get_UseMachineProtection;();summary;df-generated | +| System.Configuration;ElementInformation;get_Errors;();summary;df-generated | +| System.Configuration;ElementInformation;get_IsCollection;();summary;df-generated | +| System.Configuration;ElementInformation;get_IsLocked;();summary;df-generated | +| System.Configuration;ElementInformation;get_IsPresent;();summary;df-generated | +| System.Configuration;ElementInformation;get_LineNumber;();summary;df-generated | +| System.Configuration;ElementInformation;get_Properties;();summary;df-generated | +| System.Configuration;ElementInformation;get_Source;();summary;df-generated | +| System.Configuration;ElementInformation;get_Type;();summary;df-generated | +| System.Configuration;ElementInformation;get_Validator;();summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;Clone;();summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;ExeConfigurationFileMap;(System.String);summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;get_ExeConfigFilename;();summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;get_LocalUserConfigFilename;();summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;get_RoamingUserConfigFilename;();summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;set_ExeConfigFilename;(System.String);summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;set_LocalUserConfigFilename;(System.String);summary;df-generated | +| System.Configuration;ExeConfigurationFileMap;set_RoamingUserConfigFilename;(System.String);summary;df-generated | +| System.Configuration;ExeContext;get_ExePath;();summary;df-generated | +| System.Configuration;ExeContext;get_UserLevel;();summary;df-generated | +| System.Configuration;GenericEnumConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;IApplicationSettingsProvider;GetPreviousVersion;(System.Configuration.SettingsContext,System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;IApplicationSettingsProvider;Reset;(System.Configuration.SettingsContext);summary;df-generated | +| System.Configuration;IApplicationSettingsProvider;Upgrade;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection);summary;df-generated | +| System.Configuration;IConfigurationSectionHandler;Create;(System.Object,System.Object,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;IConfigurationSystem;GetConfig;(System.String);summary;df-generated | +| System.Configuration;IConfigurationSystem;Init;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;LoadComponentSettings;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;ResetComponentSettings;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;SaveComponentSettings;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;get_SaveSettings;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;get_SettingsKey;();summary;df-generated | +| System.Configuration;IPersistComponentSettings;set_SaveSettings;(System.Boolean);summary;df-generated | +| System.Configuration;IPersistComponentSettings;set_SettingsKey;(System.String);summary;df-generated | +| System.Configuration;ISettingsProviderService;GetSettingsProvider;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;IdnElement;get_Enabled;();summary;df-generated | +| System.Configuration;IdnElement;set_Enabled;(System.UriIdnScope);summary;df-generated | +| System.Configuration;IgnoreSection;DeserializeSection;(System.Xml.XmlReader);summary;df-generated | +| System.Configuration;IgnoreSection;IsModified;();summary;df-generated | +| System.Configuration;IgnoreSection;Reset;(System.Configuration.ConfigurationElement);summary;df-generated | +| System.Configuration;IgnoreSection;ResetModified;();summary;df-generated | +| System.Configuration;IgnoreSection;get_Properties;();summary;df-generated | +| System.Configuration;IgnoreSectionHandler;Create;(System.Object,System.Object,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;InfiniteIntConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;InfiniteIntConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Configuration;IntegerValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;IntegerValidator;IntegerValidator;(System.Int32,System.Int32);summary;df-generated | +| System.Configuration;IntegerValidator;IntegerValidator;(System.Int32,System.Int32,System.Boolean);summary;df-generated | +| System.Configuration;IntegerValidator;IntegerValidator;(System.Int32,System.Int32,System.Boolean,System.Int32);summary;df-generated | +| System.Configuration;IntegerValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;get_ExcludeRange;();summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;get_MaxValue;();summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;get_MinValue;();summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;set_ExcludeRange;(System.Boolean);summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;set_MaxValue;(System.Int32);summary;df-generated | +| System.Configuration;IntegerValidatorAttribute;set_MinValue;(System.Int32);summary;df-generated | +| System.Configuration;IriParsingElement;get_Enabled;();summary;df-generated | +| System.Configuration;IriParsingElement;set_Enabled;(System.Boolean);summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;Add;(System.String,System.String);summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;get_AllKeys;();summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;get_Properties;();summary;df-generated | +| System.Configuration;KeyValueConfigurationCollection;get_ThrowOnDuplicate;();summary;df-generated | +| System.Configuration;KeyValueConfigurationElement;Init;();summary;df-generated | +| System.Configuration;KeyValueConfigurationElement;get_Properties;();summary;df-generated | +| System.Configuration;KeyValueConfigurationElement;set_Value;(System.String);summary;df-generated | +| System.Configuration;LocalFileSettingsProvider;GetPreviousVersion;(System.Configuration.SettingsContext,System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;LocalFileSettingsProvider;GetPropertyValues;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection);summary;df-generated | +| System.Configuration;LocalFileSettingsProvider;Reset;(System.Configuration.SettingsContext);summary;df-generated | +| System.Configuration;LocalFileSettingsProvider;SetPropertyValues;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyValueCollection);summary;df-generated | +| System.Configuration;LocalFileSettingsProvider;Upgrade;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection);summary;df-generated | +| System.Configuration;LongValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;LongValidator;LongValidator;(System.Int64,System.Int64);summary;df-generated | +| System.Configuration;LongValidator;LongValidator;(System.Int64,System.Int64,System.Boolean);summary;df-generated | +| System.Configuration;LongValidator;LongValidator;(System.Int64,System.Int64,System.Boolean,System.Int64);summary;df-generated | +| System.Configuration;LongValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;LongValidatorAttribute;get_ExcludeRange;();summary;df-generated | +| System.Configuration;LongValidatorAttribute;get_MaxValue;();summary;df-generated | +| System.Configuration;LongValidatorAttribute;get_MinValue;();summary;df-generated | +| System.Configuration;LongValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;LongValidatorAttribute;set_ExcludeRange;(System.Boolean);summary;df-generated | +| System.Configuration;LongValidatorAttribute;set_MaxValue;(System.Int64);summary;df-generated | +| System.Configuration;LongValidatorAttribute;set_MinValue;(System.Int64);summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;Remove;(System.Configuration.NameValueConfigurationElement);summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;get_AllKeys;();summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;NameValueConfigurationCollection;get_Properties;();summary;df-generated | +| System.Configuration;NameValueConfigurationElement;NameValueConfigurationElement;(System.String,System.String);summary;df-generated | +| System.Configuration;NameValueConfigurationElement;get_Properties;();summary;df-generated | +| System.Configuration;NameValueConfigurationElement;set_Value;(System.String);summary;df-generated | +| System.Configuration;NameValueSectionHandler;get_KeyAttributeName;();summary;df-generated | +| System.Configuration;NameValueSectionHandler;get_ValueAttributeName;();summary;df-generated | +| System.Configuration;PositiveTimeSpanValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;PositiveTimeSpanValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;PositiveTimeSpanValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Converter;();summary;df-generated | +| System.Configuration;PropertyInformation;get_DefaultValue;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Description;();summary;df-generated | +| System.Configuration;PropertyInformation;get_IsKey;();summary;df-generated | +| System.Configuration;PropertyInformation;get_IsLocked;();summary;df-generated | +| System.Configuration;PropertyInformation;get_IsModified;();summary;df-generated | +| System.Configuration;PropertyInformation;get_IsRequired;();summary;df-generated | +| System.Configuration;PropertyInformation;get_LineNumber;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Name;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Source;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Type;();summary;df-generated | +| System.Configuration;PropertyInformation;get_Validator;();summary;df-generated | +| System.Configuration;PropertyInformation;get_ValueOrigin;();summary;df-generated | +| System.Configuration;PropertyInformation;set_Value;(System.Object);summary;df-generated | +| System.Configuration;ProtectedConfiguration;get_DefaultProvider;();summary;df-generated | +| System.Configuration;ProtectedConfiguration;get_Providers;();summary;df-generated | +| System.Configuration;ProtectedConfigurationProvider;Decrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ProtectedConfigurationProvider;Encrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;ProtectedConfigurationProviderCollection;Add;(System.Configuration.Provider.ProviderBase);summary;df-generated | +| System.Configuration;ProtectedConfigurationSection;get_Properties;();summary;df-generated | +| System.Configuration;ProtectedConfigurationSection;set_DefaultProvider;(System.String);summary;df-generated | +| System.Configuration;ProviderSettings;IsModified;();summary;df-generated | +| System.Configuration;ProviderSettings;OnDeserializeUnrecognizedAttribute;(System.String,System.String);summary;df-generated | +| System.Configuration;ProviderSettings;ProviderSettings;(System.String,System.String);summary;df-generated | +| System.Configuration;ProviderSettings;set_Name;(System.String);summary;df-generated | +| System.Configuration;ProviderSettings;set_Type;(System.String);summary;df-generated | +| System.Configuration;ProviderSettingsCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;ProviderSettingsCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;ProviderSettingsCollection;get_Item;(System.Int32);summary;df-generated | +| System.Configuration;ProviderSettingsCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;ProviderSettingsCollection;get_Properties;();summary;df-generated | +| System.Configuration;RegexStringValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;RegexStringValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;RegexStringValidatorAttribute;RegexStringValidatorAttribute;(System.String);summary;df-generated | +| System.Configuration;RegexStringValidatorAttribute;get_Regex;();summary;df-generated | +| System.Configuration;RegexStringValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;AddKey;(System.Int32,System.Boolean);summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;Decrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;DeleteKey;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;Encrypt;(System.Xml.XmlNode);summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;ExportKey;(System.String,System.Boolean);summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;ImportKey;(System.String,System.Boolean);summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_CspProviderName;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_KeyContainerName;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_RsaPublicKey;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_UseFIPS;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_UseMachineContainer;();summary;df-generated | +| System.Configuration;RsaProtectedConfigurationProvider;get_UseOAEP;();summary;df-generated | +| System.Configuration;SchemeSettingElement;get_GenericUriParserOptions;();summary;df-generated | +| System.Configuration;SchemeSettingElement;get_Properties;();summary;df-generated | +| System.Configuration;SchemeSettingElementCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;SchemeSettingElementCollection;IndexOf;(System.Configuration.SchemeSettingElement);summary;df-generated | +| System.Configuration;SchemeSettingElementCollection;get_CollectionType;();summary;df-generated | +| System.Configuration;SchemeSettingElementCollection;get_Item;(System.Int32);summary;df-generated | +| System.Configuration;SchemeSettingElementCollection;get_Item;(System.String);summary;df-generated | +| System.Configuration;SectionInformation;ForceDeclaration;();summary;df-generated | +| System.Configuration;SectionInformation;ForceDeclaration;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;GetParentSection;();summary;df-generated | +| System.Configuration;SectionInformation;GetRawXml;();summary;df-generated | +| System.Configuration;SectionInformation;ProtectSection;(System.String);summary;df-generated | +| System.Configuration;SectionInformation;RevertToParent;();summary;df-generated | +| System.Configuration;SectionInformation;SetRawXml;(System.String);summary;df-generated | +| System.Configuration;SectionInformation;UnprotectSection;();summary;df-generated | +| System.Configuration;SectionInformation;get_AllowDefinition;();summary;df-generated | +| System.Configuration;SectionInformation;get_AllowExeDefinition;();summary;df-generated | +| System.Configuration;SectionInformation;get_AllowLocation;();summary;df-generated | +| System.Configuration;SectionInformation;get_AllowOverride;();summary;df-generated | +| System.Configuration;SectionInformation;get_ForceSave;();summary;df-generated | +| System.Configuration;SectionInformation;get_InheritInChildApplications;();summary;df-generated | +| System.Configuration;SectionInformation;get_IsDeclarationRequired;();summary;df-generated | +| System.Configuration;SectionInformation;get_IsDeclared;();summary;df-generated | +| System.Configuration;SectionInformation;get_IsLocked;();summary;df-generated | +| System.Configuration;SectionInformation;get_IsProtected;();summary;df-generated | +| System.Configuration;SectionInformation;get_Name;();summary;df-generated | +| System.Configuration;SectionInformation;get_OverrideMode;();summary;df-generated | +| System.Configuration;SectionInformation;get_OverrideModeDefault;();summary;df-generated | +| System.Configuration;SectionInformation;get_OverrideModeEffective;();summary;df-generated | +| System.Configuration;SectionInformation;get_RequirePermission;();summary;df-generated | +| System.Configuration;SectionInformation;get_RestartOnExternalChanges;();summary;df-generated | +| System.Configuration;SectionInformation;get_SectionName;();summary;df-generated | +| System.Configuration;SectionInformation;set_AllowDefinition;(System.Configuration.ConfigurationAllowDefinition);summary;df-generated | +| System.Configuration;SectionInformation;set_AllowExeDefinition;(System.Configuration.ConfigurationAllowExeDefinition);summary;df-generated | +| System.Configuration;SectionInformation;set_AllowLocation;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;set_AllowOverride;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;set_ForceSave;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;set_InheritInChildApplications;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;set_OverrideMode;(System.Configuration.OverrideMode);summary;df-generated | +| System.Configuration;SectionInformation;set_OverrideModeDefault;(System.Configuration.OverrideMode);summary;df-generated | +| System.Configuration;SectionInformation;set_RequirePermission;(System.Boolean);summary;df-generated | +| System.Configuration;SectionInformation;set_RestartOnExternalChanges;(System.Boolean);summary;df-generated | +| System.Configuration;SettingElement;Equals;(System.Object);summary;df-generated | +| System.Configuration;SettingElement;GetHashCode;();summary;df-generated | +| System.Configuration;SettingElement;SettingElement;(System.String,System.Configuration.SettingsSerializeAs);summary;df-generated | +| System.Configuration;SettingElement;get_Properties;();summary;df-generated | +| System.Configuration;SettingElement;get_SerializeAs;();summary;df-generated | +| System.Configuration;SettingElement;set_Name;(System.String);summary;df-generated | +| System.Configuration;SettingElement;set_SerializeAs;(System.Configuration.SettingsSerializeAs);summary;df-generated | +| System.Configuration;SettingElement;set_Value;(System.Configuration.SettingValueElement);summary;df-generated | +| System.Configuration;SettingElementCollection;CreateNewElement;();summary;df-generated | +| System.Configuration;SettingElementCollection;Get;(System.String);summary;df-generated | +| System.Configuration;SettingElementCollection;Remove;(System.Configuration.SettingElement);summary;df-generated | +| System.Configuration;SettingElementCollection;get_CollectionType;();summary;df-generated | +| System.Configuration;SettingElementCollection;get_ElementName;();summary;df-generated | +| System.Configuration;SettingValueElement;DeserializeElement;(System.Xml.XmlReader,System.Boolean);summary;df-generated | +| System.Configuration;SettingValueElement;Equals;(System.Object);summary;df-generated | +| System.Configuration;SettingValueElement;GetHashCode;();summary;df-generated | +| System.Configuration;SettingValueElement;IsModified;();summary;df-generated | +| System.Configuration;SettingValueElement;ResetModified;();summary;df-generated | +| System.Configuration;SettingValueElement;get_Properties;();summary;df-generated | +| System.Configuration;SettingsAttributeDictionary;SettingsAttributeDictionary;(System.Configuration.SettingsAttributeDictionary);summary;df-generated | +| System.Configuration;SettingsAttributeDictionary;SettingsAttributeDictionary;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration;SettingsBase;Save;();summary;df-generated | +| System.Configuration;SettingsBase;get_IsSynchronized;();summary;df-generated | +| System.Configuration;SettingsBase;set_Item;(System.String,System.Object);summary;df-generated | +| System.Configuration;SettingsContext;SettingsContext;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration;SettingsManageabilityAttribute;SettingsManageabilityAttribute;(System.Configuration.SettingsManageability);summary;df-generated | +| System.Configuration;SettingsManageabilityAttribute;get_Manageability;();summary;df-generated | +| System.Configuration;SettingsProperty;SettingsProperty;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsProperty;SettingsProperty;(System.String);summary;df-generated | +| System.Configuration;SettingsProperty;SettingsProperty;(System.String,System.Type,System.Configuration.SettingsProvider,System.Boolean,System.Object,System.Configuration.SettingsSerializeAs,System.Configuration.SettingsAttributeDictionary,System.Boolean,System.Boolean);summary;df-generated | +| System.Configuration;SettingsProperty;get_Attributes;();summary;df-generated | +| System.Configuration;SettingsProperty;get_DefaultValue;();summary;df-generated | +| System.Configuration;SettingsProperty;get_IsReadOnly;();summary;df-generated | +| System.Configuration;SettingsProperty;get_Name;();summary;df-generated | +| System.Configuration;SettingsProperty;get_PropertyType;();summary;df-generated | +| System.Configuration;SettingsProperty;get_Provider;();summary;df-generated | +| System.Configuration;SettingsProperty;get_SerializeAs;();summary;df-generated | +| System.Configuration;SettingsProperty;get_ThrowOnErrorDeserializing;();summary;df-generated | +| System.Configuration;SettingsProperty;get_ThrowOnErrorSerializing;();summary;df-generated | +| System.Configuration;SettingsProperty;set_DefaultValue;(System.Object);summary;df-generated | +| System.Configuration;SettingsProperty;set_IsReadOnly;(System.Boolean);summary;df-generated | +| System.Configuration;SettingsProperty;set_Name;(System.String);summary;df-generated | +| System.Configuration;SettingsProperty;set_PropertyType;(System.Type);summary;df-generated | +| System.Configuration;SettingsProperty;set_Provider;(System.Configuration.SettingsProvider);summary;df-generated | +| System.Configuration;SettingsProperty;set_SerializeAs;(System.Configuration.SettingsSerializeAs);summary;df-generated | +| System.Configuration;SettingsProperty;set_ThrowOnErrorDeserializing;(System.Boolean);summary;df-generated | +| System.Configuration;SettingsProperty;set_ThrowOnErrorSerializing;(System.Boolean);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;Add;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnAdd;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnAddComplete;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnClear;();summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnClearComplete;();summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnRemove;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;OnRemoveComplete;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;SettingsPropertyCollection;SetReadOnly;();summary;df-generated | +| System.Configuration;SettingsPropertyCollection;get_Count;();summary;df-generated | +| System.Configuration;SettingsPropertyCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration;SettingsPropertyIsReadOnlyException;SettingsPropertyIsReadOnlyException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration;SettingsPropertyIsReadOnlyException;SettingsPropertyIsReadOnlyException;(System.String);summary;df-generated | +| System.Configuration;SettingsPropertyIsReadOnlyException;SettingsPropertyIsReadOnlyException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;SettingsPropertyNotFoundException;SettingsPropertyNotFoundException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration;SettingsPropertyNotFoundException;SettingsPropertyNotFoundException;(System.String);summary;df-generated | +| System.Configuration;SettingsPropertyNotFoundException;SettingsPropertyNotFoundException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;SettingsPropertyValue;SettingsPropertyValue;(System.Configuration.SettingsProperty);summary;df-generated | +| System.Configuration;SettingsPropertyValue;get_Deserialized;();summary;df-generated | +| System.Configuration;SettingsPropertyValue;get_IsDirty;();summary;df-generated | +| System.Configuration;SettingsPropertyValue;get_Name;();summary;df-generated | +| System.Configuration;SettingsPropertyValue;get_Property;();summary;df-generated | +| System.Configuration;SettingsPropertyValue;get_UsingDefaultValue;();summary;df-generated | +| System.Configuration;SettingsPropertyValue;set_Deserialized;(System.Boolean);summary;df-generated | +| System.Configuration;SettingsPropertyValue;set_IsDirty;(System.Boolean);summary;df-generated | +| System.Configuration;SettingsPropertyValueCollection;Remove;(System.String);summary;df-generated | +| System.Configuration;SettingsPropertyValueCollection;SetReadOnly;();summary;df-generated | +| System.Configuration;SettingsPropertyValueCollection;get_Count;();summary;df-generated | +| System.Configuration;SettingsPropertyValueCollection;get_IsSynchronized;();summary;df-generated | +| System.Configuration;SettingsPropertyWrongTypeException;SettingsPropertyWrongTypeException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Configuration;SettingsPropertyWrongTypeException;SettingsPropertyWrongTypeException;(System.String);summary;df-generated | +| System.Configuration;SettingsPropertyWrongTypeException;SettingsPropertyWrongTypeException;(System.String,System.Exception);summary;df-generated | +| System.Configuration;SettingsProvider;GetPropertyValues;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection);summary;df-generated | +| System.Configuration;SettingsProvider;SetPropertyValues;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyValueCollection);summary;df-generated | +| System.Configuration;SettingsProvider;get_ApplicationName;();summary;df-generated | +| System.Configuration;SettingsProvider;set_ApplicationName;(System.String);summary;df-generated | +| System.Configuration;SettingsProviderCollection;Add;(System.Configuration.Provider.ProviderBase);summary;df-generated | +| System.Configuration;SettingsSerializeAsAttribute;SettingsSerializeAsAttribute;(System.Configuration.SettingsSerializeAs);summary;df-generated | +| System.Configuration;SettingsSerializeAsAttribute;get_SerializeAs;();summary;df-generated | +| System.Configuration;SingleTagSectionHandler;Create;(System.Object,System.Object,System.Xml.XmlNode);summary;df-generated | +| System.Configuration;SpecialSettingAttribute;SpecialSettingAttribute;(System.Configuration.SpecialSetting);summary;df-generated | +| System.Configuration;SpecialSettingAttribute;get_SpecialSetting;();summary;df-generated | +| System.Configuration;StringValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;StringValidator;StringValidator;(System.Int32);summary;df-generated | +| System.Configuration;StringValidator;StringValidator;(System.Int32,System.Int32);summary;df-generated | +| System.Configuration;StringValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;StringValidatorAttribute;get_InvalidCharacters;();summary;df-generated | +| System.Configuration;StringValidatorAttribute;get_MaxLength;();summary;df-generated | +| System.Configuration;StringValidatorAttribute;get_MinLength;();summary;df-generated | +| System.Configuration;StringValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;StringValidatorAttribute;set_InvalidCharacters;(System.String);summary;df-generated | +| System.Configuration;StringValidatorAttribute;set_MaxLength;(System.Int32);summary;df-generated | +| System.Configuration;StringValidatorAttribute;set_MinLength;(System.Int32);summary;df-generated | +| System.Configuration;SubclassTypeValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;SubclassTypeValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;SubclassTypeValidatorAttribute;SubclassTypeValidatorAttribute;(System.Type);summary;df-generated | +| System.Configuration;SubclassTypeValidatorAttribute;get_BaseClass;();summary;df-generated | +| System.Configuration;SubclassTypeValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;TimeSpanMinutesConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;TimeSpanMinutesConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Configuration;TimeSpanMinutesOrInfiniteConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;TimeSpanMinutesOrInfiniteConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Configuration;TimeSpanSecondsConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;TimeSpanSecondsConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Configuration;TimeSpanSecondsOrInfiniteConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;TimeSpanSecondsOrInfiniteConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Configuration;TimeSpanValidator;CanValidate;(System.Type);summary;df-generated | +| System.Configuration;TimeSpanValidator;TimeSpanValidator;(System.TimeSpan,System.TimeSpan);summary;df-generated | +| System.Configuration;TimeSpanValidator;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean);summary;df-generated | +| System.Configuration;TimeSpanValidator;Validate;(System.Object);summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_ExcludeRange;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_MaxValue;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_MaxValueString;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_MinValue;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_MinValueString;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;get_ValidatorInstance;();summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;set_ExcludeRange;(System.Boolean);summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;set_MaxValueString;(System.String);summary;df-generated | +| System.Configuration;TimeSpanValidatorAttribute;set_MinValueString;(System.String);summary;df-generated | +| System.Configuration;TypeNameConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Configuration;UriSection;get_Properties;();summary;df-generated | +| System.Data.Common;DBDataPermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.Common;DBDataPermission;Clear;();summary;df-generated | +| System.Data.Common;DBDataPermission;Copy;();summary;df-generated | +| System.Data.Common;DBDataPermission;CreateInstance;();summary;df-generated | +| System.Data.Common;DBDataPermission;DBDataPermission;(System.Data.Common.DBDataPermission);summary;df-generated | +| System.Data.Common;DBDataPermission;DBDataPermission;(System.Data.Common.DBDataPermissionAttribute);summary;df-generated | +| System.Data.Common;DBDataPermission;DBDataPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Data.Common;DBDataPermission;DBDataPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | +| System.Data.Common;DBDataPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Data.Common;DBDataPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Data.Common;DBDataPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Data.Common;DBDataPermission;IsUnrestricted;();summary;df-generated | +| System.Data.Common;DBDataPermission;ToXml;();summary;df-generated | +| System.Data.Common;DBDataPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Data.Common;DBDataPermission;get_AllowBlankPassword;();summary;df-generated | +| System.Data.Common;DBDataPermission;set_AllowBlankPassword;(System.Boolean);summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;DBDataPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;ShouldSerializeConnectionString;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;ShouldSerializeKeyRestrictions;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;get_AllowBlankPassword;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;get_ConnectionString;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;get_KeyRestrictionBehavior;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;get_KeyRestrictions;();summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;set_AllowBlankPassword;(System.Boolean);summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;set_ConnectionString;(System.String);summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;set_KeyRestrictionBehavior;(System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.Common;DBDataPermissionAttribute;set_KeyRestrictions;(System.String);summary;df-generated | | System.Data.Common;DataAdapter;CloneInternals;();summary;df-generated | | System.Data.Common;DataAdapter;CreateTableMappings;();summary;df-generated | | System.Data.Common;DataAdapter;DataAdapter;(System.Data.Common.DataAdapter);summary;df-generated | @@ -22358,6 +24937,50 @@ neutral | System.Data.Common;RowUpdatingEventArgs;get_StatementType;();summary;df-generated | | System.Data.Common;RowUpdatingEventArgs;get_Status;();summary;df-generated | | System.Data.Common;RowUpdatingEventArgs;set_Status;(System.Data.UpdateStatus);summary;df-generated | +| System.Data.Odbc;OdbcPermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.Odbc;OdbcPermission;Copy;();summary;df-generated | +| System.Data.Odbc;OdbcPermission;OdbcPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Data.Odbc;OdbcPermission;OdbcPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | +| System.Data.Odbc;OdbcPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Data.Odbc;OdbcPermissionAttribute;OdbcPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Data.OleDb;OleDbPermission;Copy;();summary;df-generated | +| System.Data.OleDb;OleDbPermission;OleDbPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Data.OleDb;OleDbPermission;OleDbPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | +| System.Data.OleDb;OleDbPermission;get_Provider;();summary;df-generated | +| System.Data.OleDb;OleDbPermission;set_Provider;(System.String);summary;df-generated | +| System.Data.OleDb;OleDbPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Data.OleDb;OleDbPermissionAttribute;OleDbPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Data.OleDb;OleDbPermissionAttribute;get_Provider;();summary;df-generated | +| System.Data.OleDb;OleDbPermissionAttribute;set_Provider;(System.String);summary;df-generated | +| System.Data.OracleClient;OraclePermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.OracleClient;OraclePermission;Copy;();summary;df-generated | +| System.Data.OracleClient;OraclePermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Data.OracleClient;OraclePermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Data.OracleClient;OraclePermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Data.OracleClient;OraclePermission;IsUnrestricted;();summary;df-generated | +| System.Data.OracleClient;OraclePermission;OraclePermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Data.OracleClient;OraclePermission;ToXml;();summary;df-generated | +| System.Data.OracleClient;OraclePermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Data.OracleClient;OraclePermission;get_AllowBlankPassword;();summary;df-generated | +| System.Data.OracleClient;OraclePermission;set_AllowBlankPassword;(System.Boolean);summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;CreatePermission;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;OraclePermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;ShouldSerializeConnectionString;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;ShouldSerializeKeyRestrictions;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;get_AllowBlankPassword;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;get_ConnectionString;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;get_KeyRestrictionBehavior;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;get_KeyRestrictions;();summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;set_AllowBlankPassword;(System.Boolean);summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;set_ConnectionString;(System.String);summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;set_KeyRestrictionBehavior;(System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.OracleClient;OraclePermissionAttribute;set_KeyRestrictions;(System.String);summary;df-generated | +| System.Data.SqlClient;SqlClientPermission;Add;(System.String,System.String,System.Data.KeyRestrictionBehavior);summary;df-generated | +| System.Data.SqlClient;SqlClientPermission;Copy;();summary;df-generated | +| System.Data.SqlClient;SqlClientPermission;SqlClientPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Data.SqlClient;SqlClientPermission;SqlClientPermission;(System.Security.Permissions.PermissionState,System.Boolean);summary;df-generated | +| System.Data.SqlClient;SqlClientPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Data.SqlClient;SqlClientPermissionAttribute;SqlClientPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Data.SqlTypes;INullable;get_IsNull;();summary;df-generated | | System.Data.SqlTypes;SqlAlreadyFilledException;SqlAlreadyFilledException;(System.String);summary;df-generated | | System.Data.SqlTypes;SqlAlreadyFilledException;SqlAlreadyFilledException;(System.String,System.Exception);summary;df-generated | @@ -24621,6 +27244,33 @@ neutral | System.Diagnostics;EventLogEntryCollection;get_IsSynchronized;();summary;df-generated | | System.Diagnostics;EventLogEntryCollection;get_Item;(System.Int32);summary;df-generated | | System.Diagnostics;EventLogEntryCollection;get_SyncRoot;();summary;df-generated | +| System.Diagnostics;EventLogPermission;EventLogPermission;(System.Diagnostics.EventLogPermissionAccess,System.String);summary;df-generated | +| System.Diagnostics;EventLogPermission;EventLogPermission;(System.Diagnostics.EventLogPermissionEntry[]);summary;df-generated | +| System.Diagnostics;EventLogPermission;EventLogPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Diagnostics;EventLogPermission;get_PermissionEntries;();summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;EventLogPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;get_MachineName;();summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;get_PermissionAccess;();summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;set_MachineName;(System.String);summary;df-generated | +| System.Diagnostics;EventLogPermissionAttribute;set_PermissionAccess;(System.Diagnostics.EventLogPermissionAccess);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntry;EventLogPermissionEntry;(System.Diagnostics.EventLogPermissionAccess,System.String);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntry;get_MachineName;();summary;df-generated | +| System.Diagnostics;EventLogPermissionEntry;get_PermissionAccess;();summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;Add;(System.Diagnostics.EventLogPermissionEntry);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;AddRange;(System.Diagnostics.EventLogPermissionEntryCollection);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;AddRange;(System.Diagnostics.EventLogPermissionEntry[]);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;Contains;(System.Diagnostics.EventLogPermissionEntry);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;CopyTo;(System.Diagnostics.EventLogPermissionEntry[],System.Int32);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;IndexOf;(System.Diagnostics.EventLogPermissionEntry);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;Insert;(System.Int32,System.Diagnostics.EventLogPermissionEntry);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;OnClear;();summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;OnInsert;(System.Int32,System.Object);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;OnRemove;(System.Int32,System.Object);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;OnSet;(System.Int32,System.Object,System.Object);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;Remove;(System.Diagnostics.EventLogPermissionEntry);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;get_Item;(System.Int32);summary;df-generated | +| System.Diagnostics;EventLogPermissionEntryCollection;set_Item;(System.Int32,System.Diagnostics.EventLogPermissionEntry);summary;df-generated | | System.Diagnostics;EventLogTraceListener;Close;();summary;df-generated | | System.Diagnostics;EventLogTraceListener;Dispose;(System.Boolean);summary;df-generated | | System.Diagnostics;EventLogTraceListener;EventLogTraceListener;(System.Diagnostics.EventLog);summary;df-generated | @@ -24675,6 +27325,36 @@ neutral | System.Diagnostics;InitializingTraceSourceEventArgs;set_WasInitialized;(System.Boolean);summary;df-generated | | System.Diagnostics;MonitoringDescriptionAttribute;MonitoringDescriptionAttribute;(System.String);summary;df-generated | | System.Diagnostics;MonitoringDescriptionAttribute;get_Description;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermission;PerformanceCounterPermission;(System.Diagnostics.PerformanceCounterPermissionAccess,System.String,System.String);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermission;PerformanceCounterPermission;(System.Diagnostics.PerformanceCounterPermissionEntry[]);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermission;PerformanceCounterPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermission;get_PermissionEntries;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;PerformanceCounterPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;get_CategoryName;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;get_MachineName;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;get_PermissionAccess;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;set_CategoryName;(System.String);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;set_MachineName;(System.String);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionAttribute;set_PermissionAccess;(System.Diagnostics.PerformanceCounterPermissionAccess);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntry;PerformanceCounterPermissionEntry;(System.Diagnostics.PerformanceCounterPermissionAccess,System.String,System.String);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntry;get_CategoryName;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntry;get_MachineName;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntry;get_PermissionAccess;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;Add;(System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;AddRange;(System.Diagnostics.PerformanceCounterPermissionEntryCollection);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;AddRange;(System.Diagnostics.PerformanceCounterPermissionEntry[]);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;Contains;(System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;CopyTo;(System.Diagnostics.PerformanceCounterPermissionEntry[],System.Int32);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;IndexOf;(System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;Insert;(System.Int32,System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;OnClear;();summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;OnInsert;(System.Int32,System.Object);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;OnRemove;(System.Int32,System.Object);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;OnSet;(System.Int32,System.Object,System.Object);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;Remove;(System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;get_Item;(System.Int32);summary;df-generated | +| System.Diagnostics;PerformanceCounterPermissionEntryCollection;set_Item;(System.Int32,System.Diagnostics.PerformanceCounterPermissionEntry);summary;df-generated | | System.Diagnostics;Process;BeginErrorReadLine;();summary;df-generated | | System.Diagnostics;Process;BeginOutputReadLine;();summary;df-generated | | System.Diagnostics;Process;CancelErrorRead;();summary;df-generated | @@ -25015,6 +27695,989 @@ neutral | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.IO.TextWriter,System.String);summary;df-generated | | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.String);summary;df-generated | | System.Diagnostics;XmlWriterTraceListener;XmlWriterTraceListener;(System.String,System.String);summary;df-generated | +| System.Drawing.Configuration;SystemDrawingSection;get_Properties;();summary;df-generated | +| System.Drawing.Configuration;SystemDrawingSection;set_BitmapSuffix;(System.String);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;CategoryNameCollection;(System.Drawing.Design.CategoryNameCollection);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;CategoryNameCollection;(System.String[]);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;Contains;(System.String);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;CopyTo;(System.String[],System.Int32);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;IndexOf;(System.String);summary;df-generated | +| System.Drawing.Design;CategoryNameCollection;get_Item;(System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;AdjustableArrowCap;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;AdjustableArrowCap;(System.Single,System.Single,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;get_Filled;();summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;get_Height;();summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;get_MiddleInset;();summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;get_Width;();summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;set_Filled;(System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;set_Height;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;set_MiddleInset;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;AdjustableArrowCap;set_Width;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Blend;Blend;(System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;Blend;get_Factors;();summary;df-generated | +| System.Drawing.Drawing2D;Blend;get_Positions;();summary;df-generated | +| System.Drawing.Drawing2D;Blend;set_Factors;(System.Single[]);summary;df-generated | +| System.Drawing.Drawing2D;Blend;set_Positions;(System.Single[]);summary;df-generated | +| System.Drawing.Drawing2D;ColorBlend;ColorBlend;(System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;ColorBlend;get_Colors;();summary;df-generated | +| System.Drawing.Drawing2D;ColorBlend;get_Positions;();summary;df-generated | +| System.Drawing.Drawing2D;ColorBlend;set_Colors;(System.Drawing.Color[]);summary;df-generated | +| System.Drawing.Drawing2D;ColorBlend;set_Positions;(System.Single[]);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;CustomLineCap;(System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;CustomLineCap;(System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;CustomLineCap;(System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.LineCap,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;GetStrokeCaps;(System.Drawing.Drawing2D.LineCap,System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;SetStrokeCaps;(System.Drawing.Drawing2D.LineCap,System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;get_BaseCap;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;get_BaseInset;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;get_StrokeJoin;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;get_WidthScale;();summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;set_BaseCap;(System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;set_BaseInset;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;set_StrokeJoin;(System.Drawing.Drawing2D.LineJoin);summary;df-generated | +| System.Drawing.Drawing2D;CustomLineCap;set_WidthScale;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddArc;(System.Drawing.Rectangle,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddArc;(System.Drawing.RectangleF,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddArc;(System.Int32,System.Int32,System.Int32,System.Int32,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddArc;(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBezier;(System.Drawing.Point,System.Drawing.Point,System.Drawing.Point,System.Drawing.Point);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBezier;(System.Drawing.PointF,System.Drawing.PointF,System.Drawing.PointF,System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBezier;(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBezier;(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBeziers;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddBeziers;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddClosedCurve;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddClosedCurve;(System.Drawing.PointF[],System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddClosedCurve;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddClosedCurve;(System.Drawing.Point[],System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.PointF[],System.Int32,System.Int32,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.PointF[],System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.Point[],System.Int32,System.Int32,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddCurve;(System.Drawing.Point[],System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddEllipse;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddEllipse;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddEllipse;(System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddEllipse;(System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLine;(System.Drawing.Point,System.Drawing.Point);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLine;(System.Drawing.PointF,System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLine;(System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLine;(System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLines;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddLines;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPath;(System.Drawing.Drawing2D.GraphicsPath,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPie;(System.Drawing.Rectangle,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPie;(System.Int32,System.Int32,System.Int32,System.Int32,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPie;(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPolygon;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddPolygon;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddRectangle;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddRectangle;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddRectangles;(System.Drawing.RectangleF[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddRectangles;(System.Drawing.Rectangle[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddString;(System.String,System.Drawing.FontFamily,System.Int32,System.Single,System.Drawing.Point,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddString;(System.String,System.Drawing.FontFamily,System.Int32,System.Single,System.Drawing.PointF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddString;(System.String,System.Drawing.FontFamily,System.Int32,System.Single,System.Drawing.Rectangle,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;AddString;(System.String,System.Drawing.FontFamily,System.Int32,System.Single,System.Drawing.RectangleF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;ClearMarkers;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;CloseAllFigures;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;CloseFigure;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Flatten;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Flatten;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Flatten;(System.Drawing.Drawing2D.Matrix,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GetBounds;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GetBounds;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GetBounds;(System.Drawing.Drawing2D.Matrix,System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GetLastPoint;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GraphicsPath;(System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GraphicsPath;(System.Drawing.PointF[],System.Byte[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GraphicsPath;(System.Drawing.PointF[],System.Byte[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GraphicsPath;(System.Drawing.Point[],System.Byte[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;GraphicsPath;(System.Drawing.Point[],System.Byte[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Drawing.Point,System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Drawing.Point,System.Drawing.Pen,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Drawing.PointF,System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Drawing.PointF,System.Drawing.Pen,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Int32,System.Int32,System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Int32,System.Int32,System.Drawing.Pen,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Single,System.Single,System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsOutlineVisible;(System.Single,System.Single,System.Drawing.Pen,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Drawing.Point);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Drawing.Point,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Drawing.PointF,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Int32,System.Int32,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;IsVisible;(System.Single,System.Single,System.Drawing.Graphics);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Reset;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Reverse;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;SetMarkers;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;StartFigure;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Warp;(System.Drawing.PointF[],System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Warp;(System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Warp;(System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.WarpMode);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Warp;(System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.WarpMode,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Widen;(System.Drawing.Pen);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Widen;(System.Drawing.Pen,System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;Widen;(System.Drawing.Pen,System.Drawing.Drawing2D.Matrix,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;get_FillMode;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;get_PathData;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;get_PathPoints;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;get_PathTypes;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;get_PointCount;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPath;set_FillMode;(System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;CopyData;(System.Drawing.PointF[],System.Byte[],System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;Enumerate;(System.Drawing.PointF[],System.Byte[]);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;GraphicsPathIterator;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;HasCurve;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;NextMarker;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;NextMarker;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;NextPathType;(System.Byte,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;NextSubpath;(System.Drawing.Drawing2D.GraphicsPath,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;NextSubpath;(System.Int32,System.Int32,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;Rewind;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;get_Count;();summary;df-generated | +| System.Drawing.Drawing2D;GraphicsPathIterator;get_SubpathCount;();summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;HatchBrush;(System.Drawing.Drawing2D.HatchStyle,System.Drawing.Color);summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;HatchBrush;(System.Drawing.Drawing2D.HatchStyle,System.Drawing.Color,System.Drawing.Color);summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;get_BackgroundColor;();summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;get_ForegroundColor;();summary;df-generated | +| System.Drawing.Drawing2D;HatchBrush;get_HatchStyle;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.Point,System.Drawing.Point,System.Drawing.Color,System.Drawing.Color);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.PointF,System.Drawing.PointF,System.Drawing.Color,System.Drawing.Color);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Drawing.Drawing2D.LinearGradientMode);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.Rectangle,System.Drawing.Color,System.Drawing.Color,System.Single,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.RectangleF,System.Drawing.Color,System.Drawing.Color,System.Drawing.Drawing2D.LinearGradientMode);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.RectangleF,System.Drawing.Color,System.Drawing.Color,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;LinearGradientBrush;(System.Drawing.RectangleF,System.Drawing.Color,System.Drawing.Color,System.Single,System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;ResetTransform;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;RotateTransform;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;RotateTransform;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;ScaleTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;ScaleTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;SetBlendTriangularShape;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;SetBlendTriangularShape;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;SetSigmaBellShape;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;SetSigmaBellShape;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;TranslateTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;TranslateTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_Blend;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_GammaCorrection;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_InterpolationColors;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_LinearColors;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_Rectangle;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_Transform;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;get_WrapMode;();summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_Blend;(System.Drawing.Drawing2D.Blend);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_GammaCorrection;(System.Boolean);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_InterpolationColors;(System.Drawing.Drawing2D.ColorBlend);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_LinearColors;(System.Drawing.Color[]);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;LinearGradientBrush;set_WrapMode;(System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Dispose;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Equals;(System.Object);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;GetHashCode;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Invert;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Matrix;(System.Drawing.Rectangle,System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Matrix;(System.Drawing.RectangleF,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Matrix;(System.Numerics.Matrix3x2);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Matrix;(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Multiply;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Multiply;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Reset;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Rotate;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Rotate;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;RotateAt;(System.Single,System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;RotateAt;(System.Single,System.Drawing.PointF,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Scale;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Scale;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Shear;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Shear;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;TransformPoints;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;TransformPoints;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;TransformVectors;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;TransformVectors;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Translate;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;Translate;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;VectorTransformPoints;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_Elements;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_IsIdentity;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_IsInvertible;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_MatrixElements;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_OffsetX;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;get_OffsetY;();summary;df-generated | +| System.Drawing.Drawing2D;Matrix;set_MatrixElements;(System.Numerics.Matrix3x2);summary;df-generated | +| System.Drawing.Drawing2D;PathData;get_Points;();summary;df-generated | +| System.Drawing.Drawing2D;PathData;get_Types;();summary;df-generated | +| System.Drawing.Drawing2D;PathData;set_Points;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;PathData;set_Types;(System.Byte[]);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;Clone;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;PathGradientBrush;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;PathGradientBrush;(System.Drawing.PointF[]);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;PathGradientBrush;(System.Drawing.PointF[],System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;PathGradientBrush;(System.Drawing.Point[]);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;PathGradientBrush;(System.Drawing.Point[],System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;ResetTransform;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;RotateTransform;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;RotateTransform;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;ScaleTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;ScaleTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;SetBlendTriangularShape;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;SetBlendTriangularShape;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;SetSigmaBellShape;(System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;SetSigmaBellShape;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;TranslateTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;TranslateTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_Blend;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_CenterColor;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_CenterPoint;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_FocusScales;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_InterpolationColors;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_Rectangle;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_SurroundColors;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_Transform;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;get_WrapMode;();summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_Blend;(System.Drawing.Drawing2D.Blend);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_CenterColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_CenterPoint;(System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_FocusScales;(System.Drawing.PointF);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_InterpolationColors;(System.Drawing.Drawing2D.ColorBlend);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_SurroundColors;(System.Drawing.Color[]);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing.Drawing2D;PathGradientBrush;set_WrapMode;(System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing.Drawing2D;RegionData;get_Data;();summary;df-generated | +| System.Drawing.Drawing2D;RegionData;set_Data;(System.Byte[]);summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_Height;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_PixelFormat;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_Reserved;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_Scan0;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_Stride;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;get_Width;();summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_Height;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_PixelFormat;(System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_Reserved;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_Scan0;(System.IntPtr);summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_Stride;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;BitmapData;set_Width;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;ColorMap;get_NewColor;();summary;df-generated | +| System.Drawing.Imaging;ColorMap;get_OldColor;();summary;df-generated | +| System.Drawing.Imaging;ColorMap;set_NewColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing.Imaging;ColorMap;set_OldColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;ColorMatrix;(System.Single[][]);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Item;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix00;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix01;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix02;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix03;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix04;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix10;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix11;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix12;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix13;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix14;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix20;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix21;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix22;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix23;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix24;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix30;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix31;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix32;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix33;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix34;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix40;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix41;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix42;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix43;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;get_Matrix44;();summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Item;(System.Int32,System.Int32,System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix00;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix01;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix02;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix03;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix04;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix10;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix11;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix12;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix13;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix14;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix20;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix21;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix22;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix23;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix24;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix30;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix31;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix32;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix33;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix34;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix40;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix41;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix42;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix43;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorMatrix;set_Matrix44;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ColorPalette;get_Entries;();summary;df-generated | +| System.Drawing.Imaging;ColorPalette;get_Flags;();summary;df-generated | +| System.Drawing.Imaging;Encoder;Encoder;(System.Guid);summary;df-generated | +| System.Drawing.Imaging;Encoder;get_Guid;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;Dispose;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte,System.Boolean);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Byte[],System.Boolean);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int16);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int16[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Drawing.Imaging.EncoderParameterValueType,System.IntPtr);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32[],System.Int32[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int32[],System.Int32[],System.Int32[],System.Int32[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64,System.Int64);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.Int64[],System.Int64[]);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;EncoderParameter;(System.Drawing.Imaging.Encoder,System.String);summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;get_Encoder;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;get_NumberOfValues;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;get_Type;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;get_ValueType;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameter;set_Encoder;(System.Drawing.Imaging.Encoder);summary;df-generated | +| System.Drawing.Imaging;EncoderParameters;Dispose;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameters;EncoderParameters;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;EncoderParameters;get_Param;();summary;df-generated | +| System.Drawing.Imaging;EncoderParameters;set_Param;(System.Drawing.Imaging.EncoderParameter[]);summary;df-generated | +| System.Drawing.Imaging;FrameDimension;Equals;(System.Object);summary;df-generated | +| System.Drawing.Imaging;FrameDimension;FrameDimension;(System.Guid);summary;df-generated | +| System.Drawing.Imaging;FrameDimension;GetHashCode;();summary;df-generated | +| System.Drawing.Imaging;FrameDimension;ToString;();summary;df-generated | +| System.Drawing.Imaging;FrameDimension;get_Guid;();summary;df-generated | +| System.Drawing.Imaging;FrameDimension;get_Page;();summary;df-generated | +| System.Drawing.Imaging;FrameDimension;get_Resolution;();summary;df-generated | +| System.Drawing.Imaging;FrameDimension;get_Time;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearBrushRemapTable;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearColorKey;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearColorKey;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearColorMatrix;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearColorMatrix;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearGamma;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearGamma;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearNoOp;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearNoOp;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearOutputChannel;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearOutputChannel;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearOutputChannelColorProfile;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearOutputChannelColorProfile;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearRemapTable;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearRemapTable;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearThreshold;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;ClearThreshold;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;Clone;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;Dispose;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;GetAdjustedPalette;(System.Drawing.Imaging.ColorPalette,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetBrushRemapTable;(System.Drawing.Imaging.ColorMap[]);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorKey;(System.Drawing.Color,System.Drawing.Color);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorKey;(System.Drawing.Color,System.Drawing.Color,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrices;(System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrix);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrices;(System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrixFlag);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrices;(System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrixFlag,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrix;(System.Drawing.Imaging.ColorMatrix);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrix;(System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrixFlag);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetColorMatrix;(System.Drawing.Imaging.ColorMatrix,System.Drawing.Imaging.ColorMatrixFlag,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetGamma;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetGamma;(System.Single,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetNoOp;();summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetNoOp;(System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetOutputChannel;(System.Drawing.Imaging.ColorChannelFlag);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetOutputChannel;(System.Drawing.Imaging.ColorChannelFlag,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetOutputChannelColorProfile;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetOutputChannelColorProfile;(System.String,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetRemapTable;(System.Drawing.Imaging.ColorMap[]);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetRemapTable;(System.Drawing.Imaging.ColorMap[],System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetThreshold;(System.Single);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetThreshold;(System.Single,System.Drawing.Imaging.ColorAdjustType);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetWrapMode;(System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetWrapMode;(System.Drawing.Drawing2D.WrapMode,System.Drawing.Color);summary;df-generated | +| System.Drawing.Imaging;ImageAttributes;SetWrapMode;(System.Drawing.Drawing2D.WrapMode,System.Drawing.Color,System.Boolean);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;GetImageDecoders;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;GetImageEncoders;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_Clsid;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_CodecName;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_DllName;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_FilenameExtension;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_Flags;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_FormatDescription;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_FormatID;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_MimeType;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_SignatureMasks;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_SignaturePatterns;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;get_Version;();summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_Clsid;(System.Guid);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_CodecName;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_DllName;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_FilenameExtension;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_Flags;(System.Drawing.Imaging.ImageCodecFlags);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_FormatDescription;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_FormatID;(System.Guid);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_MimeType;(System.String);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_SignatureMasks;(System.Byte[][]);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_SignaturePatterns;(System.Byte[][]);summary;df-generated | +| System.Drawing.Imaging;ImageCodecInfo;set_Version;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;ImageFormat;Equals;(System.Object);summary;df-generated | +| System.Drawing.Imaging;ImageFormat;GetHashCode;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;ImageFormat;(System.Guid);summary;df-generated | +| System.Drawing.Imaging;ImageFormat;ToString;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Bmp;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Emf;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Exif;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Gif;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Guid;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Icon;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Jpeg;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_MemoryBmp;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Png;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Tiff;();summary;df-generated | +| System.Drawing.Imaging;ImageFormat;get_Wmf;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_HeaderSize;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_MaxRecord;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_NoObjects;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_NoParameters;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_Size;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_Type;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;get_Version;();summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_HeaderSize;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_MaxRecord;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_NoObjects;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_NoParameters;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_Size;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_Type;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;MetaHeader;set_Version;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;Metafile;GetHenhmetafile;();summary;df-generated | +| System.Drawing.Imaging;Metafile;GetMetafileHeader;();summary;df-generated | +| System.Drawing.Imaging;Metafile;GetMetafileHeader;(System.IO.Stream);summary;df-generated | +| System.Drawing.Imaging;Metafile;GetMetafileHeader;(System.IntPtr);summary;df-generated | +| System.Drawing.Imaging;Metafile;GetMetafileHeader;(System.IntPtr,System.Drawing.Imaging.WmfPlaceableFileHeader);summary;df-generated | +| System.Drawing.Imaging;Metafile;GetMetafileHeader;(System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IO.Stream,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Boolean);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Imaging.WmfPlaceableFileHeader);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Imaging.WmfPlaceableFileHeader,System.Boolean);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.Rectangle,System.Drawing.Imaging.MetafileFrameUnit,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.Drawing.Imaging.EmfType,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;Metafile;(System.String,System.IntPtr,System.Drawing.RectangleF,System.Drawing.Imaging.MetafileFrameUnit,System.String);summary;df-generated | +| System.Drawing.Imaging;Metafile;PlayRecord;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.Byte[]);summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsDisplay;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsEmf;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsEmfOrEmfPlus;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsEmfPlus;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsEmfPlusDual;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsEmfPlusOnly;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsWmf;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;IsWmfPlaceable;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_Bounds;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_DpiX;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_DpiY;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_EmfPlusHeaderSize;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_LogicalDpiX;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_LogicalDpiY;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_MetafileSize;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_Type;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_Version;();summary;df-generated | +| System.Drawing.Imaging;MetafileHeader;get_WmfHeader;();summary;df-generated | +| System.Drawing.Imaging;PropertyItem;get_Id;();summary;df-generated | +| System.Drawing.Imaging;PropertyItem;get_Len;();summary;df-generated | +| System.Drawing.Imaging;PropertyItem;get_Type;();summary;df-generated | +| System.Drawing.Imaging;PropertyItem;get_Value;();summary;df-generated | +| System.Drawing.Imaging;PropertyItem;set_Id;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;PropertyItem;set_Len;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;PropertyItem;set_Type;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;PropertyItem;set_Value;(System.Byte[]);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_BboxBottom;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_BboxLeft;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_BboxRight;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_BboxTop;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_Checksum;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_Hmf;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_Inch;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_Key;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;get_Reserved;();summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_BboxBottom;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_BboxLeft;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_BboxRight;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_BboxTop;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_Checksum;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_Hmf;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_Inch;(System.Int16);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_Key;(System.Int32);summary;df-generated | +| System.Drawing.Imaging;WmfPlaceableFileHeader;set_Reserved;(System.Int32);summary;df-generated | +| System.Drawing.Printing;InvalidPrinterException;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Drawing.Printing;InvalidPrinterException;InvalidPrinterException;(System.Drawing.Printing.PrinterSettings);summary;df-generated | +| System.Drawing.Printing;InvalidPrinterException;InvalidPrinterException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Drawing.Printing;Margins;Clone;();summary;df-generated | +| System.Drawing.Printing;Margins;Equals;(System.Object);summary;df-generated | +| System.Drawing.Printing;Margins;GetHashCode;();summary;df-generated | +| System.Drawing.Printing;Margins;Margins;(System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Printing;Margins;ToString;();summary;df-generated | +| System.Drawing.Printing;Margins;get_Bottom;();summary;df-generated | +| System.Drawing.Printing;Margins;get_Left;();summary;df-generated | +| System.Drawing.Printing;Margins;get_Right;();summary;df-generated | +| System.Drawing.Printing;Margins;get_Top;();summary;df-generated | +| System.Drawing.Printing;Margins;op_Equality;(System.Drawing.Printing.Margins,System.Drawing.Printing.Margins);summary;df-generated | +| System.Drawing.Printing;Margins;op_Inequality;(System.Drawing.Printing.Margins,System.Drawing.Printing.Margins);summary;df-generated | +| System.Drawing.Printing;Margins;set_Bottom;(System.Int32);summary;df-generated | +| System.Drawing.Printing;Margins;set_Left;(System.Int32);summary;df-generated | +| System.Drawing.Printing;Margins;set_Right;(System.Int32);summary;df-generated | +| System.Drawing.Printing;Margins;set_Top;(System.Int32);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;CreateInstance;(System.ComponentModel.ITypeDescriptorContext,System.Collections.IDictionary);summary;df-generated | +| System.Drawing.Printing;MarginsConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing.Printing;PageSettings;Clone;();summary;df-generated | +| System.Drawing.Printing;PageSettings;CopyToHdevmode;(System.IntPtr);summary;df-generated | +| System.Drawing.Printing;PageSettings;PageSettings;(System.Drawing.Printing.PrinterSettings);summary;df-generated | +| System.Drawing.Printing;PageSettings;SetHdevmode;(System.IntPtr);summary;df-generated | +| System.Drawing.Printing;PageSettings;ToString;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_Bounds;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_Color;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_HardMarginX;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_HardMarginY;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_Landscape;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_Margins;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_PaperSize;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_PaperSource;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_PrintableArea;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_PrinterResolution;();summary;df-generated | +| System.Drawing.Printing;PageSettings;get_PrinterSettings;();summary;df-generated | +| System.Drawing.Printing;PageSettings;set_Color;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_Landscape;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_Margins;(System.Drawing.Printing.Margins);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_PaperSize;(System.Drawing.Printing.PaperSize);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_PaperSource;(System.Drawing.Printing.PaperSource);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_PrinterResolution;(System.Drawing.Printing.PrinterResolution);summary;df-generated | +| System.Drawing.Printing;PageSettings;set_PrinterSettings;(System.Drawing.Printing.PrinterSettings);summary;df-generated | +| System.Drawing.Printing;PaperSize;PaperSize;(System.String,System.Int32,System.Int32);summary;df-generated | +| System.Drawing.Printing;PaperSize;ToString;();summary;df-generated | +| System.Drawing.Printing;PaperSize;get_Height;();summary;df-generated | +| System.Drawing.Printing;PaperSize;get_Kind;();summary;df-generated | +| System.Drawing.Printing;PaperSize;get_PaperName;();summary;df-generated | +| System.Drawing.Printing;PaperSize;get_RawKind;();summary;df-generated | +| System.Drawing.Printing;PaperSize;get_Width;();summary;df-generated | +| System.Drawing.Printing;PaperSize;set_Height;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PaperSize;set_PaperName;(System.String);summary;df-generated | +| System.Drawing.Printing;PaperSize;set_RawKind;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PaperSize;set_Width;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PaperSource;ToString;();summary;df-generated | +| System.Drawing.Printing;PaperSource;get_Kind;();summary;df-generated | +| System.Drawing.Printing;PaperSource;get_RawKind;();summary;df-generated | +| System.Drawing.Printing;PaperSource;get_SourceName;();summary;df-generated | +| System.Drawing.Printing;PaperSource;set_RawKind;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PaperSource;set_SourceName;(System.String);summary;df-generated | +| System.Drawing.Printing;PreviewPageInfo;PreviewPageInfo;(System.Drawing.Image,System.Drawing.Size);summary;df-generated | +| System.Drawing.Printing;PreviewPageInfo;get_Image;();summary;df-generated | +| System.Drawing.Printing;PreviewPageInfo;get_PhysicalSize;();summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;GetPreviewPageInfo;();summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;OnEndPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;OnEndPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;OnStartPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;OnStartPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;get_IsPreview;();summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;get_UseAntiAlias;();summary;df-generated | +| System.Drawing.Printing;PreviewPrintController;set_UseAntiAlias;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrintController;OnEndPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintController;OnEndPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintController;OnStartPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintController;OnStartPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintController;get_IsPreview;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;OnBeginPrint;(System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintDocument;OnEndPrint;(System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintDocument;OnPrintPage;(System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintDocument;OnQueryPageSettings;(System.Drawing.Printing.QueryPageSettingsEventArgs);summary;df-generated | +| System.Drawing.Printing;PrintDocument;Print;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;ToString;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;get_DefaultPageSettings;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;get_DocumentName;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;get_OriginAtMargins;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;get_PrintController;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;get_PrinterSettings;();summary;df-generated | +| System.Drawing.Printing;PrintDocument;set_DefaultPageSettings;(System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;PrintDocument;set_DocumentName;(System.String);summary;df-generated | +| System.Drawing.Printing;PrintDocument;set_OriginAtMargins;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrintDocument;set_PrintController;(System.Drawing.Printing.PrintController);summary;df-generated | +| System.Drawing.Printing;PrintDocument;set_PrinterSettings;(System.Drawing.Printing.PrinterSettings);summary;df-generated | +| System.Drawing.Printing;PrintEventArgs;get_PrintAction;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;PrintPageEventArgs;(System.Drawing.Graphics,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_Cancel;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_Graphics;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_HasMorePages;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_MarginBounds;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_PageBounds;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;get_PageSettings;();summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;set_Cancel;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrintPageEventArgs;set_HasMorePages;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrinterResolution;ToString;();summary;df-generated | +| System.Drawing.Printing;PrinterResolution;get_Kind;();summary;df-generated | +| System.Drawing.Printing;PrinterResolution;get_X;();summary;df-generated | +| System.Drawing.Printing;PrinterResolution;get_Y;();summary;df-generated | +| System.Drawing.Printing;PrinterResolution;set_Kind;(System.Drawing.Printing.PrinterResolutionKind);summary;df-generated | +| System.Drawing.Printing;PrinterResolution;set_X;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterResolution;set_Y;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;Add;(System.Drawing.Printing.PaperSize);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;CopyTo;(System.Drawing.Printing.PaperSize[],System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;GetEnumerator;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;PaperSizeCollection;(System.Drawing.Printing.PaperSize[]);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_Item;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSizeCollection;get_SyncRoot;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;Add;(System.Drawing.Printing.PaperSource);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;CopyTo;(System.Drawing.Printing.PaperSource[],System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;GetEnumerator;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;PaperSourceCollection;(System.Drawing.Printing.PaperSource[]);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_Item;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PaperSourceCollection;get_SyncRoot;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;Add;(System.Drawing.Printing.PrinterResolution);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;CopyTo;(System.Drawing.Printing.PrinterResolution[],System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;GetEnumerator;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;PrinterResolutionCollection;(System.Drawing.Printing.PrinterResolution[]);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_Item;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+PrinterResolutionCollection;get_SyncRoot;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;Add;(System.String);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;CopyTo;(System.String[],System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;GetEnumerator;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;StringCollection;(System.String[]);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_Count;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_IsSynchronized;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_Item;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings+StringCollection;get_SyncRoot;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;Clone;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;CreateMeasurementGraphics;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;CreateMeasurementGraphics;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;CreateMeasurementGraphics;(System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;CreateMeasurementGraphics;(System.Drawing.Printing.PageSettings,System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;GetHdevmode;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;GetHdevmode;(System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;GetHdevnames;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;IsDirectPrintingSupported;(System.Drawing.Image);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;IsDirectPrintingSupported;(System.Drawing.Imaging.ImageFormat);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;SetHdevmode;(System.IntPtr);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;SetHdevnames;(System.IntPtr);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;ToString;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_CanDuplex;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_Collate;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_Copies;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_DefaultPageSettings;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_Duplex;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_FromPage;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_InstalledPrinters;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_IsDefaultPrinter;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_IsPlotter;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_IsValid;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_LandscapeAngle;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_MaximumCopies;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_MaximumPage;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_MinimumPage;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PaperSizes;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PaperSources;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PrintFileName;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PrintRange;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PrintToFile;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PrinterName;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_PrinterResolutions;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_SupportsColor;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;get_ToPage;();summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_Collate;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_Copies;(System.Int16);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_Duplex;(System.Drawing.Printing.Duplex);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_FromPage;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_MaximumPage;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_MinimumPage;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_PrintFileName;(System.String);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_PrintRange;(System.Drawing.Printing.PrintRange);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_PrintToFile;(System.Boolean);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_PrinterName;(System.String);summary;df-generated | +| System.Drawing.Printing;PrinterSettings;set_ToPage;(System.Int32);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Double,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Drawing.Point,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Drawing.Printing.Margins,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Drawing.Rectangle,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Drawing.Size,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrinterUnitConvert;Convert;(System.Int32,System.Drawing.Printing.PrinterUnit,System.Drawing.Printing.PrinterUnit);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;Copy;();summary;df-generated | +| System.Drawing.Printing;PrintingPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;IsUnrestricted;();summary;df-generated | +| System.Drawing.Printing;PrintingPermission;PrintingPermission;(System.Drawing.Printing.PrintingPermissionLevel);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;PrintingPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;ToXml;();summary;df-generated | +| System.Drawing.Printing;PrintingPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Drawing.Printing;PrintingPermission;get_Level;();summary;df-generated | +| System.Drawing.Printing;PrintingPermission;set_Level;(System.Drawing.Printing.PrintingPermissionLevel);summary;df-generated | +| System.Drawing.Printing;PrintingPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Drawing.Printing;PrintingPermissionAttribute;PrintingPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Drawing.Printing;PrintingPermissionAttribute;get_Level;();summary;df-generated | +| System.Drawing.Printing;PrintingPermissionAttribute;set_Level;(System.Drawing.Printing.PrintingPermissionLevel);summary;df-generated | +| System.Drawing.Printing;QueryPageSettingsEventArgs;QueryPageSettingsEventArgs;(System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;QueryPageSettingsEventArgs;get_PageSettings;();summary;df-generated | +| System.Drawing.Printing;QueryPageSettingsEventArgs;set_PageSettings;(System.Drawing.Printing.PageSettings);summary;df-generated | +| System.Drawing.Printing;StandardPrintController;OnEndPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;StandardPrintController;OnEndPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Printing;StandardPrintController;OnStartPage;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintPageEventArgs);summary;df-generated | +| System.Drawing.Printing;StandardPrintController;OnStartPrint;(System.Drawing.Printing.PrintDocument,System.Drawing.Printing.PrintEventArgs);summary;df-generated | +| System.Drawing.Text;FontCollection;Dispose;();summary;df-generated | +| System.Drawing.Text;FontCollection;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing.Text;FontCollection;get_Families;();summary;df-generated | +| System.Drawing.Text;PrivateFontCollection;AddFontFile;(System.String);summary;df-generated | +| System.Drawing.Text;PrivateFontCollection;AddMemoryFont;(System.IntPtr,System.Int32);summary;df-generated | +| System.Drawing.Text;PrivateFontCollection;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Drawing.Image);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Drawing.Image,System.Drawing.Size);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Drawing.Image,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.IO.Stream);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.IO.Stream,System.Boolean);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Int32,System.Int32,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Int32,System.Int32,System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Int32,System.Int32,System.Int32,System.Drawing.Imaging.PixelFormat,System.IntPtr);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.String);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.String,System.Boolean);summary;df-generated | +| System.Drawing;Bitmap;Bitmap;(System.Type,System.String);summary;df-generated | +| System.Drawing;Bitmap;Clone;(System.Drawing.Rectangle,System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Bitmap;Clone;(System.Drawing.RectangleF,System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Bitmap;FromHicon;(System.IntPtr);summary;df-generated | +| System.Drawing;Bitmap;FromResource;(System.IntPtr,System.String);summary;df-generated | +| System.Drawing;Bitmap;GetHbitmap;();summary;df-generated | +| System.Drawing;Bitmap;GetHbitmap;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Bitmap;GetHicon;();summary;df-generated | +| System.Drawing;Bitmap;GetPixel;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Bitmap;LockBits;(System.Drawing.Rectangle,System.Drawing.Imaging.ImageLockMode,System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Bitmap;LockBits;(System.Drawing.Rectangle,System.Drawing.Imaging.ImageLockMode,System.Drawing.Imaging.PixelFormat,System.Drawing.Imaging.BitmapData);summary;df-generated | +| System.Drawing;Bitmap;MakeTransparent;();summary;df-generated | +| System.Drawing;Bitmap;MakeTransparent;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Bitmap;SetPixel;(System.Int32,System.Int32,System.Drawing.Color);summary;df-generated | +| System.Drawing;Bitmap;SetResolution;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Bitmap;UnlockBits;(System.Drawing.Imaging.BitmapData);summary;df-generated | +| System.Drawing;Brush;Clone;();summary;df-generated | +| System.Drawing;Brush;Dispose;();summary;df-generated | +| System.Drawing;Brush;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing;Brush;SetNativeBrush;(System.IntPtr);summary;df-generated | +| System.Drawing;Brushes;get_AliceBlue;();summary;df-generated | +| System.Drawing;Brushes;get_AntiqueWhite;();summary;df-generated | +| System.Drawing;Brushes;get_Aqua;();summary;df-generated | +| System.Drawing;Brushes;get_Aquamarine;();summary;df-generated | +| System.Drawing;Brushes;get_Azure;();summary;df-generated | +| System.Drawing;Brushes;get_Beige;();summary;df-generated | +| System.Drawing;Brushes;get_Bisque;();summary;df-generated | +| System.Drawing;Brushes;get_Black;();summary;df-generated | +| System.Drawing;Brushes;get_BlanchedAlmond;();summary;df-generated | +| System.Drawing;Brushes;get_Blue;();summary;df-generated | +| System.Drawing;Brushes;get_BlueViolet;();summary;df-generated | +| System.Drawing;Brushes;get_Brown;();summary;df-generated | +| System.Drawing;Brushes;get_BurlyWood;();summary;df-generated | +| System.Drawing;Brushes;get_CadetBlue;();summary;df-generated | +| System.Drawing;Brushes;get_Chartreuse;();summary;df-generated | +| System.Drawing;Brushes;get_Chocolate;();summary;df-generated | +| System.Drawing;Brushes;get_Coral;();summary;df-generated | +| System.Drawing;Brushes;get_CornflowerBlue;();summary;df-generated | +| System.Drawing;Brushes;get_Cornsilk;();summary;df-generated | +| System.Drawing;Brushes;get_Crimson;();summary;df-generated | +| System.Drawing;Brushes;get_Cyan;();summary;df-generated | +| System.Drawing;Brushes;get_DarkBlue;();summary;df-generated | +| System.Drawing;Brushes;get_DarkCyan;();summary;df-generated | +| System.Drawing;Brushes;get_DarkGoldenrod;();summary;df-generated | +| System.Drawing;Brushes;get_DarkGray;();summary;df-generated | +| System.Drawing;Brushes;get_DarkGreen;();summary;df-generated | +| System.Drawing;Brushes;get_DarkKhaki;();summary;df-generated | +| System.Drawing;Brushes;get_DarkMagenta;();summary;df-generated | +| System.Drawing;Brushes;get_DarkOliveGreen;();summary;df-generated | +| System.Drawing;Brushes;get_DarkOrange;();summary;df-generated | +| System.Drawing;Brushes;get_DarkOrchid;();summary;df-generated | +| System.Drawing;Brushes;get_DarkRed;();summary;df-generated | +| System.Drawing;Brushes;get_DarkSalmon;();summary;df-generated | +| System.Drawing;Brushes;get_DarkSeaGreen;();summary;df-generated | +| System.Drawing;Brushes;get_DarkSlateBlue;();summary;df-generated | +| System.Drawing;Brushes;get_DarkSlateGray;();summary;df-generated | +| System.Drawing;Brushes;get_DarkTurquoise;();summary;df-generated | +| System.Drawing;Brushes;get_DarkViolet;();summary;df-generated | +| System.Drawing;Brushes;get_DeepPink;();summary;df-generated | +| System.Drawing;Brushes;get_DeepSkyBlue;();summary;df-generated | +| System.Drawing;Brushes;get_DimGray;();summary;df-generated | +| System.Drawing;Brushes;get_DodgerBlue;();summary;df-generated | +| System.Drawing;Brushes;get_Firebrick;();summary;df-generated | +| System.Drawing;Brushes;get_FloralWhite;();summary;df-generated | +| System.Drawing;Brushes;get_ForestGreen;();summary;df-generated | +| System.Drawing;Brushes;get_Fuchsia;();summary;df-generated | +| System.Drawing;Brushes;get_Gainsboro;();summary;df-generated | +| System.Drawing;Brushes;get_GhostWhite;();summary;df-generated | +| System.Drawing;Brushes;get_Gold;();summary;df-generated | +| System.Drawing;Brushes;get_Goldenrod;();summary;df-generated | +| System.Drawing;Brushes;get_Gray;();summary;df-generated | +| System.Drawing;Brushes;get_Green;();summary;df-generated | +| System.Drawing;Brushes;get_GreenYellow;();summary;df-generated | +| System.Drawing;Brushes;get_Honeydew;();summary;df-generated | +| System.Drawing;Brushes;get_HotPink;();summary;df-generated | +| System.Drawing;Brushes;get_IndianRed;();summary;df-generated | +| System.Drawing;Brushes;get_Indigo;();summary;df-generated | +| System.Drawing;Brushes;get_Ivory;();summary;df-generated | +| System.Drawing;Brushes;get_Khaki;();summary;df-generated | +| System.Drawing;Brushes;get_Lavender;();summary;df-generated | +| System.Drawing;Brushes;get_LavenderBlush;();summary;df-generated | +| System.Drawing;Brushes;get_LawnGreen;();summary;df-generated | +| System.Drawing;Brushes;get_LemonChiffon;();summary;df-generated | +| System.Drawing;Brushes;get_LightBlue;();summary;df-generated | +| System.Drawing;Brushes;get_LightCoral;();summary;df-generated | +| System.Drawing;Brushes;get_LightCyan;();summary;df-generated | +| System.Drawing;Brushes;get_LightGoldenrodYellow;();summary;df-generated | +| System.Drawing;Brushes;get_LightGray;();summary;df-generated | +| System.Drawing;Brushes;get_LightGreen;();summary;df-generated | +| System.Drawing;Brushes;get_LightPink;();summary;df-generated | +| System.Drawing;Brushes;get_LightSalmon;();summary;df-generated | +| System.Drawing;Brushes;get_LightSeaGreen;();summary;df-generated | +| System.Drawing;Brushes;get_LightSkyBlue;();summary;df-generated | +| System.Drawing;Brushes;get_LightSlateGray;();summary;df-generated | +| System.Drawing;Brushes;get_LightSteelBlue;();summary;df-generated | +| System.Drawing;Brushes;get_LightYellow;();summary;df-generated | +| System.Drawing;Brushes;get_Lime;();summary;df-generated | +| System.Drawing;Brushes;get_LimeGreen;();summary;df-generated | +| System.Drawing;Brushes;get_Linen;();summary;df-generated | +| System.Drawing;Brushes;get_Magenta;();summary;df-generated | +| System.Drawing;Brushes;get_Maroon;();summary;df-generated | +| System.Drawing;Brushes;get_MediumAquamarine;();summary;df-generated | +| System.Drawing;Brushes;get_MediumBlue;();summary;df-generated | +| System.Drawing;Brushes;get_MediumOrchid;();summary;df-generated | +| System.Drawing;Brushes;get_MediumPurple;();summary;df-generated | +| System.Drawing;Brushes;get_MediumSeaGreen;();summary;df-generated | +| System.Drawing;Brushes;get_MediumSlateBlue;();summary;df-generated | +| System.Drawing;Brushes;get_MediumSpringGreen;();summary;df-generated | +| System.Drawing;Brushes;get_MediumTurquoise;();summary;df-generated | +| System.Drawing;Brushes;get_MediumVioletRed;();summary;df-generated | +| System.Drawing;Brushes;get_MidnightBlue;();summary;df-generated | +| System.Drawing;Brushes;get_MintCream;();summary;df-generated | +| System.Drawing;Brushes;get_MistyRose;();summary;df-generated | +| System.Drawing;Brushes;get_Moccasin;();summary;df-generated | +| System.Drawing;Brushes;get_NavajoWhite;();summary;df-generated | +| System.Drawing;Brushes;get_Navy;();summary;df-generated | +| System.Drawing;Brushes;get_OldLace;();summary;df-generated | +| System.Drawing;Brushes;get_Olive;();summary;df-generated | +| System.Drawing;Brushes;get_OliveDrab;();summary;df-generated | +| System.Drawing;Brushes;get_Orange;();summary;df-generated | +| System.Drawing;Brushes;get_OrangeRed;();summary;df-generated | +| System.Drawing;Brushes;get_Orchid;();summary;df-generated | +| System.Drawing;Brushes;get_PaleGoldenrod;();summary;df-generated | +| System.Drawing;Brushes;get_PaleGreen;();summary;df-generated | +| System.Drawing;Brushes;get_PaleTurquoise;();summary;df-generated | +| System.Drawing;Brushes;get_PaleVioletRed;();summary;df-generated | +| System.Drawing;Brushes;get_PapayaWhip;();summary;df-generated | +| System.Drawing;Brushes;get_PeachPuff;();summary;df-generated | +| System.Drawing;Brushes;get_Peru;();summary;df-generated | +| System.Drawing;Brushes;get_Pink;();summary;df-generated | +| System.Drawing;Brushes;get_Plum;();summary;df-generated | +| System.Drawing;Brushes;get_PowderBlue;();summary;df-generated | +| System.Drawing;Brushes;get_Purple;();summary;df-generated | +| System.Drawing;Brushes;get_Red;();summary;df-generated | +| System.Drawing;Brushes;get_RosyBrown;();summary;df-generated | +| System.Drawing;Brushes;get_RoyalBlue;();summary;df-generated | +| System.Drawing;Brushes;get_SaddleBrown;();summary;df-generated | +| System.Drawing;Brushes;get_Salmon;();summary;df-generated | +| System.Drawing;Brushes;get_SandyBrown;();summary;df-generated | +| System.Drawing;Brushes;get_SeaGreen;();summary;df-generated | +| System.Drawing;Brushes;get_SeaShell;();summary;df-generated | +| System.Drawing;Brushes;get_Sienna;();summary;df-generated | +| System.Drawing;Brushes;get_Silver;();summary;df-generated | +| System.Drawing;Brushes;get_SkyBlue;();summary;df-generated | +| System.Drawing;Brushes;get_SlateBlue;();summary;df-generated | +| System.Drawing;Brushes;get_SlateGray;();summary;df-generated | +| System.Drawing;Brushes;get_Snow;();summary;df-generated | +| System.Drawing;Brushes;get_SpringGreen;();summary;df-generated | +| System.Drawing;Brushes;get_SteelBlue;();summary;df-generated | +| System.Drawing;Brushes;get_Tan;();summary;df-generated | +| System.Drawing;Brushes;get_Teal;();summary;df-generated | +| System.Drawing;Brushes;get_Thistle;();summary;df-generated | +| System.Drawing;Brushes;get_Tomato;();summary;df-generated | +| System.Drawing;Brushes;get_Transparent;();summary;df-generated | +| System.Drawing;Brushes;get_Turquoise;();summary;df-generated | +| System.Drawing;Brushes;get_Violet;();summary;df-generated | +| System.Drawing;Brushes;get_Wheat;();summary;df-generated | +| System.Drawing;Brushes;get_White;();summary;df-generated | +| System.Drawing;Brushes;get_WhiteSmoke;();summary;df-generated | +| System.Drawing;Brushes;get_Yellow;();summary;df-generated | +| System.Drawing;Brushes;get_YellowGreen;();summary;df-generated | +| System.Drawing;BufferedGraphics;Dispose;();summary;df-generated | +| System.Drawing;BufferedGraphics;Render;();summary;df-generated | +| System.Drawing;BufferedGraphics;Render;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;BufferedGraphics;Render;(System.IntPtr);summary;df-generated | +| System.Drawing;BufferedGraphics;get_Graphics;();summary;df-generated | +| System.Drawing;BufferedGraphicsContext;Allocate;(System.Drawing.Graphics,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;BufferedGraphicsContext;Allocate;(System.IntPtr,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;BufferedGraphicsContext;Dispose;();summary;df-generated | +| System.Drawing;BufferedGraphicsContext;Invalidate;();summary;df-generated | +| System.Drawing;BufferedGraphicsContext;get_MaximumBuffer;();summary;df-generated | +| System.Drawing;BufferedGraphicsContext;set_MaximumBuffer;(System.Drawing.Size);summary;df-generated | +| System.Drawing;BufferedGraphicsManager;get_Current;();summary;df-generated | +| System.Drawing;CharacterRange;CharacterRange;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;CharacterRange;Equals;(System.Object);summary;df-generated | +| System.Drawing;CharacterRange;GetHashCode;();summary;df-generated | +| System.Drawing;CharacterRange;get_First;();summary;df-generated | +| System.Drawing;CharacterRange;get_Length;();summary;df-generated | +| System.Drawing;CharacterRange;op_Equality;(System.Drawing.CharacterRange,System.Drawing.CharacterRange);summary;df-generated | +| System.Drawing;CharacterRange;op_Inequality;(System.Drawing.CharacterRange,System.Drawing.CharacterRange);summary;df-generated | +| System.Drawing;CharacterRange;set_First;(System.Int32);summary;df-generated | +| System.Drawing;CharacterRange;set_Length;(System.Int32);summary;df-generated | | System.Drawing;Color;Equals;(System.Drawing.Color);summary;df-generated | | System.Drawing;Color;Equals;(System.Object);summary;df-generated | | System.Drawing;Color;FromArgb;(System.Int32);summary;df-generated | @@ -25188,6 +28851,572 @@ neutral | System.Drawing;ColorTranslator;FromWin32;(System.Int32);summary;df-generated | | System.Drawing;ColorTranslator;ToOle;(System.Drawing.Color);summary;df-generated | | System.Drawing;ColorTranslator;ToWin32;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Font;Clone;();summary;df-generated | +| System.Drawing;Font;Dispose;();summary;df-generated | +| System.Drawing;Font;Equals;(System.Object);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.Font,System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte,System.Boolean);summary;df-generated | +| System.Drawing;Font;Font;(System.Drawing.FontFamily,System.Single,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single,System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single,System.Drawing.FontStyle,System.Drawing.GraphicsUnit,System.Byte,System.Boolean);summary;df-generated | +| System.Drawing;Font;Font;(System.String,System.Single,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Font;FromHdc;(System.IntPtr);summary;df-generated | +| System.Drawing;Font;FromHfont;(System.IntPtr);summary;df-generated | +| System.Drawing;Font;FromLogFont;(System.Object);summary;df-generated | +| System.Drawing;Font;FromLogFont;(System.Object,System.IntPtr);summary;df-generated | +| System.Drawing;Font;GetHashCode;();summary;df-generated | +| System.Drawing;Font;GetHeight;();summary;df-generated | +| System.Drawing;Font;GetHeight;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Font;GetHeight;(System.Single);summary;df-generated | +| System.Drawing;Font;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Drawing;Font;ToHfont;();summary;df-generated | +| System.Drawing;Font;ToLogFont;(System.Object);summary;df-generated | +| System.Drawing;Font;ToLogFont;(System.Object,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Font;ToString;();summary;df-generated | +| System.Drawing;Font;get_Bold;();summary;df-generated | +| System.Drawing;Font;get_FontFamily;();summary;df-generated | +| System.Drawing;Font;get_GdiCharSet;();summary;df-generated | +| System.Drawing;Font;get_GdiVerticalFont;();summary;df-generated | +| System.Drawing;Font;get_Height;();summary;df-generated | +| System.Drawing;Font;get_IsSystemFont;();summary;df-generated | +| System.Drawing;Font;get_Italic;();summary;df-generated | +| System.Drawing;Font;get_Name;();summary;df-generated | +| System.Drawing;Font;get_OriginalFontName;();summary;df-generated | +| System.Drawing;Font;get_Size;();summary;df-generated | +| System.Drawing;Font;get_SizeInPoints;();summary;df-generated | +| System.Drawing;Font;get_Strikeout;();summary;df-generated | +| System.Drawing;Font;get_Style;();summary;df-generated | +| System.Drawing;Font;get_SystemFontName;();summary;df-generated | +| System.Drawing;Font;get_Underline;();summary;df-generated | +| System.Drawing;Font;get_Unit;();summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;Dispose;();summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;GetStandardValuesExclusive;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter+FontNameConverter;GetStandardValuesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter+FontUnitConverter;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;FontConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing;FontConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Drawing;FontConverter;CreateInstance;(System.ComponentModel.ITypeDescriptorContext,System.Collections.IDictionary);summary;df-generated | +| System.Drawing;FontConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontConverter;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);summary;df-generated | +| System.Drawing;FontConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;FontFamily;Dispose;();summary;df-generated | +| System.Drawing;FontFamily;Equals;(System.Object);summary;df-generated | +| System.Drawing;FontFamily;FontFamily;(System.Drawing.Text.GenericFontFamilies);summary;df-generated | +| System.Drawing;FontFamily;FontFamily;(System.String);summary;df-generated | +| System.Drawing;FontFamily;FontFamily;(System.String,System.Drawing.Text.FontCollection);summary;df-generated | +| System.Drawing;FontFamily;GetCellAscent;(System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;FontFamily;GetCellDescent;(System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;FontFamily;GetEmHeight;(System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;FontFamily;GetFamilies;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;FontFamily;GetHashCode;();summary;df-generated | +| System.Drawing;FontFamily;GetLineSpacing;(System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;FontFamily;GetName;(System.Int32);summary;df-generated | +| System.Drawing;FontFamily;IsStyleAvailable;(System.Drawing.FontStyle);summary;df-generated | +| System.Drawing;FontFamily;ToString;();summary;df-generated | +| System.Drawing;FontFamily;get_Families;();summary;df-generated | +| System.Drawing;FontFamily;get_GenericMonospace;();summary;df-generated | +| System.Drawing;FontFamily;get_GenericSansSerif;();summary;df-generated | +| System.Drawing;FontFamily;get_GenericSerif;();summary;df-generated | +| System.Drawing;FontFamily;get_Name;();summary;df-generated | +| System.Drawing;Graphics;AddMetafileComment;(System.Byte[]);summary;df-generated | +| System.Drawing;Graphics;BeginContainer;();summary;df-generated | +| System.Drawing;Graphics;BeginContainer;(System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;BeginContainer;(System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;Clear;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Graphics;CopyFromScreen;(System.Drawing.Point,System.Drawing.Point,System.Drawing.Size);summary;df-generated | +| System.Drawing;Graphics;CopyFromScreen;(System.Drawing.Point,System.Drawing.Point,System.Drawing.Size,System.Drawing.CopyPixelOperation);summary;df-generated | +| System.Drawing;Graphics;CopyFromScreen;(System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.Size);summary;df-generated | +| System.Drawing;Graphics;CopyFromScreen;(System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.Size,System.Drawing.CopyPixelOperation);summary;df-generated | +| System.Drawing;Graphics;Dispose;();summary;df-generated | +| System.Drawing;Graphics;DrawArc;(System.Drawing.Pen,System.Drawing.Rectangle,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawArc;(System.Drawing.Pen,System.Drawing.RectangleF,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawArc;(System.Drawing.Pen,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawArc;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawBezier;(System.Drawing.Pen,System.Drawing.Point,System.Drawing.Point,System.Drawing.Point,System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;DrawBezier;(System.Drawing.Pen,System.Drawing.PointF,System.Drawing.PointF,System.Drawing.PointF,System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;DrawBezier;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawBeziers;(System.Drawing.Pen,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawBeziers;(System.Drawing.Pen,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawClosedCurve;(System.Drawing.Pen,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawClosedCurve;(System.Drawing.Pen,System.Drawing.PointF[],System.Single,System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;DrawClosedCurve;(System.Drawing.Pen,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawClosedCurve;(System.Drawing.Pen,System.Drawing.Point[],System.Single,System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.PointF[],System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.PointF[],System.Int32,System.Int32,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.PointF[],System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.Point[],System.Int32,System.Int32,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawCurve;(System.Drawing.Pen,System.Drawing.Point[],System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawEllipse;(System.Drawing.Pen,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawEllipse;(System.Drawing.Pen,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;DrawEllipse;(System.Drawing.Pen,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawEllipse;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawIcon;(System.Drawing.Icon,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawIcon;(System.Drawing.Icon,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawIconUnstretched;(System.Drawing.Icon,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Int32,System.Int32,System.Drawing.Rectangle,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Single,System.Single,System.Drawing.RectangleF,System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;DrawImage;(System.Drawing.Image,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawImageUnscaled;(System.Drawing.Image,System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;DrawImageUnscaled;(System.Drawing.Image,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawImageUnscaled;(System.Drawing.Image,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawImageUnscaled;(System.Drawing.Image,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawImageUnscaledAndClipped;(System.Drawing.Image,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawLine;(System.Drawing.Pen,System.Drawing.Point,System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;DrawLine;(System.Drawing.Pen,System.Drawing.PointF,System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;DrawLine;(System.Drawing.Pen,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawLine;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawLines;(System.Drawing.Pen,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawLines;(System.Drawing.Pen,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawPath;(System.Drawing.Pen,System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Graphics;DrawPie;(System.Drawing.Pen,System.Drawing.Rectangle,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawPie;(System.Drawing.Pen,System.Drawing.RectangleF,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawPie;(System.Drawing.Pen,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawPie;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawPolygon;(System.Drawing.Pen,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;DrawPolygon;(System.Drawing.Pen,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;DrawRectangle;(System.Drawing.Pen,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;DrawRectangle;(System.Drawing.Pen,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;DrawRectangle;(System.Drawing.Pen,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawRectangles;(System.Drawing.Pen,System.Drawing.RectangleF[]);summary;df-generated | +| System.Drawing;Graphics;DrawRectangles;(System.Drawing.Pen,System.Drawing.Rectangle[]);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.PointF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Drawing.RectangleF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;DrawString;(System.String,System.Drawing.Font,System.Drawing.Brush,System.Single,System.Single,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;EndContainer;(System.Drawing.Drawing2D.GraphicsContainer);summary;df-generated | +| System.Drawing;Graphics;ExcludeClip;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;ExcludeClip;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.PointF[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.PointF[],System.Drawing.Drawing2D.FillMode,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.Point[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;FillClosedCurve;(System.Drawing.Brush,System.Drawing.Point[],System.Drawing.Drawing2D.FillMode,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillEllipse;(System.Drawing.Brush,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;FillEllipse;(System.Drawing.Brush,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;FillEllipse;(System.Drawing.Brush,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;FillEllipse;(System.Drawing.Brush,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillPath;(System.Drawing.Brush,System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Graphics;FillPie;(System.Drawing.Brush,System.Drawing.Rectangle,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillPie;(System.Drawing.Brush,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;FillPie;(System.Drawing.Brush,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillPolygon;(System.Drawing.Brush,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;FillPolygon;(System.Drawing.Brush,System.Drawing.PointF[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;FillPolygon;(System.Drawing.Brush,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;FillPolygon;(System.Drawing.Brush,System.Drawing.Point[],System.Drawing.Drawing2D.FillMode);summary;df-generated | +| System.Drawing;Graphics;FillRectangle;(System.Drawing.Brush,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;FillRectangle;(System.Drawing.Brush,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;FillRectangle;(System.Drawing.Brush,System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;FillRectangle;(System.Drawing.Brush,System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;FillRectangles;(System.Drawing.Brush,System.Drawing.RectangleF[]);summary;df-generated | +| System.Drawing;Graphics;FillRectangles;(System.Drawing.Brush,System.Drawing.Rectangle[]);summary;df-generated | +| System.Drawing;Graphics;FillRegion;(System.Drawing.Brush,System.Drawing.Region);summary;df-generated | +| System.Drawing;Graphics;Flush;();summary;df-generated | +| System.Drawing;Graphics;Flush;(System.Drawing.Drawing2D.FlushIntention);summary;df-generated | +| System.Drawing;Graphics;FromHdc;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;FromHdc;(System.IntPtr,System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;FromHdcInternal;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;FromHwnd;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;FromHwndInternal;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;FromImage;(System.Drawing.Image);summary;df-generated | +| System.Drawing;Graphics;GetContextInfo;();summary;df-generated | +| System.Drawing;Graphics;GetContextInfo;(System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;GetContextInfo;(System.Drawing.PointF,System.Drawing.Region);summary;df-generated | +| System.Drawing;Graphics;GetHalftonePalette;();summary;df-generated | +| System.Drawing;Graphics;GetHdc;();summary;df-generated | +| System.Drawing;Graphics;GetNearestColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Graphics;IntersectClip;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;IntersectClip;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;IntersectClip;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Drawing.PointF);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;IsVisible;(System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;MeasureCharacterRanges;(System.String,System.Drawing.Font,System.Drawing.RectangleF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Drawing.PointF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Drawing.SizeF);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Drawing.SizeF,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Drawing.SizeF,System.Drawing.StringFormat,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Int32);summary;df-generated | +| System.Drawing;Graphics;MeasureString;(System.String,System.Drawing.Font,System.Int32,System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;Graphics;MultiplyTransform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Graphics;MultiplyTransform;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Graphics;ReleaseHdc;();summary;df-generated | +| System.Drawing;Graphics;ReleaseHdc;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;ReleaseHdcInternal;(System.IntPtr);summary;df-generated | +| System.Drawing;Graphics;ResetClip;();summary;df-generated | +| System.Drawing;Graphics;ResetTransform;();summary;df-generated | +| System.Drawing;Graphics;Restore;(System.Drawing.Drawing2D.GraphicsState);summary;df-generated | +| System.Drawing;Graphics;RotateTransform;(System.Single);summary;df-generated | +| System.Drawing;Graphics;RotateTransform;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Graphics;Save;();summary;df-generated | +| System.Drawing;Graphics;ScaleTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;ScaleTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Drawing2D.GraphicsPath,System.Drawing.Drawing2D.CombineMode);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Graphics,System.Drawing.Drawing2D.CombineMode);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Rectangle,System.Drawing.Drawing2D.CombineMode);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.RectangleF,System.Drawing.Drawing2D.CombineMode);summary;df-generated | +| System.Drawing;Graphics;SetClip;(System.Drawing.Region,System.Drawing.Drawing2D.CombineMode);summary;df-generated | +| System.Drawing;Graphics;TransformPoints;(System.Drawing.Drawing2D.CoordinateSpace,System.Drawing.Drawing2D.CoordinateSpace,System.Drawing.PointF[]);summary;df-generated | +| System.Drawing;Graphics;TransformPoints;(System.Drawing.Drawing2D.CoordinateSpace,System.Drawing.Drawing2D.CoordinateSpace,System.Drawing.Point[]);summary;df-generated | +| System.Drawing;Graphics;TranslateClip;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Graphics;TranslateClip;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;TranslateTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Graphics;TranslateTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Graphics;get_Clip;();summary;df-generated | +| System.Drawing;Graphics;get_ClipBounds;();summary;df-generated | +| System.Drawing;Graphics;get_CompositingMode;();summary;df-generated | +| System.Drawing;Graphics;get_CompositingQuality;();summary;df-generated | +| System.Drawing;Graphics;get_DpiX;();summary;df-generated | +| System.Drawing;Graphics;get_DpiY;();summary;df-generated | +| System.Drawing;Graphics;get_InterpolationMode;();summary;df-generated | +| System.Drawing;Graphics;get_IsClipEmpty;();summary;df-generated | +| System.Drawing;Graphics;get_IsVisibleClipEmpty;();summary;df-generated | +| System.Drawing;Graphics;get_PageScale;();summary;df-generated | +| System.Drawing;Graphics;get_PageUnit;();summary;df-generated | +| System.Drawing;Graphics;get_PixelOffsetMode;();summary;df-generated | +| System.Drawing;Graphics;get_RenderingOrigin;();summary;df-generated | +| System.Drawing;Graphics;get_SmoothingMode;();summary;df-generated | +| System.Drawing;Graphics;get_TextContrast;();summary;df-generated | +| System.Drawing;Graphics;get_TextRenderingHint;();summary;df-generated | +| System.Drawing;Graphics;get_Transform;();summary;df-generated | +| System.Drawing;Graphics;get_TransformElements;();summary;df-generated | +| System.Drawing;Graphics;get_VisibleClipBounds;();summary;df-generated | +| System.Drawing;Graphics;set_Clip;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Graphics;set_CompositingMode;(System.Drawing.Drawing2D.CompositingMode);summary;df-generated | +| System.Drawing;Graphics;set_CompositingQuality;(System.Drawing.Drawing2D.CompositingQuality);summary;df-generated | +| System.Drawing;Graphics;set_InterpolationMode;(System.Drawing.Drawing2D.InterpolationMode);summary;df-generated | +| System.Drawing;Graphics;set_PageScale;(System.Single);summary;df-generated | +| System.Drawing;Graphics;set_PageUnit;(System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Graphics;set_PixelOffsetMode;(System.Drawing.Drawing2D.PixelOffsetMode);summary;df-generated | +| System.Drawing;Graphics;set_RenderingOrigin;(System.Drawing.Point);summary;df-generated | +| System.Drawing;Graphics;set_SmoothingMode;(System.Drawing.Drawing2D.SmoothingMode);summary;df-generated | +| System.Drawing;Graphics;set_TextContrast;(System.Int32);summary;df-generated | +| System.Drawing;Graphics;set_TextRenderingHint;(System.Drawing.Text.TextRenderingHint);summary;df-generated | +| System.Drawing;Graphics;set_Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Graphics;set_TransformElements;(System.Numerics.Matrix3x2);summary;df-generated | +| System.Drawing;IDeviceContext;GetHdc;();summary;df-generated | +| System.Drawing;IDeviceContext;ReleaseHdc;();summary;df-generated | +| System.Drawing;Icon;Clone;();summary;df-generated | +| System.Drawing;Icon;Dispose;();summary;df-generated | +| System.Drawing;Icon;ExtractAssociatedIcon;(System.String);summary;df-generated | +| System.Drawing;Icon;FromHandle;(System.IntPtr);summary;df-generated | +| System.Drawing;Icon;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Drawing;Icon;Icon;(System.Drawing.Icon,System.Drawing.Size);summary;df-generated | +| System.Drawing;Icon;Icon;(System.Drawing.Icon,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Icon;Icon;(System.IO.Stream);summary;df-generated | +| System.Drawing;Icon;Icon;(System.IO.Stream,System.Drawing.Size);summary;df-generated | +| System.Drawing;Icon;Icon;(System.IO.Stream,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Icon;Icon;(System.String);summary;df-generated | +| System.Drawing;Icon;Icon;(System.String,System.Drawing.Size);summary;df-generated | +| System.Drawing;Icon;Icon;(System.String,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Icon;Icon;(System.Type,System.String);summary;df-generated | +| System.Drawing;Icon;Save;(System.IO.Stream);summary;df-generated | +| System.Drawing;Icon;ToBitmap;();summary;df-generated | +| System.Drawing;Icon;ToString;();summary;df-generated | +| System.Drawing;Icon;get_Handle;();summary;df-generated | +| System.Drawing;Icon;get_Height;();summary;df-generated | +| System.Drawing;Icon;get_Size;();summary;df-generated | +| System.Drawing;Icon;get_Width;();summary;df-generated | +| System.Drawing;IconConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;IconConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;IconConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing;IconConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Drawing;Image;Clone;();summary;df-generated | +| System.Drawing;Image;Dispose;();summary;df-generated | +| System.Drawing;Image;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing;Image;FromFile;(System.String);summary;df-generated | +| System.Drawing;Image;FromFile;(System.String,System.Boolean);summary;df-generated | +| System.Drawing;Image;FromHbitmap;(System.IntPtr);summary;df-generated | +| System.Drawing;Image;FromHbitmap;(System.IntPtr,System.IntPtr);summary;df-generated | +| System.Drawing;Image;FromStream;(System.IO.Stream);summary;df-generated | +| System.Drawing;Image;FromStream;(System.IO.Stream,System.Boolean);summary;df-generated | +| System.Drawing;Image;FromStream;(System.IO.Stream,System.Boolean,System.Boolean);summary;df-generated | +| System.Drawing;Image;GetBounds;(System.Drawing.GraphicsUnit);summary;df-generated | +| System.Drawing;Image;GetEncoderParameterList;(System.Guid);summary;df-generated | +| System.Drawing;Image;GetFrameCount;(System.Drawing.Imaging.FrameDimension);summary;df-generated | +| System.Drawing;Image;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Drawing;Image;GetPixelFormatSize;(System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Image;GetPropertyItem;(System.Int32);summary;df-generated | +| System.Drawing;Image;IsAlphaPixelFormat;(System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Image;IsCanonicalPixelFormat;(System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Image;IsExtendedPixelFormat;(System.Drawing.Imaging.PixelFormat);summary;df-generated | +| System.Drawing;Image;RemovePropertyItem;(System.Int32);summary;df-generated | +| System.Drawing;Image;RotateFlip;(System.Drawing.RotateFlipType);summary;df-generated | +| System.Drawing;Image;Save;(System.IO.Stream,System.Drawing.Imaging.ImageCodecInfo,System.Drawing.Imaging.EncoderParameters);summary;df-generated | +| System.Drawing;Image;Save;(System.IO.Stream,System.Drawing.Imaging.ImageFormat);summary;df-generated | +| System.Drawing;Image;Save;(System.String);summary;df-generated | +| System.Drawing;Image;Save;(System.String,System.Drawing.Imaging.ImageCodecInfo,System.Drawing.Imaging.EncoderParameters);summary;df-generated | +| System.Drawing;Image;Save;(System.String,System.Drawing.Imaging.ImageFormat);summary;df-generated | +| System.Drawing;Image;SaveAdd;(System.Drawing.Image,System.Drawing.Imaging.EncoderParameters);summary;df-generated | +| System.Drawing;Image;SaveAdd;(System.Drawing.Imaging.EncoderParameters);summary;df-generated | +| System.Drawing;Image;SelectActiveFrame;(System.Drawing.Imaging.FrameDimension,System.Int32);summary;df-generated | +| System.Drawing;Image;SetPropertyItem;(System.Drawing.Imaging.PropertyItem);summary;df-generated | +| System.Drawing;Image;get_Flags;();summary;df-generated | +| System.Drawing;Image;get_FrameDimensionsList;();summary;df-generated | +| System.Drawing;Image;get_Height;();summary;df-generated | +| System.Drawing;Image;get_HorizontalResolution;();summary;df-generated | +| System.Drawing;Image;get_Palette;();summary;df-generated | +| System.Drawing;Image;get_PhysicalDimension;();summary;df-generated | +| System.Drawing;Image;get_PixelFormat;();summary;df-generated | +| System.Drawing;Image;get_PropertyIdList;();summary;df-generated | +| System.Drawing;Image;get_PropertyItems;();summary;df-generated | +| System.Drawing;Image;get_RawFormat;();summary;df-generated | +| System.Drawing;Image;get_Size;();summary;df-generated | +| System.Drawing;Image;get_Tag;();summary;df-generated | +| System.Drawing;Image;get_VerticalResolution;();summary;df-generated | +| System.Drawing;Image;get_Width;();summary;df-generated | +| System.Drawing;Image;set_Palette;(System.Drawing.Imaging.ColorPalette);summary;df-generated | +| System.Drawing;Image;set_Tag;(System.Object);summary;df-generated | +| System.Drawing;ImageAnimator;CanAnimate;(System.Drawing.Image);summary;df-generated | +| System.Drawing;ImageAnimator;UpdateFrames;();summary;df-generated | +| System.Drawing;ImageAnimator;UpdateFrames;(System.Drawing.Image);summary;df-generated | +| System.Drawing;ImageConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing;ImageConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Drawing;ImageConverter;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);summary;df-generated | +| System.Drawing;ImageConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;ImageFormatConverter;CanConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageFormatConverter;CanConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Type);summary;df-generated | +| System.Drawing;ImageFormatConverter;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);summary;df-generated | +| System.Drawing;ImageFormatConverter;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);summary;df-generated | +| System.Drawing;ImageFormatConverter;GetStandardValues;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;ImageFormatConverter;GetStandardValuesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;Pen;Clone;();summary;df-generated | +| System.Drawing;Pen;Dispose;();summary;df-generated | +| System.Drawing;Pen;MultiplyTransform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Pen;MultiplyTransform;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Pen;Pen;(System.Drawing.Brush);summary;df-generated | +| System.Drawing;Pen;Pen;(System.Drawing.Brush,System.Single);summary;df-generated | +| System.Drawing;Pen;Pen;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Pen;Pen;(System.Drawing.Color,System.Single);summary;df-generated | +| System.Drawing;Pen;ResetTransform;();summary;df-generated | +| System.Drawing;Pen;RotateTransform;(System.Single);summary;df-generated | +| System.Drawing;Pen;RotateTransform;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Pen;ScaleTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Pen;ScaleTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Pen;SetLineCap;(System.Drawing.Drawing2D.LineCap,System.Drawing.Drawing2D.LineCap,System.Drawing.Drawing2D.DashCap);summary;df-generated | +| System.Drawing;Pen;TranslateTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Pen;TranslateTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;Pen;get_Alignment;();summary;df-generated | +| System.Drawing;Pen;get_Brush;();summary;df-generated | +| System.Drawing;Pen;get_Color;();summary;df-generated | +| System.Drawing;Pen;get_CompoundArray;();summary;df-generated | +| System.Drawing;Pen;get_CustomEndCap;();summary;df-generated | +| System.Drawing;Pen;get_CustomStartCap;();summary;df-generated | +| System.Drawing;Pen;get_DashCap;();summary;df-generated | +| System.Drawing;Pen;get_DashOffset;();summary;df-generated | +| System.Drawing;Pen;get_DashPattern;();summary;df-generated | +| System.Drawing;Pen;get_DashStyle;();summary;df-generated | +| System.Drawing;Pen;get_EndCap;();summary;df-generated | +| System.Drawing;Pen;get_LineJoin;();summary;df-generated | +| System.Drawing;Pen;get_MiterLimit;();summary;df-generated | +| System.Drawing;Pen;get_PenType;();summary;df-generated | +| System.Drawing;Pen;get_StartCap;();summary;df-generated | +| System.Drawing;Pen;get_Transform;();summary;df-generated | +| System.Drawing;Pen;get_Width;();summary;df-generated | +| System.Drawing;Pen;set_Alignment;(System.Drawing.Drawing2D.PenAlignment);summary;df-generated | +| System.Drawing;Pen;set_Brush;(System.Drawing.Brush);summary;df-generated | +| System.Drawing;Pen;set_Color;(System.Drawing.Color);summary;df-generated | +| System.Drawing;Pen;set_CompoundArray;(System.Single[]);summary;df-generated | +| System.Drawing;Pen;set_CustomEndCap;(System.Drawing.Drawing2D.CustomLineCap);summary;df-generated | +| System.Drawing;Pen;set_CustomStartCap;(System.Drawing.Drawing2D.CustomLineCap);summary;df-generated | +| System.Drawing;Pen;set_DashCap;(System.Drawing.Drawing2D.DashCap);summary;df-generated | +| System.Drawing;Pen;set_DashOffset;(System.Single);summary;df-generated | +| System.Drawing;Pen;set_DashPattern;(System.Single[]);summary;df-generated | +| System.Drawing;Pen;set_DashStyle;(System.Drawing.Drawing2D.DashStyle);summary;df-generated | +| System.Drawing;Pen;set_EndCap;(System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing;Pen;set_LineJoin;(System.Drawing.Drawing2D.LineJoin);summary;df-generated | +| System.Drawing;Pen;set_MiterLimit;(System.Single);summary;df-generated | +| System.Drawing;Pen;set_StartCap;(System.Drawing.Drawing2D.LineCap);summary;df-generated | +| System.Drawing;Pen;set_Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Pen;set_Width;(System.Single);summary;df-generated | +| System.Drawing;Pens;get_AliceBlue;();summary;df-generated | +| System.Drawing;Pens;get_AntiqueWhite;();summary;df-generated | +| System.Drawing;Pens;get_Aqua;();summary;df-generated | +| System.Drawing;Pens;get_Aquamarine;();summary;df-generated | +| System.Drawing;Pens;get_Azure;();summary;df-generated | +| System.Drawing;Pens;get_Beige;();summary;df-generated | +| System.Drawing;Pens;get_Bisque;();summary;df-generated | +| System.Drawing;Pens;get_Black;();summary;df-generated | +| System.Drawing;Pens;get_BlanchedAlmond;();summary;df-generated | +| System.Drawing;Pens;get_Blue;();summary;df-generated | +| System.Drawing;Pens;get_BlueViolet;();summary;df-generated | +| System.Drawing;Pens;get_Brown;();summary;df-generated | +| System.Drawing;Pens;get_BurlyWood;();summary;df-generated | +| System.Drawing;Pens;get_CadetBlue;();summary;df-generated | +| System.Drawing;Pens;get_Chartreuse;();summary;df-generated | +| System.Drawing;Pens;get_Chocolate;();summary;df-generated | +| System.Drawing;Pens;get_Coral;();summary;df-generated | +| System.Drawing;Pens;get_CornflowerBlue;();summary;df-generated | +| System.Drawing;Pens;get_Cornsilk;();summary;df-generated | +| System.Drawing;Pens;get_Crimson;();summary;df-generated | +| System.Drawing;Pens;get_Cyan;();summary;df-generated | +| System.Drawing;Pens;get_DarkBlue;();summary;df-generated | +| System.Drawing;Pens;get_DarkCyan;();summary;df-generated | +| System.Drawing;Pens;get_DarkGoldenrod;();summary;df-generated | +| System.Drawing;Pens;get_DarkGray;();summary;df-generated | +| System.Drawing;Pens;get_DarkGreen;();summary;df-generated | +| System.Drawing;Pens;get_DarkKhaki;();summary;df-generated | +| System.Drawing;Pens;get_DarkMagenta;();summary;df-generated | +| System.Drawing;Pens;get_DarkOliveGreen;();summary;df-generated | +| System.Drawing;Pens;get_DarkOrange;();summary;df-generated | +| System.Drawing;Pens;get_DarkOrchid;();summary;df-generated | +| System.Drawing;Pens;get_DarkRed;();summary;df-generated | +| System.Drawing;Pens;get_DarkSalmon;();summary;df-generated | +| System.Drawing;Pens;get_DarkSeaGreen;();summary;df-generated | +| System.Drawing;Pens;get_DarkSlateBlue;();summary;df-generated | +| System.Drawing;Pens;get_DarkSlateGray;();summary;df-generated | +| System.Drawing;Pens;get_DarkTurquoise;();summary;df-generated | +| System.Drawing;Pens;get_DarkViolet;();summary;df-generated | +| System.Drawing;Pens;get_DeepPink;();summary;df-generated | +| System.Drawing;Pens;get_DeepSkyBlue;();summary;df-generated | +| System.Drawing;Pens;get_DimGray;();summary;df-generated | +| System.Drawing;Pens;get_DodgerBlue;();summary;df-generated | +| System.Drawing;Pens;get_Firebrick;();summary;df-generated | +| System.Drawing;Pens;get_FloralWhite;();summary;df-generated | +| System.Drawing;Pens;get_ForestGreen;();summary;df-generated | +| System.Drawing;Pens;get_Fuchsia;();summary;df-generated | +| System.Drawing;Pens;get_Gainsboro;();summary;df-generated | +| System.Drawing;Pens;get_GhostWhite;();summary;df-generated | +| System.Drawing;Pens;get_Gold;();summary;df-generated | +| System.Drawing;Pens;get_Goldenrod;();summary;df-generated | +| System.Drawing;Pens;get_Gray;();summary;df-generated | +| System.Drawing;Pens;get_Green;();summary;df-generated | +| System.Drawing;Pens;get_GreenYellow;();summary;df-generated | +| System.Drawing;Pens;get_Honeydew;();summary;df-generated | +| System.Drawing;Pens;get_HotPink;();summary;df-generated | +| System.Drawing;Pens;get_IndianRed;();summary;df-generated | +| System.Drawing;Pens;get_Indigo;();summary;df-generated | +| System.Drawing;Pens;get_Ivory;();summary;df-generated | +| System.Drawing;Pens;get_Khaki;();summary;df-generated | +| System.Drawing;Pens;get_Lavender;();summary;df-generated | +| System.Drawing;Pens;get_LavenderBlush;();summary;df-generated | +| System.Drawing;Pens;get_LawnGreen;();summary;df-generated | +| System.Drawing;Pens;get_LemonChiffon;();summary;df-generated | +| System.Drawing;Pens;get_LightBlue;();summary;df-generated | +| System.Drawing;Pens;get_LightCoral;();summary;df-generated | +| System.Drawing;Pens;get_LightCyan;();summary;df-generated | +| System.Drawing;Pens;get_LightGoldenrodYellow;();summary;df-generated | +| System.Drawing;Pens;get_LightGray;();summary;df-generated | +| System.Drawing;Pens;get_LightGreen;();summary;df-generated | +| System.Drawing;Pens;get_LightPink;();summary;df-generated | +| System.Drawing;Pens;get_LightSalmon;();summary;df-generated | +| System.Drawing;Pens;get_LightSeaGreen;();summary;df-generated | +| System.Drawing;Pens;get_LightSkyBlue;();summary;df-generated | +| System.Drawing;Pens;get_LightSlateGray;();summary;df-generated | +| System.Drawing;Pens;get_LightSteelBlue;();summary;df-generated | +| System.Drawing;Pens;get_LightYellow;();summary;df-generated | +| System.Drawing;Pens;get_Lime;();summary;df-generated | +| System.Drawing;Pens;get_LimeGreen;();summary;df-generated | +| System.Drawing;Pens;get_Linen;();summary;df-generated | +| System.Drawing;Pens;get_Magenta;();summary;df-generated | +| System.Drawing;Pens;get_Maroon;();summary;df-generated | +| System.Drawing;Pens;get_MediumAquamarine;();summary;df-generated | +| System.Drawing;Pens;get_MediumBlue;();summary;df-generated | +| System.Drawing;Pens;get_MediumOrchid;();summary;df-generated | +| System.Drawing;Pens;get_MediumPurple;();summary;df-generated | +| System.Drawing;Pens;get_MediumSeaGreen;();summary;df-generated | +| System.Drawing;Pens;get_MediumSlateBlue;();summary;df-generated | +| System.Drawing;Pens;get_MediumSpringGreen;();summary;df-generated | +| System.Drawing;Pens;get_MediumTurquoise;();summary;df-generated | +| System.Drawing;Pens;get_MediumVioletRed;();summary;df-generated | +| System.Drawing;Pens;get_MidnightBlue;();summary;df-generated | +| System.Drawing;Pens;get_MintCream;();summary;df-generated | +| System.Drawing;Pens;get_MistyRose;();summary;df-generated | +| System.Drawing;Pens;get_Moccasin;();summary;df-generated | +| System.Drawing;Pens;get_NavajoWhite;();summary;df-generated | +| System.Drawing;Pens;get_Navy;();summary;df-generated | +| System.Drawing;Pens;get_OldLace;();summary;df-generated | +| System.Drawing;Pens;get_Olive;();summary;df-generated | +| System.Drawing;Pens;get_OliveDrab;();summary;df-generated | +| System.Drawing;Pens;get_Orange;();summary;df-generated | +| System.Drawing;Pens;get_OrangeRed;();summary;df-generated | +| System.Drawing;Pens;get_Orchid;();summary;df-generated | +| System.Drawing;Pens;get_PaleGoldenrod;();summary;df-generated | +| System.Drawing;Pens;get_PaleGreen;();summary;df-generated | +| System.Drawing;Pens;get_PaleTurquoise;();summary;df-generated | +| System.Drawing;Pens;get_PaleVioletRed;();summary;df-generated | +| System.Drawing;Pens;get_PapayaWhip;();summary;df-generated | +| System.Drawing;Pens;get_PeachPuff;();summary;df-generated | +| System.Drawing;Pens;get_Peru;();summary;df-generated | +| System.Drawing;Pens;get_Pink;();summary;df-generated | +| System.Drawing;Pens;get_Plum;();summary;df-generated | +| System.Drawing;Pens;get_PowderBlue;();summary;df-generated | +| System.Drawing;Pens;get_Purple;();summary;df-generated | +| System.Drawing;Pens;get_Red;();summary;df-generated | +| System.Drawing;Pens;get_RosyBrown;();summary;df-generated | +| System.Drawing;Pens;get_RoyalBlue;();summary;df-generated | +| System.Drawing;Pens;get_SaddleBrown;();summary;df-generated | +| System.Drawing;Pens;get_Salmon;();summary;df-generated | +| System.Drawing;Pens;get_SandyBrown;();summary;df-generated | +| System.Drawing;Pens;get_SeaGreen;();summary;df-generated | +| System.Drawing;Pens;get_SeaShell;();summary;df-generated | +| System.Drawing;Pens;get_Sienna;();summary;df-generated | +| System.Drawing;Pens;get_Silver;();summary;df-generated | +| System.Drawing;Pens;get_SkyBlue;();summary;df-generated | +| System.Drawing;Pens;get_SlateBlue;();summary;df-generated | +| System.Drawing;Pens;get_SlateGray;();summary;df-generated | +| System.Drawing;Pens;get_Snow;();summary;df-generated | +| System.Drawing;Pens;get_SpringGreen;();summary;df-generated | +| System.Drawing;Pens;get_SteelBlue;();summary;df-generated | +| System.Drawing;Pens;get_Tan;();summary;df-generated | +| System.Drawing;Pens;get_Teal;();summary;df-generated | +| System.Drawing;Pens;get_Thistle;();summary;df-generated | +| System.Drawing;Pens;get_Tomato;();summary;df-generated | +| System.Drawing;Pens;get_Transparent;();summary;df-generated | +| System.Drawing;Pens;get_Turquoise;();summary;df-generated | +| System.Drawing;Pens;get_Violet;();summary;df-generated | +| System.Drawing;Pens;get_Wheat;();summary;df-generated | +| System.Drawing;Pens;get_White;();summary;df-generated | +| System.Drawing;Pens;get_WhiteSmoke;();summary;df-generated | +| System.Drawing;Pens;get_Yellow;();summary;df-generated | +| System.Drawing;Pens;get_YellowGreen;();summary;df-generated | | System.Drawing;Point;Add;(System.Drawing.Point,System.Drawing.Size);summary;df-generated | | System.Drawing;Point;Ceiling;(System.Drawing.PointF);summary;df-generated | | System.Drawing;Point;Equals;(System.Drawing.Point);summary;df-generated | @@ -25326,6 +29555,61 @@ neutral | System.Drawing;RectangleF;set_Width;(System.Single);summary;df-generated | | System.Drawing;RectangleF;set_X;(System.Single);summary;df-generated | | System.Drawing;RectangleF;set_Y;(System.Single);summary;df-generated | +| System.Drawing;Region;Clone;();summary;df-generated | +| System.Drawing;Region;Complement;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Complement;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Complement;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Complement;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Region;Dispose;();summary;df-generated | +| System.Drawing;Region;Equals;(System.Drawing.Region,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;Exclude;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Exclude;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Exclude;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Exclude;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Region;FromHrgn;(System.IntPtr);summary;df-generated | +| System.Drawing;Region;GetBounds;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;GetHrgn;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;GetRegionData;();summary;df-generated | +| System.Drawing;Region;GetRegionScans;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Region;Intersect;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Intersect;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Intersect;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Intersect;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Region;IsEmpty;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsInfinite;(System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.Point);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.Point,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.PointF);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.PointF,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.Rectangle,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Drawing.RectangleF,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Int32,System.Int32,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Int32,System.Int32,System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Single,System.Single,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Single,System.Single,System.Single,System.Single);summary;df-generated | +| System.Drawing;Region;IsVisible;(System.Single,System.Single,System.Single,System.Single,System.Drawing.Graphics);summary;df-generated | +| System.Drawing;Region;MakeEmpty;();summary;df-generated | +| System.Drawing;Region;MakeInfinite;();summary;df-generated | +| System.Drawing;Region;Region;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Region;(System.Drawing.Drawing2D.RegionData);summary;df-generated | +| System.Drawing;Region;Region;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Region;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;ReleaseHrgn;(System.IntPtr);summary;df-generated | +| System.Drawing;Region;Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;Region;Translate;(System.Int32,System.Int32);summary;df-generated | +| System.Drawing;Region;Translate;(System.Single,System.Single);summary;df-generated | +| System.Drawing;Region;Union;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Union;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Union;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Union;(System.Drawing.Region);summary;df-generated | +| System.Drawing;Region;Xor;(System.Drawing.Drawing2D.GraphicsPath);summary;df-generated | +| System.Drawing;Region;Xor;(System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;Region;Xor;(System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;Region;Xor;(System.Drawing.Region);summary;df-generated | | System.Drawing;Size;Add;(System.Drawing.Size,System.Drawing.Size);summary;df-generated | | System.Drawing;Size;Ceiling;(System.Drawing.SizeF);summary;df-generated | | System.Drawing;Size;Equals;(System.Drawing.Size);summary;df-generated | @@ -25391,6 +29675,69 @@ neutral | System.Drawing;SizeFConverter;GetCreateInstanceSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | | System.Drawing;SizeFConverter;GetProperties;(System.ComponentModel.ITypeDescriptorContext,System.Object,System.Attribute[]);summary;df-generated | | System.Drawing;SizeFConverter;GetPropertiesSupported;(System.ComponentModel.ITypeDescriptorContext);summary;df-generated | +| System.Drawing;SolidBrush;Clone;();summary;df-generated | +| System.Drawing;SolidBrush;Dispose;(System.Boolean);summary;df-generated | +| System.Drawing;SolidBrush;SolidBrush;(System.Drawing.Color);summary;df-generated | +| System.Drawing;SolidBrush;get_Color;();summary;df-generated | +| System.Drawing;SolidBrush;set_Color;(System.Drawing.Color);summary;df-generated | +| System.Drawing;StringFormat;Clone;();summary;df-generated | +| System.Drawing;StringFormat;Dispose;();summary;df-generated | +| System.Drawing;StringFormat;GetTabStops;(System.Single);summary;df-generated | +| System.Drawing;StringFormat;SetDigitSubstitution;(System.Int32,System.Drawing.StringDigitSubstitute);summary;df-generated | +| System.Drawing;StringFormat;SetMeasurableCharacterRanges;(System.Drawing.CharacterRange[]);summary;df-generated | +| System.Drawing;StringFormat;SetTabStops;(System.Single,System.Single[]);summary;df-generated | +| System.Drawing;StringFormat;StringFormat;(System.Drawing.StringFormat);summary;df-generated | +| System.Drawing;StringFormat;StringFormat;(System.Drawing.StringFormatFlags);summary;df-generated | +| System.Drawing;StringFormat;StringFormat;(System.Drawing.StringFormatFlags,System.Int32);summary;df-generated | +| System.Drawing;StringFormat;ToString;();summary;df-generated | +| System.Drawing;StringFormat;get_Alignment;();summary;df-generated | +| System.Drawing;StringFormat;get_DigitSubstitutionLanguage;();summary;df-generated | +| System.Drawing;StringFormat;get_DigitSubstitutionMethod;();summary;df-generated | +| System.Drawing;StringFormat;get_FormatFlags;();summary;df-generated | +| System.Drawing;StringFormat;get_GenericDefault;();summary;df-generated | +| System.Drawing;StringFormat;get_GenericTypographic;();summary;df-generated | +| System.Drawing;StringFormat;get_HotkeyPrefix;();summary;df-generated | +| System.Drawing;StringFormat;get_LineAlignment;();summary;df-generated | +| System.Drawing;StringFormat;get_Trimming;();summary;df-generated | +| System.Drawing;StringFormat;set_Alignment;(System.Drawing.StringAlignment);summary;df-generated | +| System.Drawing;StringFormat;set_FormatFlags;(System.Drawing.StringFormatFlags);summary;df-generated | +| System.Drawing;StringFormat;set_HotkeyPrefix;(System.Drawing.Text.HotkeyPrefix);summary;df-generated | +| System.Drawing;StringFormat;set_LineAlignment;(System.Drawing.StringAlignment);summary;df-generated | +| System.Drawing;StringFormat;set_Trimming;(System.Drawing.StringTrimming);summary;df-generated | +| System.Drawing;SystemBrushes;FromSystemColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing;SystemBrushes;get_ActiveBorder;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ActiveCaption;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ActiveCaptionText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_AppWorkspace;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ButtonFace;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ButtonHighlight;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ButtonShadow;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Control;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ControlDark;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ControlDarkDark;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ControlLight;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ControlLightLight;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ControlText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Desktop;();summary;df-generated | +| System.Drawing;SystemBrushes;get_GradientActiveCaption;();summary;df-generated | +| System.Drawing;SystemBrushes;get_GradientInactiveCaption;();summary;df-generated | +| System.Drawing;SystemBrushes;get_GrayText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Highlight;();summary;df-generated | +| System.Drawing;SystemBrushes;get_HighlightText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_HotTrack;();summary;df-generated | +| System.Drawing;SystemBrushes;get_InactiveBorder;();summary;df-generated | +| System.Drawing;SystemBrushes;get_InactiveCaption;();summary;df-generated | +| System.Drawing;SystemBrushes;get_InactiveCaptionText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Info;();summary;df-generated | +| System.Drawing;SystemBrushes;get_InfoText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Menu;();summary;df-generated | +| System.Drawing;SystemBrushes;get_MenuBar;();summary;df-generated | +| System.Drawing;SystemBrushes;get_MenuHighlight;();summary;df-generated | +| System.Drawing;SystemBrushes;get_MenuText;();summary;df-generated | +| System.Drawing;SystemBrushes;get_ScrollBar;();summary;df-generated | +| System.Drawing;SystemBrushes;get_Window;();summary;df-generated | +| System.Drawing;SystemBrushes;get_WindowFrame;();summary;df-generated | +| System.Drawing;SystemBrushes;get_WindowText;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveBorder;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveCaption;();summary;df-generated | | System.Drawing;SystemColors;get_ActiveCaptionText;();summary;df-generated | @@ -25424,6 +29771,93 @@ neutral | System.Drawing;SystemColors;get_Window;();summary;df-generated | | System.Drawing;SystemColors;get_WindowFrame;();summary;df-generated | | System.Drawing;SystemColors;get_WindowText;();summary;df-generated | +| System.Drawing;SystemFonts;GetFontByName;(System.String);summary;df-generated | +| System.Drawing;SystemFonts;get_CaptionFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_DefaultFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_DialogFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_IconTitleFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_MenuFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_MessageBoxFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_SmallCaptionFont;();summary;df-generated | +| System.Drawing;SystemFonts;get_StatusFont;();summary;df-generated | +| System.Drawing;SystemIcons;get_Application;();summary;df-generated | +| System.Drawing;SystemIcons;get_Asterisk;();summary;df-generated | +| System.Drawing;SystemIcons;get_Error;();summary;df-generated | +| System.Drawing;SystemIcons;get_Exclamation;();summary;df-generated | +| System.Drawing;SystemIcons;get_Hand;();summary;df-generated | +| System.Drawing;SystemIcons;get_Information;();summary;df-generated | +| System.Drawing;SystemIcons;get_Question;();summary;df-generated | +| System.Drawing;SystemIcons;get_Shield;();summary;df-generated | +| System.Drawing;SystemIcons;get_Warning;();summary;df-generated | +| System.Drawing;SystemIcons;get_WinLogo;();summary;df-generated | +| System.Drawing;SystemPens;FromSystemColor;(System.Drawing.Color);summary;df-generated | +| System.Drawing;SystemPens;get_ActiveBorder;();summary;df-generated | +| System.Drawing;SystemPens;get_ActiveCaption;();summary;df-generated | +| System.Drawing;SystemPens;get_ActiveCaptionText;();summary;df-generated | +| System.Drawing;SystemPens;get_AppWorkspace;();summary;df-generated | +| System.Drawing;SystemPens;get_ButtonFace;();summary;df-generated | +| System.Drawing;SystemPens;get_ButtonHighlight;();summary;df-generated | +| System.Drawing;SystemPens;get_ButtonShadow;();summary;df-generated | +| System.Drawing;SystemPens;get_Control;();summary;df-generated | +| System.Drawing;SystemPens;get_ControlDark;();summary;df-generated | +| System.Drawing;SystemPens;get_ControlDarkDark;();summary;df-generated | +| System.Drawing;SystemPens;get_ControlLight;();summary;df-generated | +| System.Drawing;SystemPens;get_ControlLightLight;();summary;df-generated | +| System.Drawing;SystemPens;get_ControlText;();summary;df-generated | +| System.Drawing;SystemPens;get_Desktop;();summary;df-generated | +| System.Drawing;SystemPens;get_GradientActiveCaption;();summary;df-generated | +| System.Drawing;SystemPens;get_GradientInactiveCaption;();summary;df-generated | +| System.Drawing;SystemPens;get_GrayText;();summary;df-generated | +| System.Drawing;SystemPens;get_Highlight;();summary;df-generated | +| System.Drawing;SystemPens;get_HighlightText;();summary;df-generated | +| System.Drawing;SystemPens;get_HotTrack;();summary;df-generated | +| System.Drawing;SystemPens;get_InactiveBorder;();summary;df-generated | +| System.Drawing;SystemPens;get_InactiveCaption;();summary;df-generated | +| System.Drawing;SystemPens;get_InactiveCaptionText;();summary;df-generated | +| System.Drawing;SystemPens;get_Info;();summary;df-generated | +| System.Drawing;SystemPens;get_InfoText;();summary;df-generated | +| System.Drawing;SystemPens;get_Menu;();summary;df-generated | +| System.Drawing;SystemPens;get_MenuBar;();summary;df-generated | +| System.Drawing;SystemPens;get_MenuHighlight;();summary;df-generated | +| System.Drawing;SystemPens;get_MenuText;();summary;df-generated | +| System.Drawing;SystemPens;get_ScrollBar;();summary;df-generated | +| System.Drawing;SystemPens;get_Window;();summary;df-generated | +| System.Drawing;SystemPens;get_WindowFrame;();summary;df-generated | +| System.Drawing;SystemPens;get_WindowText;();summary;df-generated | +| System.Drawing;TextureBrush;Clone;();summary;df-generated | +| System.Drawing;TextureBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;TextureBrush;MultiplyTransform;(System.Drawing.Drawing2D.Matrix,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;TextureBrush;ResetTransform;();summary;df-generated | +| System.Drawing;TextureBrush;RotateTransform;(System.Single);summary;df-generated | +| System.Drawing;TextureBrush;RotateTransform;(System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;TextureBrush;ScaleTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;TextureBrush;ScaleTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.Drawing2D.WrapMode,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.Drawing2D.WrapMode,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.Rectangle);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.Rectangle,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.RectangleF);summary;df-generated | +| System.Drawing;TextureBrush;TextureBrush;(System.Drawing.Image,System.Drawing.RectangleF,System.Drawing.Imaging.ImageAttributes);summary;df-generated | +| System.Drawing;TextureBrush;TranslateTransform;(System.Single,System.Single);summary;df-generated | +| System.Drawing;TextureBrush;TranslateTransform;(System.Single,System.Single,System.Drawing.Drawing2D.MatrixOrder);summary;df-generated | +| System.Drawing;TextureBrush;get_Image;();summary;df-generated | +| System.Drawing;TextureBrush;get_Transform;();summary;df-generated | +| System.Drawing;TextureBrush;get_WrapMode;();summary;df-generated | +| System.Drawing;TextureBrush;set_Transform;(System.Drawing.Drawing2D.Matrix);summary;df-generated | +| System.Drawing;TextureBrush;set_WrapMode;(System.Drawing.Drawing2D.WrapMode);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;Equals;(System.Object);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetHashCode;();summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImage;(System.Object);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImage;(System.Object,System.Boolean);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImage;(System.Type);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImage;(System.Type,System.Boolean);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImage;(System.Type,System.String,System.Boolean);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;GetImageFromResource;(System.Type,System.String,System.Boolean);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;ToolboxBitmapAttribute;(System.String);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;ToolboxBitmapAttribute;(System.Type);summary;df-generated | +| System.Drawing;ToolboxBitmapAttribute;ToolboxBitmapAttribute;(System.Type,System.String);summary;df-generated | | System.Dynamic;BinaryOperationBinder;BinaryOperationBinder;(System.Linq.Expressions.ExpressionType);summary;df-generated | | System.Dynamic;BinaryOperationBinder;Bind;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[]);summary;df-generated | | System.Dynamic;BinaryOperationBinder;FallbackBinaryOperation;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject);summary;df-generated | @@ -27830,6 +32264,34 @@ neutral | System.Linq;Queryable;UnionBy;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>,System.Collections.Generic.IEqualityComparer);summary;df-generated | | System.Linq;Queryable;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);summary;df-generated | | System.Linq;Queryable;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Media;SoundPlayer;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Media;SoundPlayer;Load;();summary;df-generated | +| System.Media;SoundPlayer;LoadAsync;();summary;df-generated | +| System.Media;SoundPlayer;OnLoadCompleted;(System.ComponentModel.AsyncCompletedEventArgs);summary;df-generated | +| System.Media;SoundPlayer;OnSoundLocationChanged;(System.EventArgs);summary;df-generated | +| System.Media;SoundPlayer;OnStreamChanged;(System.EventArgs);summary;df-generated | +| System.Media;SoundPlayer;Play;();summary;df-generated | +| System.Media;SoundPlayer;PlayLooping;();summary;df-generated | +| System.Media;SoundPlayer;PlaySync;();summary;df-generated | +| System.Media;SoundPlayer;SoundPlayer;(System.IO.Stream);summary;df-generated | +| System.Media;SoundPlayer;SoundPlayer;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Media;SoundPlayer;SoundPlayer;(System.String);summary;df-generated | +| System.Media;SoundPlayer;Stop;();summary;df-generated | +| System.Media;SoundPlayer;get_IsLoadCompleted;();summary;df-generated | +| System.Media;SoundPlayer;get_LoadTimeout;();summary;df-generated | +| System.Media;SoundPlayer;get_SoundLocation;();summary;df-generated | +| System.Media;SoundPlayer;get_Stream;();summary;df-generated | +| System.Media;SoundPlayer;get_Tag;();summary;df-generated | +| System.Media;SoundPlayer;set_LoadTimeout;(System.Int32);summary;df-generated | +| System.Media;SoundPlayer;set_SoundLocation;(System.String);summary;df-generated | +| System.Media;SoundPlayer;set_Stream;(System.IO.Stream);summary;df-generated | +| System.Media;SoundPlayer;set_Tag;(System.Object);summary;df-generated | +| System.Media;SystemSound;Play;();summary;df-generated | +| System.Media;SystemSounds;get_Asterisk;();summary;df-generated | +| System.Media;SystemSounds;get_Beep;();summary;df-generated | +| System.Media;SystemSounds;get_Exclamation;();summary;df-generated | +| System.Media;SystemSounds;get_Hand;();summary;df-generated | +| System.Media;SystemSounds;get_Question;();summary;df-generated | | System.Net.Cache;HttpRequestCachePolicy;HttpRequestCachePolicy;(System.Net.Cache.HttpRequestCacheLevel);summary;df-generated | | System.Net.Cache;HttpRequestCachePolicy;ToString;();summary;df-generated | | System.Net.Cache;HttpRequestCachePolicy;get_Level;();summary;df-generated | @@ -28460,6 +32922,22 @@ neutral | System.Net.Mail;SmtpFailedRecipientException;SmtpFailedRecipientException;(System.String,System.Exception);summary;df-generated | | System.Net.Mail;SmtpFailedRecipientsException;SmtpFailedRecipientsException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Net.Mail;SmtpFailedRecipientsException;SmtpFailedRecipientsException;(System.String);summary;df-generated | +| System.Net.Mail;SmtpPermission;AddPermission;(System.Net.Mail.SmtpAccess);summary;df-generated | +| System.Net.Mail;SmtpPermission;Copy;();summary;df-generated | +| System.Net.Mail;SmtpPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net.Mail;SmtpPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net.Mail;SmtpPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net.Mail;SmtpPermission;IsUnrestricted;();summary;df-generated | +| System.Net.Mail;SmtpPermission;SmtpPermission;(System.Boolean);summary;df-generated | +| System.Net.Mail;SmtpPermission;SmtpPermission;(System.Net.Mail.SmtpAccess);summary;df-generated | +| System.Net.Mail;SmtpPermission;SmtpPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net.Mail;SmtpPermission;ToXml;();summary;df-generated | +| System.Net.Mail;SmtpPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net.Mail;SmtpPermission;get_Access;();summary;df-generated | +| System.Net.Mail;SmtpPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net.Mail;SmtpPermissionAttribute;SmtpPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Net.Mail;SmtpPermissionAttribute;get_Access;();summary;df-generated | +| System.Net.Mail;SmtpPermissionAttribute;set_Access;(System.String);summary;df-generated | | System.Net.Mime;ContentDisposition;Equals;(System.Object);summary;df-generated | | System.Net.Mime;ContentDisposition;GetHashCode;();summary;df-generated | | System.Net.Mime;ContentDisposition;get_CreationDate;();summary;df-generated | @@ -28658,6 +33136,20 @@ neutral | System.Net.NetworkInformation;NetworkInformationException;NetworkInformationException;(System.Int32);summary;df-generated | | System.Net.NetworkInformation;NetworkInformationException;NetworkInformationException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Net.NetworkInformation;NetworkInformationException;get_ErrorCode;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;AddPermission;(System.Net.NetworkInformation.NetworkInformationAccess);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;IsUnrestricted;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;NetworkInformationPermission;(System.Net.NetworkInformation.NetworkInformationAccess);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;NetworkInformationPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;ToXml;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;get_Access;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermissionAttribute;NetworkInformationPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermissionAttribute;get_Access;();summary;df-generated | +| System.Net.NetworkInformation;NetworkInformationPermissionAttribute;set_Access;(System.String);summary;df-generated | | System.Net.NetworkInformation;NetworkInterface;GetAllNetworkInterfaces;();summary;df-generated | | System.Net.NetworkInformation;NetworkInterface;GetIPProperties;();summary;df-generated | | System.Net.NetworkInformation;NetworkInterface;GetIPStatistics;();summary;df-generated | @@ -28761,6 +33253,26 @@ neutral | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;Remove;(System.Net.NetworkInformation.UnicastIPAddressInformation);summary;df-generated | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;get_Count;();summary;df-generated | | System.Net.NetworkInformation;UnicastIPAddressInformationCollection;get_IsReadOnly;();summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;Copy;();summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;IsUnrestricted;();summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;PeerCollaborationPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;ToXml;();summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net.PeerToPeer.Collaboration;PeerCollaborationPermissionAttribute;PeerCollaborationPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;Copy;();summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;IsUnrestricted;();summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;PnrpPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;ToXml;();summary;df-generated | +| System.Net.PeerToPeer;PnrpPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net.PeerToPeer;PnrpPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net.PeerToPeer;PnrpPermissionAttribute;PnrpPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Net.Quic;QuicClientConnectionOptions;get_ClientAuthenticationOptions;();summary;df-generated | | System.Net.Quic;QuicClientConnectionOptions;get_LocalEndPoint;();summary;df-generated | | System.Net.Quic;QuicClientConnectionOptions;get_RemoteEndPoint;();summary;df-generated | @@ -29533,11 +34045,26 @@ neutral | System.Net;DnsEndPoint;GetHashCode;();summary;df-generated | | System.Net;DnsEndPoint;get_AddressFamily;();summary;df-generated | | System.Net;DnsEndPoint;get_Port;();summary;df-generated | +| System.Net;DnsPermission;Copy;();summary;df-generated | +| System.Net;DnsPermission;DnsPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net;DnsPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net;DnsPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net;DnsPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net;DnsPermission;IsUnrestricted;();summary;df-generated | +| System.Net;DnsPermission;ToXml;();summary;df-generated | +| System.Net;DnsPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net;DnsPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net;DnsPermissionAttribute;DnsPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Net;DownloadProgressChangedEventArgs;get_BytesReceived;();summary;df-generated | | System.Net;DownloadProgressChangedEventArgs;get_TotalBytesToReceive;();summary;df-generated | | System.Net;EndPoint;Create;(System.Net.SocketAddress);summary;df-generated | | System.Net;EndPoint;Serialize;();summary;df-generated | | System.Net;EndPoint;get_AddressFamily;();summary;df-generated | +| System.Net;EndpointPermission;Equals;(System.Object);summary;df-generated | +| System.Net;EndpointPermission;GetHashCode;();summary;df-generated | +| System.Net;EndpointPermission;get_Hostname;();summary;df-generated | +| System.Net;EndpointPermission;get_Port;();summary;df-generated | +| System.Net;EndpointPermission;get_Transport;();summary;df-generated | | System.Net;FileWebRequest;Abort;();summary;df-generated | | System.Net;FileWebRequest;FileWebRequest;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Net;FileWebRequest;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | @@ -29904,6 +34431,28 @@ neutral | System.Net;SocketAddress;get_Item;(System.Int32);summary;df-generated | | System.Net;SocketAddress;get_Size;();summary;df-generated | | System.Net;SocketAddress;set_Item;(System.Int32,System.Byte);summary;df-generated | +| System.Net;SocketPermission;AddPermission;(System.Net.NetworkAccess,System.Net.TransportType,System.String,System.Int32);summary;df-generated | +| System.Net;SocketPermission;Copy;();summary;df-generated | +| System.Net;SocketPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net;SocketPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net;SocketPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net;SocketPermission;IsUnrestricted;();summary;df-generated | +| System.Net;SocketPermission;SocketPermission;(System.Net.NetworkAccess,System.Net.TransportType,System.String,System.Int32);summary;df-generated | +| System.Net;SocketPermission;SocketPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net;SocketPermission;ToXml;();summary;df-generated | +| System.Net;SocketPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net;SocketPermission;get_AcceptList;();summary;df-generated | +| System.Net;SocketPermission;get_ConnectList;();summary;df-generated | +| System.Net;SocketPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net;SocketPermissionAttribute;SocketPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Net;SocketPermissionAttribute;get_Access;();summary;df-generated | +| System.Net;SocketPermissionAttribute;get_Host;();summary;df-generated | +| System.Net;SocketPermissionAttribute;get_Port;();summary;df-generated | +| System.Net;SocketPermissionAttribute;get_Transport;();summary;df-generated | +| System.Net;SocketPermissionAttribute;set_Access;(System.String);summary;df-generated | +| System.Net;SocketPermissionAttribute;set_Host;(System.String);summary;df-generated | +| System.Net;SocketPermissionAttribute;set_Port;(System.String);summary;df-generated | +| System.Net;SocketPermissionAttribute;set_Transport;(System.String);summary;df-generated | | System.Net;TransportContext;GetChannelBinding;(System.Security.Authentication.ExtendedProtection.ChannelBindingKind);summary;df-generated | | System.Net;UploadProgressChangedEventArgs;get_BytesReceived;();summary;df-generated | | System.Net;UploadProgressChangedEventArgs;get_BytesSent;();summary;df-generated | @@ -29965,6 +34514,30 @@ neutral | System.Net;WebHeaderCollection;get_Keys;();summary;df-generated | | System.Net;WebHeaderCollection;set_Item;(System.Net.HttpRequestHeader,System.String);summary;df-generated | | System.Net;WebHeaderCollection;set_Item;(System.Net.HttpResponseHeader,System.String);summary;df-generated | +| System.Net;WebPermission;AddPermission;(System.Net.NetworkAccess,System.String);summary;df-generated | +| System.Net;WebPermission;AddPermission;(System.Net.NetworkAccess,System.Text.RegularExpressions.Regex);summary;df-generated | +| System.Net;WebPermission;Copy;();summary;df-generated | +| System.Net;WebPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Net;WebPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Net;WebPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Net;WebPermission;IsUnrestricted;();summary;df-generated | +| System.Net;WebPermission;ToXml;();summary;df-generated | +| System.Net;WebPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Net;WebPermission;WebPermission;(System.Net.NetworkAccess,System.String);summary;df-generated | +| System.Net;WebPermission;WebPermission;(System.Net.NetworkAccess,System.Text.RegularExpressions.Regex);summary;df-generated | +| System.Net;WebPermission;WebPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Net;WebPermission;get_AcceptList;();summary;df-generated | +| System.Net;WebPermission;get_ConnectList;();summary;df-generated | +| System.Net;WebPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Net;WebPermissionAttribute;WebPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Net;WebPermissionAttribute;get_Accept;();summary;df-generated | +| System.Net;WebPermissionAttribute;get_AcceptPattern;();summary;df-generated | +| System.Net;WebPermissionAttribute;get_Connect;();summary;df-generated | +| System.Net;WebPermissionAttribute;get_ConnectPattern;();summary;df-generated | +| System.Net;WebPermissionAttribute;set_Accept;(System.String);summary;df-generated | +| System.Net;WebPermissionAttribute;set_AcceptPattern;(System.String);summary;df-generated | +| System.Net;WebPermissionAttribute;set_Connect;(System.String);summary;df-generated | +| System.Net;WebPermissionAttribute;set_ConnectPattern;(System.String);summary;df-generated | | System.Net;WebProxy;GetDefaultProxy;();summary;df-generated | | System.Net;WebProxy;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Net;WebProxy;IsBypassed;(System.Uri);summary;df-generated | @@ -40141,6 +44714,10 @@ neutral | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;Dispose;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;MoveNext;();summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate2Enumerator;Reset;();summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509Certificate2UI;DisplayCertificate;(System.Security.Cryptography.X509Certificates.X509Certificate2);summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509Certificate2UI;DisplayCertificate;(System.Security.Cryptography.X509Certificates.X509Certificate2,System.IntPtr);summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509Certificate2UI;SelectFromCollection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.String,System.String,System.Security.Cryptography.X509Certificates.X509SelectionFlag);summary;df-generated | +| System.Security.Cryptography.X509Certificates;X509Certificate2UI;SelectFromCollection;(System.Security.Cryptography.X509Certificates.X509Certificate2Collection,System.String,System.String,System.Security.Cryptography.X509Certificates.X509SelectionFlag,System.IntPtr);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate;CreateFromCertFile;(System.String);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate;CreateFromSignedFile;(System.String);summary;df-generated | | System.Security.Cryptography.X509Certificates;X509Certificate;Dispose;();summary;df-generated | @@ -41332,6 +45909,8 @@ neutral | System.Security.Cryptography;PemFields;get_DecodedDataLength;();summary;df-generated | | System.Security.Cryptography;PemFields;get_Label;();summary;df-generated | | System.Security.Cryptography;PemFields;get_Location;();summary;df-generated | +| System.Security.Cryptography;ProtectedData;Protect;(System.Byte[],System.Byte[],System.Security.Cryptography.DataProtectionScope);summary;df-generated | +| System.Security.Cryptography;ProtectedData;Unprotect;(System.Byte[],System.Byte[],System.Security.Cryptography.DataProtectionScope);summary;df-generated | | System.Security.Cryptography;RC2;Create;();summary;df-generated | | System.Security.Cryptography;RC2;Create;(System.String);summary;df-generated | | System.Security.Cryptography;RC2;get_EffectiveKeySize;();summary;df-generated | @@ -41785,12 +46364,377 @@ neutral | System.Security.Cryptography;TripleDESCryptoServiceProvider;set_Mode;(System.Security.Cryptography.CipherMode);summary;df-generated | | System.Security.Cryptography;TripleDESCryptoServiceProvider;set_Padding;(System.Security.Cryptography.PaddingMode);summary;df-generated | | System.Security.Permissions;CodeAccessSecurityAttribute;CodeAccessSecurityAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;Copy;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;DataProtectionPermission;(System.Security.Permissions.DataProtectionPermissionFlags);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;DataProtectionPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermission;set_Flags;(System.Security.Permissions.DataProtectionPermissionFlags);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;DataProtectionPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;get_Flags;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;get_ProtectData;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;get_ProtectMemory;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;get_UnprotectData;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;get_UnprotectMemory;();summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;set_Flags;(System.Security.Permissions.DataProtectionPermissionFlags);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;set_ProtectData;(System.Boolean);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;set_ProtectMemory;(System.Boolean);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;set_UnprotectData;(System.Boolean);summary;df-generated | +| System.Security.Permissions;DataProtectionPermissionAttribute;set_UnprotectMemory;(System.Boolean);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;AddPathList;(System.Security.Permissions.EnvironmentPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;Copy;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;EnvironmentPermission;(System.Security.Permissions.EnvironmentPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;EnvironmentPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;GetPathList;(System.Security.Permissions.EnvironmentPermissionAccess);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;SetPathList;(System.Security.Permissions.EnvironmentPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;EnvironmentPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;get_All;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;get_Read;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;get_Write;();summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;set_All;(System.String);summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;set_Read;(System.String);summary;df-generated | +| System.Security.Permissions;EnvironmentPermissionAttribute;set_Write;(System.String);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;FileDialogPermission;(System.Security.Permissions.FileDialogPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;FileDialogPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;FileDialogPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;FileDialogPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileDialogPermission;get_Access;();summary;df-generated | +| System.Security.Permissions;FileDialogPermission;set_Access;(System.Security.Permissions.FileDialogPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;FileDialogPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;get_Open;();summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;get_Save;();summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;set_Open;(System.Boolean);summary;df-generated | +| System.Security.Permissions;FileDialogPermissionAttribute;set_Save;(System.Boolean);summary;df-generated | +| System.Security.Permissions;FileIOPermission;AddPathList;(System.Security.Permissions.FileIOPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermission;AddPathList;(System.Security.Permissions.FileIOPermissionAccess,System.String[]);summary;df-generated | +| System.Security.Permissions;FileIOPermission;Equals;(System.Object);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FileIOPermission;(System.Security.Permissions.FileIOPermissionAccess,System.Security.AccessControl.AccessControlActions,System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FileIOPermission;(System.Security.Permissions.FileIOPermissionAccess,System.Security.AccessControl.AccessControlActions,System.String[]);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FileIOPermission;(System.Security.Permissions.FileIOPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FileIOPermission;(System.Security.Permissions.FileIOPermissionAccess,System.String[]);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FileIOPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;FileIOPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;FileIOPermission;GetHashCode;();summary;df-generated | +| System.Security.Permissions;FileIOPermission;GetPathList;(System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileIOPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileIOPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileIOPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;FileIOPermission;SetPathList;(System.Security.Permissions.FileIOPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermission;SetPathList;(System.Security.Permissions.FileIOPermissionAccess,System.String[]);summary;df-generated | +| System.Security.Permissions;FileIOPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;FileIOPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;FileIOPermission;get_AllFiles;();summary;df-generated | +| System.Security.Permissions;FileIOPermission;get_AllLocalFiles;();summary;df-generated | +| System.Security.Permissions;FileIOPermission;set_AllFiles;(System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileIOPermission;set_AllLocalFiles;(System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;FileIOPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_All;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_AllFiles;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_AllLocalFiles;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_Append;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_ChangeAccessControl;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_PathDiscovery;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_Read;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_ViewAccessControl;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_ViewAndModify;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;get_Write;();summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_All;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_AllFiles;(System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_AllLocalFiles;(System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_Append;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_ChangeAccessControl;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_PathDiscovery;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_Read;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_ViewAccessControl;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_ViewAndModify;(System.String);summary;df-generated | +| System.Security.Permissions;FileIOPermissionAttribute;set_Write;(System.String);summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;Copy;();summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;GacIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;GacIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;GacIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;GacIdentityPermissionAttribute;GacIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;HostProtectionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_ExternalProcessMgmt;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_ExternalThreading;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_MayLeakOnAbort;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_Resources;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_SecurityInfrastructure;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_SelfAffectingProcessMgmt;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_SelfAffectingThreading;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_SharedState;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_Synchronization;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;get_UI;();summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_ExternalProcessMgmt;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_ExternalThreading;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_MayLeakOnAbort;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_Resources;(System.Security.Permissions.HostProtectionResource);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_SecurityInfrastructure;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_SelfAffectingProcessMgmt;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_SelfAffectingThreading;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_SharedState;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_Synchronization;(System.Boolean);summary;df-generated | +| System.Security.Permissions;HostProtectionAttribute;set_UI;(System.Boolean);summary;df-generated | +| System.Security.Permissions;IUnrestrictedPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;Copy;();summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;IsolatedStorageFilePermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;ToXml;();summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;IsolatedStorageFilePermissionAttribute;IsolatedStorageFilePermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;IsolatedStoragePermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;ToXml;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;get_UsageAllowed;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;get_UserQuota;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;set_UsageAllowed;(System.Security.Permissions.IsolatedStorageContainment);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermission;set_UserQuota;(System.Int64);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermissionAttribute;IsolatedStoragePermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermissionAttribute;get_UsageAllowed;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermissionAttribute;get_UserQuota;();summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermissionAttribute;set_UsageAllowed;(System.Security.Permissions.IsolatedStorageContainment);summary;df-generated | +| System.Security.Permissions;IsolatedStoragePermissionAttribute;set_UserQuota;(System.Int64);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;Copy;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;KeyContainerPermission;(System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;KeyContainerPermission;(System.Security.Permissions.KeyContainerPermissionFlags,System.Security.Permissions.KeyContainerPermissionAccessEntry[]);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;KeyContainerPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;get_AccessEntries;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;Equals;(System.Object);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;GetHashCode;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;KeyContainerPermissionAccessEntry;(System.Security.Cryptography.CspParameters,System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;KeyContainerPermissionAccessEntry;(System.String,System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;KeyContainerPermissionAccessEntry;(System.String,System.String,System.Int32,System.String,System.Int32,System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_Flags;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_KeyContainerName;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_KeySpec;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_KeyStore;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_ProviderName;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;get_ProviderType;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_Flags;(System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_KeyContainerName;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_KeySpec;(System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_KeyStore;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_ProviderName;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntry;set_ProviderType;(System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;Add;(System.Security.Permissions.KeyContainerPermissionAccessEntry);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;CopyTo;(System.Array,System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;CopyTo;(System.Security.Permissions.KeyContainerPermissionAccessEntry[],System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;GetEnumerator;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;IndexOf;(System.Security.Permissions.KeyContainerPermissionAccessEntry);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;Remove;(System.Security.Permissions.KeyContainerPermissionAccessEntry);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;get_Count;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;get_IsSynchronized;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;get_Item;(System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;get_SyncRoot;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryEnumerator;MoveNext;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryEnumerator;Reset;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryEnumerator;get_Current;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;KeyContainerPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_Flags;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_KeyContainerName;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_KeySpec;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_KeyStore;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_ProviderName;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;get_ProviderType;();summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_Flags;(System.Security.Permissions.KeyContainerPermissionFlags);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_KeyContainerName;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_KeySpec;(System.Int32);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_KeyStore;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_ProviderName;(System.String);summary;df-generated | +| System.Security.Permissions;KeyContainerPermissionAttribute;set_ProviderType;(System.Int32);summary;df-generated | +| System.Security.Permissions;MediaPermission;Copy;();summary;df-generated | +| System.Security.Permissions;MediaPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;MediaPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;MediaPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;MediaPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;MediaPermission;MediaPermission;(System.Security.Permissions.MediaPermissionAudio);summary;df-generated | +| System.Security.Permissions;MediaPermission;MediaPermission;(System.Security.Permissions.MediaPermissionAudio,System.Security.Permissions.MediaPermissionVideo,System.Security.Permissions.MediaPermissionImage);summary;df-generated | +| System.Security.Permissions;MediaPermission;MediaPermission;(System.Security.Permissions.MediaPermissionImage);summary;df-generated | +| System.Security.Permissions;MediaPermission;MediaPermission;(System.Security.Permissions.MediaPermissionVideo);summary;df-generated | +| System.Security.Permissions;MediaPermission;MediaPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;MediaPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;MediaPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;MediaPermission;get_Audio;();summary;df-generated | +| System.Security.Permissions;MediaPermission;get_Image;();summary;df-generated | +| System.Security.Permissions;MediaPermission;get_Video;();summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;MediaPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;get_Audio;();summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;get_Image;();summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;get_Video;();summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;set_Audio;(System.Security.Permissions.MediaPermissionAudio);summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;set_Image;(System.Security.Permissions.MediaPermissionImage);summary;df-generated | +| System.Security.Permissions;MediaPermissionAttribute;set_Video;(System.Security.Permissions.MediaPermissionVideo);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;CreatePermissionSet;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;PermissionSetAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;get_File;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;get_Hex;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;get_Name;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;get_UnicodeEncoded;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;get_XML;();summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;set_File;(System.String);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;set_Hex;(System.String);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;set_Name;(System.String);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;set_UnicodeEncoded;(System.Boolean);summary;df-generated | +| System.Security.Permissions;PermissionSetAttribute;set_XML;(System.String);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;Demand;();summary;df-generated | +| System.Security.Permissions;PrincipalPermission;Equals;(System.Object);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;GetHashCode;();summary;df-generated | +| System.Security.Permissions;PrincipalPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;PrincipalPermission;PrincipalPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;PrincipalPermission;(System.String,System.String);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;PrincipalPermission;(System.String,System.String,System.Boolean);summary;df-generated | +| System.Security.Permissions;PrincipalPermission;ToString;();summary;df-generated | +| System.Security.Permissions;PrincipalPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;PrincipalPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;get_Authenticated;();summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;get_Name;();summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;get_Role;();summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;set_Authenticated;(System.Boolean);summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;set_Name;(System.String);summary;df-generated | +| System.Security.Permissions;PrincipalPermissionAttribute;set_Role;(System.String);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;PublisherIdentityPermission;(System.Security.Cryptography.X509Certificates.X509Certificate);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;PublisherIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;get_Certificate;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;set_Certificate;(System.Security.Cryptography.X509Certificates.X509Certificate);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;PublisherIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;get_CertFile;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;get_SignedFile;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;get_X509Certificate;();summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;set_CertFile;(System.String);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;set_SignedFile;(System.String);summary;df-generated | +| System.Security.Permissions;PublisherIdentityPermissionAttribute;set_X509Certificate;(System.String);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;ReflectionPermission;ReflectionPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;ReflectionPermission;(System.Security.Permissions.ReflectionPermissionFlag);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;ReflectionPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ReflectionPermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;ReflectionPermission;set_Flags;(System.Security.Permissions.ReflectionPermissionFlag);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;ReflectionPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;get_Flags;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;get_MemberAccess;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;get_ReflectionEmit;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;get_RestrictedMemberAccess;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;get_TypeInformation;();summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;set_Flags;(System.Security.Permissions.ReflectionPermissionFlag);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;set_MemberAccess;(System.Boolean);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;set_ReflectionEmit;(System.Boolean);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;set_RestrictedMemberAccess;(System.Boolean);summary;df-generated | +| System.Security.Permissions;ReflectionPermissionAttribute;set_TypeInformation;(System.Boolean);summary;df-generated | +| System.Security.Permissions;RegistryPermission;AddPathList;(System.Security.Permissions.RegistryPermissionAccess,System.Security.AccessControl.AccessControlActions,System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermission;AddPathList;(System.Security.Permissions.RegistryPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermission;Copy;();summary;df-generated | +| System.Security.Permissions;RegistryPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;RegistryPermission;GetPathList;(System.Security.Permissions.RegistryPermissionAccess);summary;df-generated | +| System.Security.Permissions;RegistryPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;RegistryPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;RegistryPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;RegistryPermission;RegistryPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;RegistryPermission;RegistryPermission;(System.Security.Permissions.RegistryPermissionAccess,System.Security.AccessControl.AccessControlActions,System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermission;RegistryPermission;(System.Security.Permissions.RegistryPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermission;SetPathList;(System.Security.Permissions.RegistryPermissionAccess,System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;RegistryPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;RegistryPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_All;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_ChangeAccessControl;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_Create;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_Read;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_ViewAccessControl;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_ViewAndModify;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;get_Write;();summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_All;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_ChangeAccessControl;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_Create;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_Read;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_ViewAccessControl;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_ViewAndModify;(System.String);summary;df-generated | +| System.Security.Permissions;RegistryPermissionAttribute;set_Write;(System.String);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;AddPermissionAccess;(System.Security.Permissions.ResourcePermissionBaseEntry);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;Clear;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;Copy;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;GetPermissionEntries;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;RemovePermissionAccess;(System.Security.Permissions.ResourcePermissionBaseEntry);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;ResourcePermissionBase;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;ToXml;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;get_PermissionAccessType;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;get_TagNames;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;set_PermissionAccessType;(System.Type);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBase;set_TagNames;(System.String[]);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBaseEntry;ResourcePermissionBaseEntry;(System.Int32,System.String[]);summary;df-generated | +| System.Security.Permissions;ResourcePermissionBaseEntry;get_PermissionAccess;();summary;df-generated | +| System.Security.Permissions;ResourcePermissionBaseEntry;get_PermissionAccessPath;();summary;df-generated | | System.Security.Permissions;SecurityAttribute;CreatePermission;();summary;df-generated | | System.Security.Permissions;SecurityAttribute;SecurityAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Security.Permissions;SecurityAttribute;get_Action;();summary;df-generated | | System.Security.Permissions;SecurityAttribute;get_Unrestricted;();summary;df-generated | | System.Security.Permissions;SecurityAttribute;set_Action;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Security.Permissions;SecurityAttribute;set_Unrestricted;(System.Boolean);summary;df-generated | +| System.Security.Permissions;SecurityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;SecurityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SecurityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SecurityPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;SecurityPermission;SecurityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;SecurityPermission;SecurityPermission;(System.Security.Permissions.SecurityPermissionFlag);summary;df-generated | +| System.Security.Permissions;SecurityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;SecurityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SecurityPermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;SecurityPermission;set_Flags;(System.Security.Permissions.SecurityPermissionFlag);summary;df-generated | | System.Security.Permissions;SecurityPermissionAttribute;CreatePermission;();summary;df-generated | | System.Security.Permissions;SecurityPermissionAttribute;SecurityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | | System.Security.Permissions;SecurityPermissionAttribute;get_Assertion;();summary;df-generated | @@ -41823,6 +46767,244 @@ neutral | System.Security.Permissions;SecurityPermissionAttribute;set_SerializationFormatter;(System.Boolean);summary;df-generated | | System.Security.Permissions;SecurityPermissionAttribute;set_SkipVerification;(System.Boolean);summary;df-generated | | System.Security.Permissions;SecurityPermissionAttribute;set_UnmanagedCode;(System.Boolean);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;Copy;();summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;SiteIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;SiteIdentityPermission;(System.String);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;get_Site;();summary;df-generated | +| System.Security.Permissions;SiteIdentityPermission;set_Site;(System.String);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;SiteIdentityPermissionAttribute;SiteIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;SiteIdentityPermissionAttribute;get_Site;();summary;df-generated | +| System.Security.Permissions;SiteIdentityPermissionAttribute;set_Site;(System.String);summary;df-generated | +| System.Security.Permissions;StorePermission;Copy;();summary;df-generated | +| System.Security.Permissions;StorePermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;StorePermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StorePermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StorePermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;StorePermission;StorePermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;StorePermission;StorePermission;(System.Security.Permissions.StorePermissionFlags);summary;df-generated | +| System.Security.Permissions;StorePermission;ToXml;();summary;df-generated | +| System.Security.Permissions;StorePermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StorePermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;StorePermission;set_Flags;(System.Security.Permissions.StorePermissionFlags);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;StorePermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_AddToStore;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_CreateStore;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_DeleteStore;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_EnumerateCertificates;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_EnumerateStores;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_Flags;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_OpenStore;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;get_RemoveFromStore;();summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_AddToStore;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_CreateStore;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_DeleteStore;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_EnumerateCertificates;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_EnumerateStores;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_Flags;(System.Security.Permissions.StorePermissionFlags);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_OpenStore;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StorePermissionAttribute;set_RemoveFromStore;(System.Boolean);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;StrongNameIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;StrongNameIdentityPermission;(System.Security.Permissions.StrongNamePublicKeyBlob,System.String,System.Version);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;get_Name;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;get_PublicKey;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;get_Version;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;set_Name;(System.String);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;set_PublicKey;(System.Security.Permissions.StrongNamePublicKeyBlob);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;set_Version;(System.Version);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;StrongNameIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;get_Name;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;get_PublicKey;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;get_Version;();summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;set_Name;(System.String);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;set_PublicKey;(System.String);summary;df-generated | +| System.Security.Permissions;StrongNameIdentityPermissionAttribute;set_Version;(System.String);summary;df-generated | +| System.Security.Permissions;StrongNamePublicKeyBlob;Equals;(System.Object);summary;df-generated | +| System.Security.Permissions;StrongNamePublicKeyBlob;GetHashCode;();summary;df-generated | +| System.Security.Permissions;StrongNamePublicKeyBlob;StrongNamePublicKeyBlob;(System.Byte[]);summary;df-generated | +| System.Security.Permissions;StrongNamePublicKeyBlob;ToString;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;TypeDescriptorPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;TypeDescriptorPermission;(System.Security.Permissions.TypeDescriptorPermissionFlags);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;get_Flags;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;set_Flags;(System.Security.Permissions.TypeDescriptorPermissionFlags);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;TypeDescriptorPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;get_Flags;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;get_RestrictedRegistrationAccess;();summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;set_Flags;(System.Security.Permissions.TypeDescriptorPermissionFlags);summary;df-generated | +| System.Security.Permissions;TypeDescriptorPermissionAttribute;set_RestrictedRegistrationAccess;(System.Boolean);summary;df-generated | +| System.Security.Permissions;UIPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;UIPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UIPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UIPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;UIPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;UIPermission;UIPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;UIPermission;UIPermission;(System.Security.Permissions.UIPermissionClipboard);summary;df-generated | +| System.Security.Permissions;UIPermission;UIPermission;(System.Security.Permissions.UIPermissionWindow);summary;df-generated | +| System.Security.Permissions;UIPermission;UIPermission;(System.Security.Permissions.UIPermissionWindow,System.Security.Permissions.UIPermissionClipboard);summary;df-generated | +| System.Security.Permissions;UIPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UIPermission;get_Clipboard;();summary;df-generated | +| System.Security.Permissions;UIPermission;get_Window;();summary;df-generated | +| System.Security.Permissions;UIPermission;set_Clipboard;(System.Security.Permissions.UIPermissionClipboard);summary;df-generated | +| System.Security.Permissions;UIPermission;set_Window;(System.Security.Permissions.UIPermissionWindow);summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;UIPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;get_Clipboard;();summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;get_Window;();summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;set_Clipboard;(System.Security.Permissions.UIPermissionClipboard);summary;df-generated | +| System.Security.Permissions;UIPermissionAttribute;set_Window;(System.Security.Permissions.UIPermissionWindow);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;Copy;();summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;UrlIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;UrlIdentityPermission;(System.String);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;get_Url;();summary;df-generated | +| System.Security.Permissions;UrlIdentityPermission;set_Url;(System.String);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;UrlIdentityPermissionAttribute;UrlIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;UrlIdentityPermissionAttribute;get_Url;();summary;df-generated | +| System.Security.Permissions;UrlIdentityPermissionAttribute;set_Url;(System.String);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;Copy;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;IsUnrestricted;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;WebBrowserPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;WebBrowserPermission;(System.Security.Permissions.WebBrowserPermissionLevel);summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;get_Level;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermission;set_Level;(System.Security.Permissions.WebBrowserPermissionLevel);summary;df-generated | +| System.Security.Permissions;WebBrowserPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermissionAttribute;WebBrowserPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;WebBrowserPermissionAttribute;get_Level;();summary;df-generated | +| System.Security.Permissions;WebBrowserPermissionAttribute;set_Level;(System.Security.Permissions.WebBrowserPermissionLevel);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;ToXml;();summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;ZoneIdentityPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;ZoneIdentityPermission;(System.Security.SecurityZone);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;get_SecurityZone;();summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;set_SecurityZone;(System.Security.SecurityZone);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermissionAttribute;ZoneIdentityPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermissionAttribute;get_Zone;();summary;df-generated | +| System.Security.Permissions;ZoneIdentityPermissionAttribute;set_Zone;(System.Security.SecurityZone);summary;df-generated | +| System.Security.Policy;AllMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;AllMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;AllMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;AllMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;AllMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;AllMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;AllMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;AllMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;AllMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;ApplicationDirectory;ApplicationDirectory;(System.String);summary;df-generated | +| System.Security.Policy;ApplicationDirectory;Copy;();summary;df-generated | +| System.Security.Policy;ApplicationDirectory;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;ApplicationDirectory;GetHashCode;();summary;df-generated | +| System.Security.Policy;ApplicationDirectory;ToString;();summary;df-generated | +| System.Security.Policy;ApplicationDirectory;get_Directory;();summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;ApplicationDirectoryMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;ApplicationTrust;ApplicationTrust;(System.ApplicationIdentity);summary;df-generated | +| System.Security.Policy;ApplicationTrust;ApplicationTrust;(System.Security.PermissionSet,System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Security.Policy;ApplicationTrust;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;ApplicationTrust;ToXml;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_ApplicationIdentity;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_DefaultGrantSet;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_ExtraInfo;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_FullTrustAssemblies;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_IsApplicationTrustedToRun;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;get_Persist;();summary;df-generated | +| System.Security.Policy;ApplicationTrust;set_ApplicationIdentity;(System.ApplicationIdentity);summary;df-generated | +| System.Security.Policy;ApplicationTrust;set_DefaultGrantSet;(System.Security.Policy.PolicyStatement);summary;df-generated | +| System.Security.Policy;ApplicationTrust;set_ExtraInfo;(System.Object);summary;df-generated | +| System.Security.Policy;ApplicationTrust;set_IsApplicationTrustedToRun;(System.Boolean);summary;df-generated | +| System.Security.Policy;ApplicationTrust;set_Persist;(System.Boolean);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;Add;(System.Security.Policy.ApplicationTrust);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;AddRange;(System.Security.Policy.ApplicationTrustCollection);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;AddRange;(System.Security.Policy.ApplicationTrust[]);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;CopyTo;(System.Security.Policy.ApplicationTrust[],System.Int32);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;Find;(System.ApplicationIdentity,System.Security.Policy.ApplicationVersionMatch);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;GetEnumerator;();summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;Remove;(System.ApplicationIdentity,System.Security.Policy.ApplicationVersionMatch);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;Remove;(System.Security.Policy.ApplicationTrust);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;RemoveRange;(System.Security.Policy.ApplicationTrustCollection);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;RemoveRange;(System.Security.Policy.ApplicationTrust[]);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;get_Count;();summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;get_IsSynchronized;();summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;get_Item;(System.Int32);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;get_Item;(System.String);summary;df-generated | +| System.Security.Policy;ApplicationTrustCollection;get_SyncRoot;();summary;df-generated | +| System.Security.Policy;ApplicationTrustEnumerator;MoveNext;();summary;df-generated | +| System.Security.Policy;ApplicationTrustEnumerator;Reset;();summary;df-generated | +| System.Security.Policy;ApplicationTrustEnumerator;get_Current;();summary;df-generated | +| System.Security.Policy;CodeConnectAccess;CodeConnectAccess;(System.String,System.Int32);summary;df-generated | +| System.Security.Policy;CodeConnectAccess;CreateAnySchemeAccess;(System.Int32);summary;df-generated | +| System.Security.Policy;CodeConnectAccess;CreateOriginSchemeAccess;(System.Int32);summary;df-generated | +| System.Security.Policy;CodeConnectAccess;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;CodeConnectAccess;GetHashCode;();summary;df-generated | +| System.Security.Policy;CodeConnectAccess;get_Port;();summary;df-generated | +| System.Security.Policy;CodeConnectAccess;get_Scheme;();summary;df-generated | +| System.Security.Policy;CodeGroup;AddChild;(System.Security.Policy.CodeGroup);summary;df-generated | +| System.Security.Policy;CodeGroup;CodeGroup;(System.Security.Policy.IMembershipCondition,System.Security.Policy.PolicyStatement);summary;df-generated | +| System.Security.Policy;CodeGroup;Copy;();summary;df-generated | +| System.Security.Policy;CodeGroup;CreateXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;CodeGroup;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;CodeGroup;Equals;(System.Security.Policy.CodeGroup,System.Boolean);summary;df-generated | +| System.Security.Policy;CodeGroup;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;CodeGroup;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;CodeGroup;GetHashCode;();summary;df-generated | +| System.Security.Policy;CodeGroup;ParseXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;CodeGroup;RemoveChild;(System.Security.Policy.CodeGroup);summary;df-generated | +| System.Security.Policy;CodeGroup;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;CodeGroup;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;CodeGroup;ToXml;();summary;df-generated | +| System.Security.Policy;CodeGroup;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;CodeGroup;get_AttributeString;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_Children;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_Description;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_MembershipCondition;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_MergeLogic;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_Name;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_PermissionSetName;();summary;df-generated | +| System.Security.Policy;CodeGroup;get_PolicyStatement;();summary;df-generated | +| System.Security.Policy;CodeGroup;set_Children;(System.Collections.IList);summary;df-generated | +| System.Security.Policy;CodeGroup;set_Description;(System.String);summary;df-generated | +| System.Security.Policy;CodeGroup;set_MembershipCondition;(System.Security.Policy.IMembershipCondition);summary;df-generated | +| System.Security.Policy;CodeGroup;set_Name;(System.String);summary;df-generated | +| System.Security.Policy;CodeGroup;set_PolicyStatement;(System.Security.Policy.PolicyStatement);summary;df-generated | | System.Security.Policy;Evidence;AddAssembly;(System.Object);summary;df-generated | | System.Security.Policy;Evidence;AddAssemblyEvidence;(T);summary;df-generated | | System.Security.Policy;Evidence;AddHost;(System.Object);summary;df-generated | @@ -41844,6 +47026,243 @@ neutral | System.Security.Policy;Evidence;get_SyncRoot;();summary;df-generated | | System.Security.Policy;Evidence;set_Locked;(System.Boolean);summary;df-generated | | System.Security.Policy;EvidenceBase;Clone;();summary;df-generated | +| System.Security.Policy;FileCodeGroup;Copy;();summary;df-generated | +| System.Security.Policy;FileCodeGroup;CreateXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;FileCodeGroup;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;FileCodeGroup;FileCodeGroup;(System.Security.Policy.IMembershipCondition,System.Security.Permissions.FileIOPermissionAccess);summary;df-generated | +| System.Security.Policy;FileCodeGroup;GetHashCode;();summary;df-generated | +| System.Security.Policy;FileCodeGroup;ParseXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;FileCodeGroup;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;FileCodeGroup;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;FileCodeGroup;get_AttributeString;();summary;df-generated | +| System.Security.Policy;FileCodeGroup;get_MergeLogic;();summary;df-generated | +| System.Security.Policy;FileCodeGroup;get_PermissionSetName;();summary;df-generated | +| System.Security.Policy;FirstMatchCodeGroup;Copy;();summary;df-generated | +| System.Security.Policy;FirstMatchCodeGroup;FirstMatchCodeGroup;(System.Security.Policy.IMembershipCondition,System.Security.Policy.PolicyStatement);summary;df-generated | +| System.Security.Policy;FirstMatchCodeGroup;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;FirstMatchCodeGroup;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;FirstMatchCodeGroup;get_MergeLogic;();summary;df-generated | +| System.Security.Policy;GacInstalled;Copy;();summary;df-generated | +| System.Security.Policy;GacInstalled;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;GacInstalled;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;GacInstalled;GetHashCode;();summary;df-generated | +| System.Security.Policy;GacInstalled;ToString;();summary;df-generated | +| System.Security.Policy;GacMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;GacMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;GacMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;GacMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;GacMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;GacMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;GacMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;GacMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;GacMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;Hash;CreateMD5;(System.Byte[]);summary;df-generated | +| System.Security.Policy;Hash;CreateSHA1;(System.Byte[]);summary;df-generated | +| System.Security.Policy;Hash;CreateSHA256;(System.Byte[]);summary;df-generated | +| System.Security.Policy;Hash;GenerateHash;(System.Security.Cryptography.HashAlgorithm);summary;df-generated | +| System.Security.Policy;Hash;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Security.Policy;Hash;Hash;(System.Reflection.Assembly);summary;df-generated | +| System.Security.Policy;Hash;ToString;();summary;df-generated | +| System.Security.Policy;Hash;get_MD5;();summary;df-generated | +| System.Security.Policy;Hash;get_SHA1;();summary;df-generated | +| System.Security.Policy;Hash;get_SHA256;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;HashMembershipCondition;(System.Security.Cryptography.HashAlgorithm,System.Byte[]);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;OnDeserialization;(System.Object);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;get_HashAlgorithm;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;get_HashValue;();summary;df-generated | +| System.Security.Policy;HashMembershipCondition;set_HashAlgorithm;(System.Security.Cryptography.HashAlgorithm);summary;df-generated | +| System.Security.Policy;HashMembershipCondition;set_HashValue;(System.Byte[]);summary;df-generated | +| System.Security.Policy;IIdentityPermissionFactory;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;IMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;IMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;IMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;IMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;AddConnectAccess;(System.String,System.Security.Policy.CodeConnectAccess);summary;df-generated | +| System.Security.Policy;NetCodeGroup;Copy;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;CreateXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;NetCodeGroup;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;NetCodeGroup;GetConnectAccessRules;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;GetHashCode;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;NetCodeGroup;(System.Security.Policy.IMembershipCondition);summary;df-generated | +| System.Security.Policy;NetCodeGroup;ParseXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;NetCodeGroup;ResetConnectAccess;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;NetCodeGroup;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;NetCodeGroup;get_AttributeString;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;get_MergeLogic;();summary;df-generated | +| System.Security.Policy;NetCodeGroup;get_PermissionSetName;();summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;Copy;();summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;PermissionRequestEvidence;(System.Security.PermissionSet,System.Security.PermissionSet,System.Security.PermissionSet);summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;ToString;();summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;get_DeniedPermissions;();summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;get_OptionalPermissions;();summary;df-generated | +| System.Security.Policy;PermissionRequestEvidence;get_RequestedPermissions;();summary;df-generated | +| System.Security.Policy;PolicyException;PolicyException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Security.Policy;PolicyException;PolicyException;(System.String);summary;df-generated | +| System.Security.Policy;PolicyException;PolicyException;(System.String,System.Exception);summary;df-generated | +| System.Security.Policy;PolicyLevel;AddFullTrustAssembly;(System.Security.Policy.StrongName);summary;df-generated | +| System.Security.Policy;PolicyLevel;AddFullTrustAssembly;(System.Security.Policy.StrongNameMembershipCondition);summary;df-generated | +| System.Security.Policy;PolicyLevel;AddNamedPermissionSet;(System.Security.NamedPermissionSet);summary;df-generated | +| System.Security.Policy;PolicyLevel;ChangeNamedPermissionSet;(System.String,System.Security.PermissionSet);summary;df-generated | +| System.Security.Policy;PolicyLevel;CreateAppDomainLevel;();summary;df-generated | +| System.Security.Policy;PolicyLevel;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;PolicyLevel;GetNamedPermissionSet;(System.String);summary;df-generated | +| System.Security.Policy;PolicyLevel;Recover;();summary;df-generated | +| System.Security.Policy;PolicyLevel;RemoveFullTrustAssembly;(System.Security.Policy.StrongName);summary;df-generated | +| System.Security.Policy;PolicyLevel;RemoveFullTrustAssembly;(System.Security.Policy.StrongNameMembershipCondition);summary;df-generated | +| System.Security.Policy;PolicyLevel;RemoveNamedPermissionSet;(System.Security.NamedPermissionSet);summary;df-generated | +| System.Security.Policy;PolicyLevel;RemoveNamedPermissionSet;(System.String);summary;df-generated | +| System.Security.Policy;PolicyLevel;Reset;();summary;df-generated | +| System.Security.Policy;PolicyLevel;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;PolicyLevel;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;PolicyLevel;ToXml;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_FullTrustAssemblies;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_Label;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_NamedPermissionSets;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_RootCodeGroup;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_StoreLocation;();summary;df-generated | +| System.Security.Policy;PolicyLevel;get_Type;();summary;df-generated | +| System.Security.Policy;PolicyLevel;set_RootCodeGroup;(System.Security.Policy.CodeGroup);summary;df-generated | +| System.Security.Policy;PolicyStatement;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;PolicyStatement;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;PolicyStatement;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;PolicyStatement;GetHashCode;();summary;df-generated | +| System.Security.Policy;PolicyStatement;PolicyStatement;(System.Security.PermissionSet);summary;df-generated | +| System.Security.Policy;PolicyStatement;PolicyStatement;(System.Security.PermissionSet,System.Security.Policy.PolicyStatementAttribute);summary;df-generated | +| System.Security.Policy;PolicyStatement;ToXml;();summary;df-generated | +| System.Security.Policy;PolicyStatement;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;PolicyStatement;get_AttributeString;();summary;df-generated | +| System.Security.Policy;PolicyStatement;get_Attributes;();summary;df-generated | +| System.Security.Policy;PolicyStatement;get_PermissionSet;();summary;df-generated | +| System.Security.Policy;PolicyStatement;set_Attributes;(System.Security.Policy.PolicyStatementAttribute);summary;df-generated | +| System.Security.Policy;PolicyStatement;set_PermissionSet;(System.Security.PermissionSet);summary;df-generated | +| System.Security.Policy;Publisher;Copy;();summary;df-generated | +| System.Security.Policy;Publisher;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;Publisher;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;Publisher;GetHashCode;();summary;df-generated | +| System.Security.Policy;Publisher;Publisher;(System.Security.Cryptography.X509Certificates.X509Certificate);summary;df-generated | +| System.Security.Policy;Publisher;ToString;();summary;df-generated | +| System.Security.Policy;Publisher;get_Certificate;();summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;PublisherMembershipCondition;(System.Security.Cryptography.X509Certificates.X509Certificate);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;get_Certificate;();summary;df-generated | +| System.Security.Policy;PublisherMembershipCondition;set_Certificate;(System.Security.Cryptography.X509Certificates.X509Certificate);summary;df-generated | +| System.Security.Policy;Site;Copy;();summary;df-generated | +| System.Security.Policy;Site;CreateFromUrl;(System.String);summary;df-generated | +| System.Security.Policy;Site;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;Site;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;Site;GetHashCode;();summary;df-generated | +| System.Security.Policy;Site;Site;(System.String);summary;df-generated | +| System.Security.Policy;Site;ToString;();summary;df-generated | +| System.Security.Policy;Site;get_Name;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;SiteMembershipCondition;(System.String);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;get_Site;();summary;df-generated | +| System.Security.Policy;SiteMembershipCondition;set_Site;(System.String);summary;df-generated | +| System.Security.Policy;StrongName;Copy;();summary;df-generated | +| System.Security.Policy;StrongName;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;StrongName;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;StrongName;GetHashCode;();summary;df-generated | +| System.Security.Policy;StrongName;StrongName;(System.Security.Permissions.StrongNamePublicKeyBlob,System.String,System.Version);summary;df-generated | +| System.Security.Policy;StrongName;ToString;();summary;df-generated | +| System.Security.Policy;StrongName;get_Name;();summary;df-generated | +| System.Security.Policy;StrongName;get_PublicKey;();summary;df-generated | +| System.Security.Policy;StrongName;get_Version;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;StrongNameMembershipCondition;(System.Security.Permissions.StrongNamePublicKeyBlob,System.String,System.Version);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;get_Name;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;get_PublicKey;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;get_Version;();summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;set_Name;(System.String);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;set_PublicKey;(System.Security.Permissions.StrongNamePublicKeyBlob);summary;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;set_Version;(System.Version);summary;df-generated | +| System.Security.Policy;TrustManagerContext;TrustManagerContext;(System.Security.Policy.TrustManagerUIContext);summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_IgnorePersistedDecision;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_KeepAlive;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_NoPrompt;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_Persist;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_PreviousApplicationIdentity;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;get_UIContext;();summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_IgnorePersistedDecision;(System.Boolean);summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_KeepAlive;(System.Boolean);summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_NoPrompt;(System.Boolean);summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_Persist;(System.Boolean);summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_PreviousApplicationIdentity;(System.ApplicationIdentity);summary;df-generated | +| System.Security.Policy;TrustManagerContext;set_UIContext;(System.Security.Policy.TrustManagerUIContext);summary;df-generated | +| System.Security.Policy;UnionCodeGroup;Copy;();summary;df-generated | +| System.Security.Policy;UnionCodeGroup;Resolve;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;UnionCodeGroup;ResolveMatchingCodeGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;UnionCodeGroup;UnionCodeGroup;(System.Security.Policy.IMembershipCondition,System.Security.Policy.PolicyStatement);summary;df-generated | +| System.Security.Policy;UnionCodeGroup;get_MergeLogic;();summary;df-generated | +| System.Security.Policy;Url;Copy;();summary;df-generated | +| System.Security.Policy;Url;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;Url;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;Url;GetHashCode;();summary;df-generated | +| System.Security.Policy;Url;ToString;();summary;df-generated | +| System.Security.Policy;Url;Url;(System.String);summary;df-generated | +| System.Security.Policy;Url;get_Value;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;Copy;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;UrlMembershipCondition;(System.String);summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;get_Url;();summary;df-generated | +| System.Security.Policy;UrlMembershipCondition;set_Url;(System.String);summary;df-generated | +| System.Security.Policy;Zone;Copy;();summary;df-generated | +| System.Security.Policy;Zone;CreateFromUrl;(System.String);summary;df-generated | +| System.Security.Policy;Zone;CreateIdentityPermission;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;Zone;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;Zone;GetHashCode;();summary;df-generated | +| System.Security.Policy;Zone;ToString;();summary;df-generated | +| System.Security.Policy;Zone;Zone;(System.Security.SecurityZone);summary;df-generated | +| System.Security.Policy;Zone;get_SecurityZone;();summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;Check;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;Equals;(System.Object);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;GetHashCode;();summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;ToString;();summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;ToXml;();summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;ZoneMembershipCondition;(System.Security.SecurityZone);summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;get_SecurityZone;();summary;df-generated | +| System.Security.Policy;ZoneMembershipCondition;set_SecurityZone;(System.Security.SecurityZone);summary;df-generated | | System.Security.Principal;GenericIdentity;get_IsAuthenticated;();summary;df-generated | | System.Security.Principal;GenericPrincipal;IsInRole;(System.String);summary;df-generated | | System.Security.Principal;IIdentity;get_AuthenticationType;();summary;df-generated | @@ -41943,6 +47362,41 @@ neutral | System.Security.Principal;WindowsPrincipal;get_UserClaims;();summary;df-generated | | System.Security;AllowPartiallyTrustedCallersAttribute;get_PartialTrustVisibilityLevel;();summary;df-generated | | System.Security;AllowPartiallyTrustedCallersAttribute;set_PartialTrustVisibilityLevel;(System.Security.PartialTrustVisibilityLevel);summary;df-generated | +| System.Security;CodeAccessPermission;Assert;();summary;df-generated | +| System.Security;CodeAccessPermission;Copy;();summary;df-generated | +| System.Security;CodeAccessPermission;Demand;();summary;df-generated | +| System.Security;CodeAccessPermission;Deny;();summary;df-generated | +| System.Security;CodeAccessPermission;Equals;(System.Object);summary;df-generated | +| System.Security;CodeAccessPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security;CodeAccessPermission;GetHashCode;();summary;df-generated | +| System.Security;CodeAccessPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Security;CodeAccessPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Security;CodeAccessPermission;PermitOnly;();summary;df-generated | +| System.Security;CodeAccessPermission;RevertAll;();summary;df-generated | +| System.Security;CodeAccessPermission;RevertAssert;();summary;df-generated | +| System.Security;CodeAccessPermission;RevertDeny;();summary;df-generated | +| System.Security;CodeAccessPermission;RevertPermitOnly;();summary;df-generated | +| System.Security;CodeAccessPermission;ToString;();summary;df-generated | +| System.Security;CodeAccessPermission;ToXml;();summary;df-generated | +| System.Security;CodeAccessPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Security;HostProtectionException;HostProtectionException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System.Security;HostProtectionException;HostProtectionException;(System.String);summary;df-generated | +| System.Security;HostProtectionException;HostProtectionException;(System.String,System.Exception);summary;df-generated | +| System.Security;HostProtectionException;HostProtectionException;(System.String,System.Security.Permissions.HostProtectionResource,System.Security.Permissions.HostProtectionResource);summary;df-generated | +| System.Security;HostProtectionException;ToString;();summary;df-generated | +| System.Security;HostProtectionException;get_DemandedResources;();summary;df-generated | +| System.Security;HostProtectionException;get_ProtectedResources;();summary;df-generated | +| System.Security;HostSecurityManager;DetermineApplicationTrust;(System.Security.Policy.Evidence,System.Security.Policy.Evidence,System.Security.Policy.TrustManagerContext);summary;df-generated | +| System.Security;HostSecurityManager;GenerateAppDomainEvidence;(System.Type);summary;df-generated | +| System.Security;HostSecurityManager;GenerateAssemblyEvidence;(System.Type,System.Reflection.Assembly);summary;df-generated | +| System.Security;HostSecurityManager;GetHostSuppliedAppDomainEvidenceTypes;();summary;df-generated | +| System.Security;HostSecurityManager;GetHostSuppliedAssemblyEvidenceTypes;(System.Reflection.Assembly);summary;df-generated | +| System.Security;HostSecurityManager;ProvideAppDomainEvidence;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;HostSecurityManager;ProvideAssemblyEvidence;(System.Reflection.Assembly,System.Security.Policy.Evidence);summary;df-generated | +| System.Security;HostSecurityManager;ResolvePolicy;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;HostSecurityManager;get_DomainPolicy;();summary;df-generated | +| System.Security;HostSecurityManager;get_Flags;();summary;df-generated | +| System.Security;IEvidenceFactory;get_Evidence;();summary;df-generated | | System.Security;IPermission;Copy;();summary;df-generated | | System.Security;IPermission;Demand;();summary;df-generated | | System.Security;IPermission;Intersect;(System.Security.IPermission);summary;df-generated | @@ -41950,10 +47404,26 @@ neutral | System.Security;IPermission;Union;(System.Security.IPermission);summary;df-generated | | System.Security;ISecurityEncodable;FromXml;(System.Security.SecurityElement);summary;df-generated | | System.Security;ISecurityEncodable;ToXml;();summary;df-generated | +| System.Security;ISecurityPolicyEncodable;FromXml;(System.Security.SecurityElement,System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security;ISecurityPolicyEncodable;ToXml;(System.Security.Policy.PolicyLevel);summary;df-generated | | System.Security;IStackWalk;Assert;();summary;df-generated | | System.Security;IStackWalk;Demand;();summary;df-generated | | System.Security;IStackWalk;Deny;();summary;df-generated | | System.Security;IStackWalk;PermitOnly;();summary;df-generated | +| System.Security;NamedPermissionSet;Copy;();summary;df-generated | +| System.Security;NamedPermissionSet;Copy;(System.String);summary;df-generated | +| System.Security;NamedPermissionSet;Equals;(System.Object);summary;df-generated | +| System.Security;NamedPermissionSet;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Security;NamedPermissionSet;GetHashCode;();summary;df-generated | +| System.Security;NamedPermissionSet;NamedPermissionSet;(System.Security.NamedPermissionSet);summary;df-generated | +| System.Security;NamedPermissionSet;NamedPermissionSet;(System.String);summary;df-generated | +| System.Security;NamedPermissionSet;NamedPermissionSet;(System.String,System.Security.PermissionSet);summary;df-generated | +| System.Security;NamedPermissionSet;NamedPermissionSet;(System.String,System.Security.Permissions.PermissionState);summary;df-generated | +| System.Security;NamedPermissionSet;ToXml;();summary;df-generated | +| System.Security;NamedPermissionSet;get_Description;();summary;df-generated | +| System.Security;NamedPermissionSet;get_Name;();summary;df-generated | +| System.Security;NamedPermissionSet;set_Description;(System.String);summary;df-generated | +| System.Security;NamedPermissionSet;set_Name;(System.String);summary;df-generated | | System.Security;PermissionSet;AddPermission;(System.Security.IPermission);summary;df-generated | | System.Security;PermissionSet;AddPermissionImpl;(System.Security.IPermission);summary;df-generated | | System.Security;PermissionSet;Assert;();summary;df-generated | @@ -42002,6 +47472,14 @@ neutral | System.Security;SecureStringMarshal;SecureStringToCoTaskMemUnicode;(System.Security.SecureString);summary;df-generated | | System.Security;SecureStringMarshal;SecureStringToGlobalAllocAnsi;(System.Security.SecureString);summary;df-generated | | System.Security;SecureStringMarshal;SecureStringToGlobalAllocUnicode;(System.Security.SecureString);summary;df-generated | +| System.Security;SecurityContext;Capture;();summary;df-generated | +| System.Security;SecurityContext;CreateCopy;();summary;df-generated | +| System.Security;SecurityContext;Dispose;();summary;df-generated | +| System.Security;SecurityContext;IsFlowSuppressed;();summary;df-generated | +| System.Security;SecurityContext;IsWindowsIdentityFlowSuppressed;();summary;df-generated | +| System.Security;SecurityContext;RestoreFlow;();summary;df-generated | +| System.Security;SecurityContext;SuppressFlow;();summary;df-generated | +| System.Security;SecurityContext;SuppressFlowWindowsIdentity;();summary;df-generated | | System.Security;SecurityCriticalAttribute;SecurityCriticalAttribute;(System.Security.SecurityCriticalScope);summary;df-generated | | System.Security;SecurityCriticalAttribute;get_Scope;();summary;df-generated | | System.Security;SecurityElement;Equal;(System.Security.SecurityElement);summary;df-generated | @@ -42038,13 +47516,67 @@ neutral | System.Security;SecurityException;set_PermitOnlySetInstance;(System.Object);summary;df-generated | | System.Security;SecurityException;set_RefusedSet;(System.String);summary;df-generated | | System.Security;SecurityException;set_Url;(System.String);summary;df-generated | +| System.Security;SecurityManager;CurrentThreadRequiresSecurityContextCapture;();summary;df-generated | +| System.Security;SecurityManager;GetStandardSandbox;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;SecurityManager;GetZoneAndOrigin;(System.Collections.ArrayList,System.Collections.ArrayList);summary;df-generated | +| System.Security;SecurityManager;IsGranted;(System.Security.IPermission);summary;df-generated | +| System.Security;SecurityManager;LoadPolicyLevelFromFile;(System.String,System.Security.PolicyLevelType);summary;df-generated | +| System.Security;SecurityManager;LoadPolicyLevelFromString;(System.String,System.Security.PolicyLevelType);summary;df-generated | +| System.Security;SecurityManager;PolicyHierarchy;();summary;df-generated | +| System.Security;SecurityManager;ResolvePolicy;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;SecurityManager;ResolvePolicy;(System.Security.Policy.Evidence,System.Security.PermissionSet,System.Security.PermissionSet,System.Security.PermissionSet,System.Security.PermissionSet);summary;df-generated | +| System.Security;SecurityManager;ResolvePolicy;(System.Security.Policy.Evidence[]);summary;df-generated | +| System.Security;SecurityManager;ResolvePolicyGroups;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;SecurityManager;ResolveSystemPolicy;(System.Security.Policy.Evidence);summary;df-generated | +| System.Security;SecurityManager;SavePolicy;();summary;df-generated | +| System.Security;SecurityManager;SavePolicyLevel;(System.Security.Policy.PolicyLevel);summary;df-generated | +| System.Security;SecurityManager;get_CheckExecutionRights;();summary;df-generated | +| System.Security;SecurityManager;get_SecurityEnabled;();summary;df-generated | +| System.Security;SecurityManager;set_CheckExecutionRights;(System.Boolean);summary;df-generated | +| System.Security;SecurityManager;set_SecurityEnabled;(System.Boolean);summary;df-generated | | System.Security;SecurityRulesAttribute;SecurityRulesAttribute;(System.Security.SecurityRuleSet);summary;df-generated | | System.Security;SecurityRulesAttribute;get_RuleSet;();summary;df-generated | | System.Security;SecurityRulesAttribute;get_SkipVerificationInFullTrust;();summary;df-generated | | System.Security;SecurityRulesAttribute;set_SkipVerificationInFullTrust;(System.Boolean);summary;df-generated | +| System.Security;SecurityState;EnsureState;();summary;df-generated | +| System.Security;SecurityState;IsStateAvailable;();summary;df-generated | | System.Security;VerificationException;VerificationException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Security;VerificationException;VerificationException;(System.String);summary;df-generated | | System.Security;VerificationException;VerificationException;(System.String,System.Exception);summary;df-generated | +| System.Security;XmlSyntaxException;XmlSyntaxException;(System.Int32);summary;df-generated | +| System.Security;XmlSyntaxException;XmlSyntaxException;(System.Int32,System.String);summary;df-generated | +| System.Security;XmlSyntaxException;XmlSyntaxException;(System.String);summary;df-generated | +| System.Security;XmlSyntaxException;XmlSyntaxException;(System.String,System.Exception);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermission;ServiceControllerPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermission;ServiceControllerPermission;(System.ServiceProcess.ServiceControllerPermissionAccess,System.String,System.String);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermission;ServiceControllerPermission;(System.ServiceProcess.ServiceControllerPermissionEntry[]);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermission;get_PermissionEntries;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;CreatePermission;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;ServiceControllerPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;get_MachineName;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;get_PermissionAccess;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;get_ServiceName;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;set_MachineName;(System.String);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;set_PermissionAccess;(System.ServiceProcess.ServiceControllerPermissionAccess);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionAttribute;set_ServiceName;(System.String);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntry;ServiceControllerPermissionEntry;(System.ServiceProcess.ServiceControllerPermissionAccess,System.String,System.String);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntry;get_MachineName;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntry;get_PermissionAccess;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntry;get_ServiceName;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;Add;(System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;AddRange;(System.ServiceProcess.ServiceControllerPermissionEntryCollection);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;AddRange;(System.ServiceProcess.ServiceControllerPermissionEntry[]);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;Contains;(System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;CopyTo;(System.ServiceProcess.ServiceControllerPermissionEntry[],System.Int32);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;IndexOf;(System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;Insert;(System.Int32,System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;OnClear;();summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;OnInsert;(System.Int32,System.Object);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;OnRemove;(System.Int32,System.Object);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;OnSet;(System.Int32,System.Object,System.Object);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;Remove;(System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;get_Item;(System.Int32);summary;df-generated | +| System.ServiceProcess;ServiceControllerPermissionEntryCollection;set_Item;(System.Int32,System.ServiceProcess.ServiceControllerPermissionEntry);summary;df-generated | | System.Text.Encodings.Web;HtmlEncoder;Create;(System.Text.Encodings.Web.TextEncoderSettings);summary;df-generated | | System.Text.Encodings.Web;HtmlEncoder;Create;(System.Text.Unicode.UnicodeRange[]);summary;df-generated | | System.Text.Encodings.Web;HtmlEncoder;get_Default;();summary;df-generated | @@ -44261,6 +49793,18 @@ neutral | System.Transactions;CommittableTransaction;get_CompletedSynchronously;();summary;df-generated | | System.Transactions;CommittableTransaction;get_IsCompleted;();summary;df-generated | | System.Transactions;DependentTransaction;Complete;();summary;df-generated | +| System.Transactions;DistributedTransactionPermission;Copy;();summary;df-generated | +| System.Transactions;DistributedTransactionPermission;DistributedTransactionPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Transactions;DistributedTransactionPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Transactions;DistributedTransactionPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Transactions;DistributedTransactionPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Transactions;DistributedTransactionPermission;IsUnrestricted;();summary;df-generated | +| System.Transactions;DistributedTransactionPermission;ToXml;();summary;df-generated | +| System.Transactions;DistributedTransactionPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Transactions;DistributedTransactionPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Transactions;DistributedTransactionPermissionAttribute;DistributedTransactionPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Transactions;DistributedTransactionPermissionAttribute;get_Unrestricted;();summary;df-generated | +| System.Transactions;DistributedTransactionPermissionAttribute;set_Unrestricted;(System.Boolean);summary;df-generated | | System.Transactions;Enlistment;Done;();summary;df-generated | | System.Transactions;IDtcTransaction;Abort;(System.IntPtr,System.Int32,System.Int32);summary;df-generated | | System.Transactions;IDtcTransaction;Commit;(System.Int32,System.Int32,System.Int32);summary;df-generated | @@ -44351,6 +49895,21 @@ neutral | System.Transactions;TransactionScope;TransactionScope;(System.Transactions.TransactionScopeOption,System.Transactions.TransactionOptions,System.Transactions.EnterpriseServicesInteropOption);summary;df-generated | | System.Transactions;TransactionScope;TransactionScope;(System.Transactions.TransactionScopeOption,System.Transactions.TransactionOptions,System.Transactions.TransactionScopeAsyncFlowOption);summary;df-generated | | System.Transactions;TransactionScope;TransactionScope;(System.Transactions.TransactionScopeOption,System.Transactions.TransactionScopeAsyncFlowOption);summary;df-generated | +| System.Web;AspNetHostingPermission;AspNetHostingPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Web;AspNetHostingPermission;AspNetHostingPermission;(System.Web.AspNetHostingPermissionLevel);summary;df-generated | +| System.Web;AspNetHostingPermission;Copy;();summary;df-generated | +| System.Web;AspNetHostingPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Web;AspNetHostingPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Web;AspNetHostingPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Web;AspNetHostingPermission;IsUnrestricted;();summary;df-generated | +| System.Web;AspNetHostingPermission;ToXml;();summary;df-generated | +| System.Web;AspNetHostingPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Web;AspNetHostingPermission;get_Level;();summary;df-generated | +| System.Web;AspNetHostingPermission;set_Level;(System.Web.AspNetHostingPermissionLevel);summary;df-generated | +| System.Web;AspNetHostingPermissionAttribute;AspNetHostingPermissionAttribute;(System.Security.Permissions.SecurityAction);summary;df-generated | +| System.Web;AspNetHostingPermissionAttribute;CreatePermission;();summary;df-generated | +| System.Web;AspNetHostingPermissionAttribute;get_Level;();summary;df-generated | +| System.Web;AspNetHostingPermissionAttribute;set_Level;(System.Web.AspNetHostingPermissionLevel);summary;df-generated | | System.Web;HttpUtility;ParseQueryString;(System.String);summary;df-generated | | System.Web;HttpUtility;ParseQueryString;(System.String,System.Text.Encoding);summary;df-generated | | System.Web;HttpUtility;UrlDecode;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding);summary;df-generated | @@ -44365,6 +49924,26 @@ neutral | System.Web;HttpUtility;UrlEncodeUnicodeToBytes;(System.String);summary;df-generated | | System.Windows.Input;ICommand;CanExecute;(System.Object);summary;df-generated | | System.Windows.Input;ICommand;Execute;(System.Object);summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;AssemblyAccessTo;(System.Reflection.Assembly);summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;AssemblyAccessTo;(System.Reflection.AssemblyName);summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;PrivateAccessTo;(System.String);summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;PrivateAccessTo;(System.Type);summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;get_AssemblyAccessToAssemblyName;();summary;df-generated | +| System.Xaml.Permissions;XamlAccessLevel;get_PrivateAccessToTypeName;();summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;Copy;();summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;Equals;(System.Object);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;FromXml;(System.Security.SecurityElement);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;GetHashCode;();summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;Includes;(System.Xaml.Permissions.XamlAccessLevel);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;Intersect;(System.Security.IPermission);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;IsSubsetOf;(System.Security.IPermission);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;IsUnrestricted;();summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;ToXml;();summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;Union;(System.Security.IPermission);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;XamlLoadPermission;(System.Collections.Generic.IEnumerable);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;XamlLoadPermission;(System.Security.Permissions.PermissionState);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;XamlLoadPermission;(System.Xaml.Permissions.XamlAccessLevel);summary;df-generated | +| System.Xaml.Permissions;XamlLoadPermission;get_AllowedAccess;();summary;df-generated | | System.Xml.Linq;Extensions;Remove;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Xml.Linq;Extensions;Remove;(System.Collections.Generic.IEnumerable);summary;df-generated | | System.Xml.Linq;XAttribute;Remove;();summary;df-generated | @@ -46029,6 +51608,11 @@ neutral | System;ApplicationId;get_Name;();summary;df-generated | | System;ApplicationId;get_ProcessorArchitecture;();summary;df-generated | | System;ApplicationId;get_Version;();summary;df-generated | +| System;ApplicationIdentity;ApplicationIdentity;(System.String);summary;df-generated | +| System;ApplicationIdentity;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | +| System;ApplicationIdentity;ToString;();summary;df-generated | +| System;ApplicationIdentity;get_CodeBase;();summary;df-generated | +| System;ApplicationIdentity;get_FullName;();summary;df-generated | | System;ArgIterator;ArgIterator;(System.RuntimeArgumentHandle);summary;df-generated | | System;ArgIterator;ArgIterator;(System.RuntimeArgumentHandle,System.Void*);summary;df-generated | | System;ArgIterator;End;();summary;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 8ba293dc085..4790199738d 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -673,6 +673,11 @@ summary | Microsoft.CSharp.RuntimeBinder;Binder;false;SetMember;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;taint;df-generated | | Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[2];ReturnValue;taint;df-generated | | Microsoft.CSharp.RuntimeBinder;Binder;false;UnaryOperation;(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable);;Argument[3].Element;ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CSharpCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[this];taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CreateCompiler;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;CreateGenerator;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.CSharp;CSharpCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | | Microsoft.EntityFrameworkCore;DbSet;false;Add;(TEntity);;Argument[0];Argument[this].Element;value;manual | | Microsoft.EntityFrameworkCore;DbSet;false;AddAsync;(TEntity,System.Threading.CancellationToken);;Argument[0];Argument[this].Element;value;manual | | Microsoft.EntityFrameworkCore;DbSet;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].WithElement;Argument[this];value;manual | @@ -1418,10 +1423,50 @@ summary | Microsoft.VisualBasic;Collection;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;false;get_Item;(System.String);;Argument[this].Element;ReturnValue;value;manual | +| Microsoft.VisualBasic;VBCodeProvider;false;CreateCompiler;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;CreateGenerator;();;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| Microsoft.VisualBasic;VBCodeProvider;false;VBCodeProvider;(System.Collections.Generic.IDictionary);;Argument[0].Element;Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeFileHandle;false;SafeFileHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafePipeHandle;false;SafePipeHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeProcessHandle;false;SafeProcessHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeWaitHandle;false;SafeWaitHandle;(System.IntPtr,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| Microsoft.Win32;PowerModeChangedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.PowerModeChangedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionEndedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionEndedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionEndingEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionEndingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SessionSwitchEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.SessionSwitchEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_DisplaySettingsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_DisplaySettingsChanging;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_EventsThreadShutdown;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_InstalledFontsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_LowMemory;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_PaletteChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_PowerModeChanged;(Microsoft.Win32.PowerModeChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionEnded;(Microsoft.Win32.SessionEndedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionEnding;(Microsoft.Win32.SessionEndingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_SessionSwitch;(Microsoft.Win32.SessionSwitchEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_TimeChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_TimerElapsed;(Microsoft.Win32.TimerElapsedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_UserPreferenceChanged;(Microsoft.Win32.UserPreferenceChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;add_UserPreferenceChanging;(Microsoft.Win32.UserPreferenceChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_DisplaySettingsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_DisplaySettingsChanging;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_EventsThreadShutdown;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_InstalledFontsChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_LowMemory;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_PaletteChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_PowerModeChanged;(Microsoft.Win32.PowerModeChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionEnded;(Microsoft.Win32.SessionEndedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionEnding;(Microsoft.Win32.SessionEndingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_SessionSwitch;(Microsoft.Win32.SessionSwitchEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_TimeChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_TimerElapsed;(Microsoft.Win32.TimerElapsedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_UserPreferenceChanged;(Microsoft.Win32.UserPreferenceChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;SystemEvents;false;remove_UserPreferenceChanging;(Microsoft.Win32.UserPreferenceChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;TimerElapsedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.TimerElapsedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;UserPreferenceChangedEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.UserPreferenceChangedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| Microsoft.Win32;UserPreferenceChangingEventHandler;false;BeginInvoke;(System.Object,Microsoft.Win32.UserPreferenceChangingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Newtonsoft.Json.Linq;JArray;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual | | Newtonsoft.Json.Linq;JArray;false;set_Item;(System.Object,Newtonsoft.Json.Linq.JToken);;Argument[1];Argument[this].Element;value;manual | | Newtonsoft.Json.Linq;JConstructor;false;get_Item;(System.Object);;Argument[this].Element;ReturnValue;value;manual | @@ -3521,6 +3566,72 @@ summary | System.Buffers;SequenceReader;false;get_Position;();;Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SequenceReader;false;get_UnreadSequence;();;Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SpanAction;false;BeginInvoke;(System.Span,TArg,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeCompiler;false;JoinStringArray;(System.String[],System.String);;Argument[1];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.IO.TextWriter);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateGenerator;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeDomProvider;true;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromCompileUnit;(System.CodeDom.CodeCompileUnit,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromExpression;(System.CodeDom.CodeExpression,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromNamespace;(System.CodeDom.CodeNamespace,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromStatement;(System.CodeDom.CodeStatement,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateCodeFromType;(System.CodeDom.CodeTypeDeclaration,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GenerateTypes;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentClass;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMember;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentMemberName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_CurrentTypeName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_Options;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;false;get_Output;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;CreateEscapedIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;CreateValidIdentifier;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GenerateNamespace;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CodeGenerator;true;GetTypeOutput;(System.CodeDom.CodeTypeReference);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_BracingStyle;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_IndentString;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CodeGeneratorOptions;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Add;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;AddRange;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerErrorCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CompilerErrorCollection;(System.CodeDom.Compiler.CompilerError[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;CopyTo;(System.CodeDom.Compiler.CompilerError[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Insert;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;Remove;(System.CodeDom.Compiler.CompilerError);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerErrorCollection;false;set_Item;(System.Int32,System.CodeDom.Compiler.CompilerError);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;GetExtensions;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;GetLanguages;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerInfo;false;get_CodeDomProviderType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerParameters;false;set_TempFiles;(System.CodeDom.Compiler.TempFileCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom.Compiler;CompilerResults;false;get_CompiledAssembly;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;CompilerResults;false;set_CompiledAssembly;(System.Reflection.Assembly);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[1].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[3];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;Executor;false;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);;Argument[4];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;GeneratedCodeAttribute;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;false;get_Tool;();;Argument[this];ReturnValue;taint;df-generated | @@ -3531,6 +3642,347 @@ summary | System.CodeDom.Compiler;IndentedTextWriter;false;WriteLineNoTabsAsync;(System.String);;Argument[this];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;false;get_Encoding;();;Argument[this];ReturnValue;taint;df-generated | | System.CodeDom.Compiler;IndentedTextWriter;false;get_InnerWriter;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;AddExtension;(System.String,System.Boolean);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;TempFileCollection;(System.String,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;get_BasePath;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom.Compiler;TempFileCollection;false;get_TempDir;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;CodeArgumentReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;get_ParameterName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArgumentReferenceExpression;false;set_ParameterName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.CodeDom.CodeTypeReference,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.String,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;CodeArrayCreateExpression;(System.Type,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;get_Initializers;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeArrayCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttachEventStatement;false;CodeAttachEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttachEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;CodeAttributeArgument;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeArgument;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Add;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;AddRange;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgumentCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CodeAttributeArgumentCollection;(System.CodeDom.CodeAttributeArgument[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;CopyTo;(System.CodeDom.CodeAttributeArgument[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;Remove;(System.CodeDom.CodeAttributeArgument);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeArgumentCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeArgument);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;CodeAttributeDeclaration;(System.String,System.CodeDom.CodeAttributeArgument[]);;Argument[1].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_Arguments;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_AttributeType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclaration;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Add;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;AddRange;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CodeAttributeDeclarationCollection;(System.CodeDom.CodeAttributeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeAttributeDeclaration[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;Remove;(System.CodeDom.CodeAttributeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeAttributeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeAttributeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;CodeCastExpression;(System.Type,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCastExpression;false;set_TargetType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;CodeCatchClause;(System.String,System.CodeDom.CodeTypeReference,System.CodeDom.CodeStatement[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;get_LocalName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCatchClause;false;set_CatchExceptionType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClause;false;set_LocalName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Add;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;AddRange;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClauseCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CodeCatchClauseCollection;(System.CodeDom.CodeCatchClause[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;CopyTo;(System.CodeDom.CodeCatchClause[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Insert;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;Remove;(System.CodeDom.CodeCatchClause);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCatchClauseCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCatchClause);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;CodeChecksumPragma;(System.String,System.Guid,System.Byte[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;get_FileName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeChecksumPragma;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;CodeComment;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;CodeComment;(System.String,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeComment;false;get_Text;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeComment;false;set_Text;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Add;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;AddRange;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CodeCommentStatementCollection;(System.CodeDom.CodeCommentStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;CopyTo;(System.CodeDom.CodeCommentStatement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;Remove;(System.CodeDom.CodeCommentStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeCommentStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeCommentStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeDefaultValueExpression;false;CodeDefaultValueExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDefaultValueExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;CodeDelegateCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression,System.String);;Argument[2];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;get_MethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;set_DelegateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDelegateCreateExpression;false;set_MethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Add;(System.CodeDom.CodeDirective);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;AddRange;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirectiveCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CodeDirectiveCollection;(System.CodeDom.CodeDirective[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;CopyTo;(System.CodeDom.CodeDirective[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Insert;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;Remove;(System.CodeDom.CodeDirective);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeDirectiveCollection;false;set_Item;(System.Int32,System.CodeDom.CodeDirective);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;CodeEventReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;get_EventName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeEventReferenceExpression;false;set_EventName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Add;(System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;AddRange;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CodeExpressionCollection;(System.CodeDom.CodeExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;CopyTo;(System.CodeDom.CodeExpression[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;Remove;(System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;CodeFieldReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;get_FieldName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeFieldReferenceExpression;false;set_FieldName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;CodeGotoStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;get_Label;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeGotoStatement;false;set_Label;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;CodeLabeledStatement;(System.String,System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;get_Label;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeLabeledStatement;false;set_Label;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLinePragma;false;CodeLinePragma;(System.String,System.Int32);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeLinePragma;false;get_FileName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeLinePragma;false;set_FileName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberEvent;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;CodeMemberField;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberField;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateImplementationTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateParameters;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;add_PopulateStatements;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;get_ImplementationTypes;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;get_Parameters;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;get_Statements;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateImplementationTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateParameters;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;remove_PopulateStatements;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeMemberMethod;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMemberProperty;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;CodeMethodInvokeExpression;(System.CodeDom.CodeMethodReferenceExpression,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodInvokeExpression;false;set_Method;(System.CodeDom.CodeMethodReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;CodeMethodReferenceExpression;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeTypeReference[]);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;get_MethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeMethodReferenceExpression;false;set_MethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespace;false;CodeNamespace;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateComments;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateImports;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;add_PopulateTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;get_Comments;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Imports;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;get_Types;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateComments;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateImports;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;remove_PopulateTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeNamespace;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Add;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;AddRange;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespaceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CodeNamespaceCollection;(System.CodeDom.CodeNamespace[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;CopyTo;(System.CodeDom.CodeNamespace[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Insert;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;Remove;(System.CodeDom.CodeNamespace);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespace);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;CodeNamespaceImport;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;get_Namespace;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImport;false;set_Namespace;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Add;(System.CodeDom.CodeNamespaceImport);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;AddRange;(System.CodeDom.CodeNamespaceImport[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.CodeDom;CodeNamespaceImportCollection;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeNamespaceImportCollection;false;set_Item;(System.Int32,System.CodeDom.CodeNamespaceImport);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.CodeDom.CodeTypeReference,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.String,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;CodeObjectCreateExpression;(System.Type,System.CodeDom.CodeExpression[]);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeObjectCreateExpression;false;set_CreateType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;CodeParameterDeclarationExpression;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Add;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;AddRange;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpressionCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CodeParameterDeclarationExpressionCollection;(System.CodeDom.CodeParameterDeclarationExpression[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;CopyTo;(System.CodeDom.CodeParameterDeclarationExpression[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Insert;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;Remove;(System.CodeDom.CodeParameterDeclarationExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeParameterDeclarationExpressionCollection;false;set_Item;(System.Int32,System.CodeDom.CodeParameterDeclarationExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;CodePropertyReferenceExpression;(System.CodeDom.CodeExpression,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;get_PropertyName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodePropertyReferenceExpression;false;set_PropertyName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;CodeRegionDirective;(System.CodeDom.CodeRegionMode,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;get_RegionText;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeRegionDirective;false;set_RegionText;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeEventReferenceExpression,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;CodeRemoveEventStatement;(System.CodeDom.CodeExpression,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeRemoveEventStatement;false;set_Event;(System.CodeDom.CodeEventReferenceExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;CodeSnippetCompileUnit;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetCompileUnit;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;CodeSnippetExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetExpression;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;CodeSnippetStatement;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetStatement;false;set_Value;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;CodeSnippetTypeMember;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;get_Text;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeSnippetTypeMember;false;set_Text;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Add;(System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;AddRange;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatementCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CodeStatementCollection;(System.CodeDom.CodeStatement[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;CopyTo;(System.CodeDom.CodeStatement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Insert;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;Remove;(System.CodeDom.CodeStatement);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeStatementCollection;false;set_Item;(System.Int32,System.CodeDom.CodeStatement);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;CodeTypeDeclaration;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;add_PopulateBaseTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;add_PopulateMembers;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;get_BaseTypes;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;get_Members;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclaration;false;remove_PopulateBaseTypes;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclaration;false;remove_PopulateMembers;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Add;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;AddRange;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CodeTypeDeclarationCollection;(System.CodeDom.CodeTypeDeclaration[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;CopyTo;(System.CodeDom.CodeTypeDeclaration[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;Remove;(System.CodeDom.CodeTypeDeclaration);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeDeclarationCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeDeclaration);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDelegate;false;CodeTypeDelegate;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeDelegate;false;set_ReturnType;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMember;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeMember;false;set_CustomAttributes;(System.CodeDom.CodeAttributeDeclarationCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMember;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Add;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;AddRange;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMemberCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CodeTypeMemberCollection;(System.CodeDom.CodeTypeMember[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;CopyTo;(System.CodeDom.CodeTypeMember[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;Remove;(System.CodeDom.CodeTypeMember);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeMemberCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeMember);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;CodeTypeOfExpression;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeOfExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;CodeTypeParameter;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeParameter;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Add;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;AddRange;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameterCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CodeTypeParameterCollection;(System.CodeDom.CodeTypeParameter[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;CopyTo;(System.CodeDom.CodeTypeParameter[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;Remove;(System.CodeDom.CodeTypeParameter);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeParameterCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeParameter);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.String,System.CodeDom.CodeTypeReferenceOptions);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;CodeTypeReference;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReference;false;get_BaseType;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeReference;false;set_BaseType;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Add;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;AddRange;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReferenceCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CodeTypeReferenceCollection;(System.CodeDom.CodeTypeReference[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;CopyTo;(System.CodeDom.CodeTypeReference[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Insert;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;Remove;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeTypeReferenceCollection;false;set_Item;(System.Int32,System.CodeDom.CodeTypeReference);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;CodeTypeReferenceExpression;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeTypeReferenceExpression;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.CodeDom.CodeTypeReference,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.String,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;CodeVariableDeclarationStatement;(System.Type,System.String,System.CodeDom.CodeExpression);;Argument[1];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;set_Name;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableDeclarationStatement;false;set_Type;(System.CodeDom.CodeTypeReference);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;CodeVariableReferenceExpression;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;get_VariableName;();;Argument[this];ReturnValue;taint;df-generated | +| System.CodeDom;CodeVariableReferenceExpression;false;set_VariableName;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Concurrent;BlockingCollection;false;Add;(T);;Argument[0];Argument[this].Element;value;manual | | System.Collections.Concurrent;BlockingCollection;false;Add;(T,System.Threading.CancellationToken);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Concurrent;BlockingCollection;false;BlockingCollection;(System.Collections.Concurrent.IProducerConsumerCollection);;Argument[0].Element;Argument[this];taint;df-generated | @@ -4855,6 +5307,283 @@ summary | System.ComponentModel;WarningException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;Win32Exception;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;Win32Exception;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetConfigTypeName;(System.Type);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;GetStreamNameForConfigSource;(System.String,System.String);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);;Argument[4].Element;ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForRead;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForRead;(System.String,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[1];ReturnValue;taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;false;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration.Internal;IInternalConfigHost;true;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigHost;true;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;add_ConfigChanged;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;add_ConfigRemoved;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;remove_ConfigChanged;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;IInternalConfigRoot;true;remove_ConfigRemoved;(System.Configuration.Internal.InternalConfigEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;InternalConfigEventHandler;false;BeginInvoke;(System.Object,System.Configuration.Internal.InternalConfigEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Internal;StreamChangeCallback;false;BeginInvoke;(System.String,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;Initialize;(System.String,System.Collections.Specialized.NameValueCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderBase;true;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration.Provider;ProviderCollection;false;CopyTo;(System.Configuration.Provider.ProviderBase[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration.Provider;ProviderCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;AppSettingsReader;false;GetValue;(System.String,System.Type);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;AppSettingsSection;false;get_File;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;AppSettingsSection;false;get_Settings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.ComponentModel.IComponent,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;ApplicationSettingsBase;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingChanging;(System.Configuration.SettingChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingsLoaded;(System.Configuration.SettingsLoadedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;add_SettingsSaving;(System.Configuration.SettingsSavingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;get_SettingsKey;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingChanging;(System.Configuration.SettingChangingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingsLoaded;(System.Configuration.SettingsLoadedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;remove_SettingsSaving;(System.Configuration.SettingsSavingEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ApplicationSettingsBase;false;set_SettingsKey;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CallbackValidator;false;CallbackValidator;(System.Type,System.Configuration.ValidatorCallback);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_CallbackMethodName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;get_ValidatorInstance;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;set_CallbackMethodName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CallbackValidatorAttribute;false;set_Type;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ClientSettingsSection;false;get_Settings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;AddRange;(System.String[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;CommaDelimitedStringCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;Insert;(System.Int32,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollection;false;set_Item;(System.Int32,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;CommaDelimitedStringCollectionConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateAttribute;(System.String,System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateCDataSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateComment;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateElement;(System.String,System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateSignificantWhitespace;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateTextNode;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;CreateWhitespace;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;Load;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;LoadSingleElement;(System.String,System.Xml.XmlTextReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigXmlDocument;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;GetSectionGroup;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_AssemblyStringTransformer;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_RootSectionGroup;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_SectionGroups;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_Sections;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;get_TypeStringTransformer;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;Configuration;false;set_AssemblyStringTransformer;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;Configuration;false;set_TypeStringTransformer;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_AddItemName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_ClearItemsName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;get_RemoveItemName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_AddItemName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_ClearItemsName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationCollectionAttribute;false;set_RemoveItemName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;false;get_EvaluationContext;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;DeserializeElement;(System.Xml.XmlReader,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;GetTransformedAssemblyString;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;GetTransformedTypeString;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElement;true;Reset;(System.Configuration.ConfigurationElement);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;SerializeElement;(System.Xml.XmlWriter,System.Boolean);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElement;true;SerializeToXmlElement;(System.Xml.XmlWriter,System.String);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElement;true;Unmerge;(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElement;true;get_ElementProperty;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;BaseAdd;(System.Configuration.ConfigurationElement,System.Boolean);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;ConfigurationElementCollection;(System.Collections.IComparer);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;CopyTo;(System.Configuration.ConfigurationElement[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_AddElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_ClearElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;get_RemoveElementName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_AddElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_ClearElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;false;set_RemoveElementName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Configuration.ConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationElementCollection;true;BaseAdd;(System.Int32,System.Configuration.ConfigurationElement);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;ConfigurationErrorsException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetFilename;(System.Xml.XmlReader);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Errors;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationErrorsException;false;get_Message;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;ConfigurationException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationException;false;ConfigurationException;(System.String,System.Exception,System.String,System.Int32);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConfigurationException;false;GetXmlNodeFilename;(System.Xml.XmlNode);;Argument[0].Element;ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;get_BareMessage;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationException;false;get_Filename;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationFileMap;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLocation;false;OpenConfiguration;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;Add;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationLockCollection;false;CopyTo;(System.String[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;SetFromList;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;get_AttributeList;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationLockCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;ConfigurationManager;false;OpenExeConfiguration;(System.String);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedExeConfiguration;(System.Configuration.ExeConfigurationFileMap,System.Configuration.ConfigurationUserLevel,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationManager;false;OpenMappedMachineConfiguration;(System.Configuration.ConfigurationFileMap);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationProperty;false;ConfigurationProperty;(System.String,System.Type,System.Object,System.ComponentModel.TypeConverter,System.Configuration.ConfigurationValidatorBase,System.Configuration.ConfigurationPropertyOptions,System.String);;Argument[3];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationProperty;false;get_Converter;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;Add;(System.Configuration.ConfigurationProperty);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationPropertyCollection;false;CopyTo;(System.Configuration.ConfigurationProperty[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationPropertyCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSection;true;DeserializeSection;(System.Xml.XmlReader);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSection;true;GetRuntimeObject;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;ConfigurationSectionCollection;false;Add;(System.String,System.Configuration.ConfigurationSection);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationSectionCollection;false;GetKey;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_SectionGroups;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_Sections;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroup;false;set_Type;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Add;(System.String,System.Configuration.ConfigurationSectionGroup);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConfigurationSectionGroupCollection;false;CopyTo;(System.Configuration.ConfigurationSectionGroup[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;Get;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;GetKey;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConfigurationSectionGroupCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_ConnectionString;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettings;false;get_ProviderName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;Add;(System.Configuration.ConnectionStringSettings);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ConnectionStringSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ConnectionStringSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ConnectionStringSettings);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;ConnectionStringsSection;false;get_ConnectionStrings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ContextInformation;false;get_HostingContext;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DefaultSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DefaultSettingValueAttribute;false;DefaultSettingValueAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;DefaultSettingValueAttribute;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;DictionarySectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;GenericEnumConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;GenericEnumConverter;false;GenericEnumConverter;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;IdnElement;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;IgnoreSection;false;SerializeSection;(System.Configuration.ConfigurationElement,System.String,System.Configuration.ConfigurationSaveMode);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;InfiniteTimeSpanConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;InfiniteTimeSpanConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;IriParsingElement;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationCollection;false;Add;(System.Configuration.KeyValueConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;KeyValueConfigurationCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;KeyValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;KeyValueConfigurationElement;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;get_Key;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;KeyValueConfigurationElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;get_ApplicationName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;LocalFileSettingsProvider;false;set_ApplicationName;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;Add;(System.Configuration.NameValueConfigurationElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;NameValueConfigurationCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;NameValueConfigurationCollection;false;set_Item;(System.String,System.Configuration.NameValueConfigurationElement);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;NameValueConfigurationElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;NameValueConfigurationElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;NameValueFileSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.Configuration;NameValueSectionHandler;false;Create;(System.Object,System.Object,System.Xml.XmlNode);;Argument[2].Element;ReturnValue;taint;df-generated | +| System.Configuration;PropertyInformation;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;PropertyInformationCollection;false;CopyTo;(System.Configuration.PropertyInformation[],System.Int32);;Argument[this];Argument[0].Element;taint;df-generated | +| System.Configuration;PropertyInformationCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationSection;false;get_DefaultProvider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedConfigurationSection;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedProviderSettings;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProtectedProviderSettings;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Parameters;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettings;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;Add;(System.Configuration.ProviderSettings);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;ProviderSettingsCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;ProviderSettingsCollection;false;set_Item;(System.Int32,System.Configuration.ProviderSettings);;Argument[this];Argument[1];taint;df-generated | +| System.Configuration;RegexStringValidator;false;RegexStringValidator;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SchemeSettingElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SchemeSettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_ConfigSource;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_ProtectionProvider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;get_Type;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SectionInformation;false;set_ConfigSource;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SectionInformation;false;set_Type;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;SettingChangingEventArgs;(System.String,System.String,System.String,System.Object,System.Boolean);;Argument[3];Argument[this];taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_NewValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingClass;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingKey;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventArgs;false;get_SettingName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingChangingEventHandler;false;BeginInvoke;(System.Object,System.Configuration.SettingChangingEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;SettingElement;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingElement;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingElementCollection;false;Add;(System.Configuration.SettingElement);;Argument[this];Argument[0];taint;df-generated | +| System.Configuration;SettingElementCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingElementCollection;false;GetElementKey;(System.Configuration.ConfigurationElement);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SettingValueElement;false;get_ValueXml;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingValueElement;false;set_ValueXml;(System.Xml.XmlNode);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[1].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Initialize;(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection,System.Configuration.SettingsProviderCollection);;Argument[2].Element;Argument[this];taint;df-generated | +| System.Configuration;SettingsBase;false;Synchronized;(System.Configuration.SettingsBase);;Argument[0];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Context;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_PropertyValues;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsBase;true;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsDescriptionAttribute;false;SettingsDescriptionAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsDescriptionAttribute;false;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsGroupDescriptionAttribute;false;SettingsGroupDescriptionAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsGroupDescriptionAttribute;false;get_Description;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsGroupNameAttribute;false;SettingsGroupNameAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsGroupNameAttribute;false;get_GroupName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsLoadedEventArgs;false;SettingsLoadedEventArgs;(System.Configuration.SettingsProvider);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsLoadedEventArgs;false;get_Provider;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsLoadedEventHandler;false;BeginInvoke;(System.Object,System.Configuration.SettingsLoadedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;SettingsPropertyCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingsPropertyCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;SettingsPropertyValue;false;get_PropertyValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;get_SerializedValue;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;set_PropertyValue;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValue;false;set_SerializedValue;(System.Object);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;Add;(System.Configuration.SettingsPropertyValue);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Configuration;SettingsPropertyValueCollection;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsPropertyValueCollection;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.String);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsProviderAttribute;false;SettingsProviderAttribute;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;SettingsProviderAttribute;false;get_ProviderTypeName;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsProviderCollection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;SettingsSavingEventHandler;false;BeginInvoke;(System.Object,System.ComponentModel.CancelEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Configuration;StringValidator;false;StringValidator;(System.Int32,System.Int32,System.String);;Argument[2];Argument[this];taint;df-generated | +| System.Configuration;SubclassTypeValidator;false;SubclassTypeValidator;(System.Type);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[0];Argument[this];taint;df-generated | +| System.Configuration;TimeSpanValidator;false;TimeSpanValidator;(System.TimeSpan,System.TimeSpan,System.Boolean,System.Int64);;Argument[1];Argument[this];taint;df-generated | +| System.Configuration;TypeNameConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_Idn;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_IriParsing;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;UriSection;false;get_SchemeSettings;();;Argument[this];ReturnValue;taint;df-generated | +| System.Configuration;ValidatorCallback;false;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertFrom;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object);;Argument[2];ReturnValue;taint;df-generated | +| System.Configuration;WhiteSpaceTrimStringConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Data.Common;DataAdapter;false;add_FillError;(System.Data.FillErrorEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Common;DataAdapter;false;get_TableMappings;();;Argument[this];ReturnValue;taint;df-generated | | System.Data.Common;DataAdapter;false;remove_FillError;(System.Data.FillErrorEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -5038,9 +5767,403 @@ summary | System.Data.Common;RowUpdatingEventArgs;false;set_BaseCommand;(System.Data.IDbCommand);;Argument[0];Argument[this];taint;df-generated | | System.Data.Common;RowUpdatingEventArgs;false;set_Command;(System.Data.IDbCommand);;Argument[0];Argument[this];taint;df-generated | | System.Data.Common;RowUpdatingEventArgs;false;set_Errors;(System.Exception);;Argument[0];Argument[this];taint;df-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;All;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Any;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;CrossApply;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;FullOuterJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;InnerJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Join;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func,System.Func);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;LeftOuterJoin;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderBy;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderBy;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OrderByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;OuterApply;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Select;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;SelectMany;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenBy;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenBy;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;ThenByDescending;(System.Data.Entity.Core.Common.CommandTrees.DbSortExpression,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;DbExpressionBuilder;false;Where;(System.Data.Entity.Core.Common.CommandTrees.DbExpression,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[16];Argument[16].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[15];Argument[15].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[14];Argument[14].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[13];Argument[13].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[12];Argument[12].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[11];Argument[11].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[10];Argument[10].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[9];Argument[9].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[6];Argument[6].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common.CommandTrees;DbLambda;false;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common;DbCommandDefinition;false;DbCommandDefinition;(System.Data.Common.DbCommand,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Common;DbProviderServices;true;RegisterInfoMessageHandler;(System.Data.Common.DbConnection,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;false;add_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;false;remove_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;LoadFromAssembly;(System.Reflection.Assembly,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;false;MetadataWorkspace;(System.Func,System.Func,System.Func,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;ObjectItemCollection;false;LoadFromAssembly;(System.Reflection.Assembly,System.Data.Entity.Core.Metadata.Edm.EdmItemCollection,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;SsdlSerializer;false;add_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Metadata.Edm;SsdlSerializer;false;remove_OnError;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;RelatedEnd;false;add_AssociationChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects.DataClasses;RelatedEnd;false;remove_AssociationChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;CompiledQuery;false;Compile;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;LoadProperty;(TEntity,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;LoadProperty;(TEntity,System.Linq.Expressions.Expression>,System.Data.Entity.Core.Objects.MergeOption);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;add_ObjectMaterialized;(System.Data.Entity.Core.Objects.ObjectMaterializedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;add_SavingChanges;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;remove_ObjectMaterialized;(System.Data.Entity.Core.Objects.ObjectMaterializedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectContext;false;remove_SavingChanges;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectMaterializedEventHandler;false;BeginInvoke;(System.Object,System.Data.Entity.Core.Objects.ObjectMaterializedEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;ChangeRelationshipState;(TEntity,System.Object,System.Linq.Expressions.Expression>,System.Data.Entity.EntityState);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;add_ObjectStateManagerChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Core.Objects;ObjectStateManager;false;remove_ObjectStateManagerChanged;(System.ComponentModel.CollectionChangeEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;DbConfigurationLoadedEventArgs;false;ReplaceService;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;ExecutionStrategyResolver;false;ExecutionStrategyResolver;(System.String,System.String,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;SingletonDependencyResolver;false;SingletonDependencyResolver;(T,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.DependencyResolution;TransactionHandlerResolver;false;TransactionHandlerResolver;(System.Func,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Func>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;Executor+OperationBase;true;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Design;ReportHandler;false;ReportHandler;(System.Action,System.Action,System.Action,System.Action);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Interception;DatabaseLogFormatter;false;DatabaseLogFormatter;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure.Interception;DatabaseLogFormatter;false;DatabaseLogFormatter;(System.Data.Entity.DbContext,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;CommitFailureHandler;false;CommitFailureHandler;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbComplexPropertyEntry;false;ComplexProperty;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbComplexPropertyEntry;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbContextInfo;false;set_OnModelCreating;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Collection;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;ComplexProperty;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbEntityEntry;false;Reference;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbExecutionStrategy;false;UnwrapAndHandleException;(System.Exception,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AllAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AllAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AnyAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;AnyAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;CountAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;CountAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstOrDefaultAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;FirstOrDefaultAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ForEachAsync;(System.Action,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;LongCountAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;LongCountAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleOrDefaultAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;SingleOrDefaultAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Collections.Generic.IEqualityComparer);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;DbRawSqlQuery;false;ToDictionaryAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;Execute;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;Execute;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;ExecuteAsync;(System.Func,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Infrastructure;IDbExecutionStrategy;true;ExecuteAsync;(System.Func>,System.Threading.CancellationToken);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;ForeignKey;(System.String,System.Linq.Expressions.Expression>,System.Boolean,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;Index;(System.Linq.Expressions.Expression>,System.String,System.Boolean,System.Boolean,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations.Builders;TableBuilder;false;PrimaryKey;(System.Linq.Expressions.Expression>,System.String,System.Boolean,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AddColumn;(System.String,System.String,System.Func,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterColumn;(System.String,System.String,System.Func,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterStoredProcedure;(System.String,System.Func,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;AlterTableAnnotations;(System.String,System.Func,System.Collections.Generic.IDictionary,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateStoredProcedure;(System.String,System.Func,System.String,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateTable;(System.String,System.Func,System.Collections.Generic.IDictionary,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigration;false;CreateTable;(System.String,System.Func,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbMigrationsConfiguration;false;SetHistoryContextFactory;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.Migrations;DbSetMigrationsExtensions;false;AddOrUpdate;(System.Data.Entity.IDbSet,System.Linq.Expressions.Expression>,TEntity[]);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;AssociationModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Delete;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Insert;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionModificationStoredProceduresConfiguration;false;Update;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;MapToStoredProcedures;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ConventionTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DeleteModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;DependentNavigationPropertyConfiguration;false;HasForeignKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Properties;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;EntityMappingConfiguration;false;Requires;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ForeignKeyNavigationPropertyConfiguration;false;Map;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;InsertModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyNavigationPropertyConfiguration;false;WithRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;LeftKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProcedureConfiguration;false;RightKeyParameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProceduresConfiguration;false;Delete;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyModificationStoredProceduresConfiguration;false;Insert;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyNavigationPropertyConfiguration;false;Map;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ManyToManyNavigationPropertyConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Delete;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Insert;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;ModificationStoredProceduresConfiguration;false;Update;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithOptionalDependent;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithOptionalPrincipal;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;OptionalNavigationPropertyConfiguration;false;WithRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;PropertyConventionWithHavingConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithRequiredDependent;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;RequiredNavigationPropertyConfiguration;false;WithRequiredPrincipal;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;StructuralTypeConfiguration;false;Property;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Configure;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Having;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionConfiguration;false;Where;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionWithHavingConfiguration;false;Configure;(System.Action,TValue>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;TypeConventionWithHavingConfiguration;false;Configure;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Navigation;(System.Linq.Expressions.Expression>,System.Action>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Parameter;(System.Linq.Expressions.Expression>,System.String,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Configuration;UpdateModificationStoredProcedureConfiguration;false;Result;(System.Linq.Expressions.Expression>,System.String);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Conventions;AttributeToColumnAnnotationConvention;false;AttributeToColumnAnnotationConvention;(System.String,System.Func,TAnnotation>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration.Conventions;AttributeToTableAnnotationConvention;false;AttributeToTableAnnotationConvention;(System.String,System.Func,TAnnotation>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;ComplexTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasIndex;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>,System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasKey;(System.Linq.Expressions.Expression>,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasMany;(System.Linq.Expressions.Expression>>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasOptional;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;HasRequired;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Ignore;(System.Linq.Expressions.Expression>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Map;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;Map;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity.ModelConfiguration;EntityTypeConfiguration;false;MapToStoredProcedures;(System.Action>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;Database;false;set_Log;(System.Action);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetContextFactory;(System.Type,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetContextFactory;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDatabaseLogFormatter;(System.Func,System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDefaultHistoryContext;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetDefaultTransactionHandler;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetExecutionStrategy;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetExecutionStrategy;(System.String,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetHistoryContext;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetMetadataAnnotationSerializer;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetMigrationSqlGenerator;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetModelCacheKey;(System.Func);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetTransactionHandler;(System.String,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;SetTransactionHandler;(System.String,System.Func,System.String);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;add_Loaded;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;DbConfiguration;false;remove_Loaded;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Entity;DbSet;false;Add;(TEntity);;Argument[0];Argument[this].Element;value;manual | | System.Data.Entity;DbSet;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].WithElement;Argument[this];value;manual | | System.Data.Entity;DbSet;false;Attach;(TEntity);;Argument[0];Argument[this].Element;value;manual | +| System.Data.Entity;QueryableExtensions;false;AllAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AllAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AnyAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AnyAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;AverageAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;CountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;CountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;FirstOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ForEachAsync;(System.Linq.IQueryable,System.Action,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Include;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;LongCountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;LongCountAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MaxAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MaxAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MinAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;MinAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SingleOrDefaultAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Skip;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;SumAsync;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;Take;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Func,System.Threading.CancellationToken);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Collections.Generic.IEqualityComparer,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Data.Entity;QueryableExtensions;false;ToDictionaryAsync;(System.Linq.IQueryable,System.Func,System.Threading.CancellationToken);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;OnChangeEventHandler;false;BeginInvoke;(System.Object,System.Data.SqlClient.SqlNotificationEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlBulkCopy;false;add_SqlRowsCopied;(System.Data.SqlClient.SqlRowsCopiedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlBulkCopy;false;remove_SqlRowsCopied;(System.Data.SqlClient.SqlRowsCopiedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -5821,6 +6944,19 @@ summary | System.Diagnostics;TraceSource;false;get_Switch;();;Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;TraceSource;false;remove_Initializing;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Diagnostics;TraceSource;false;set_Switch;(System.Diagnostics.SourceSwitch);;Argument[0];Argument[this];taint;df-generated | +| System.Drawing.Configuration;SystemDrawingSection;false;get_BitmapSuffix;();;Argument[this];ReturnValue;taint;df-generated | +| System.Drawing.Imaging;PlayRecordCallback;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_BeginPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_EndPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_PrintPage;(System.Drawing.Printing.PrintPageEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;add_QueryPageSettings;(System.Drawing.Printing.QueryPageSettingsEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_BeginPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_EndPrint;(System.Drawing.Printing.PrintEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_PrintPage;(System.Drawing.Printing.PrintPageEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintDocument;false;remove_QueryPageSettings;(System.Drawing.Printing.QueryPageSettingsEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.PrintEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;PrintPageEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.PrintPageEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing.Printing;QueryPageSettingsEventHandler;false;BeginInvoke;(System.Object,System.Drawing.Printing.QueryPageSettingsEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Drawing;Color;false;FromName;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;Color;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System.Drawing;Color;false;get_Name;();;Argument[this];ReturnValue;taint;df-generated | @@ -5828,6 +6964,58 @@ summary | System.Drawing;ColorConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Drawing;ColorTranslator;false;FromHtml;(System.String);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;ColorTranslator;false;ToHtml;(System.Drawing.Color);;Argument[0];ReturnValue;taint;df-generated | +| System.Drawing;Graphics+DrawImageAbort;false;BeginInvoke;(System.IntPtr,System.AsyncCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback,System.AsyncCallback,System.Object);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;BeginInvoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback,System.AsyncCallback,System.Object);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics+EnumerateMetafileProc;false;Invoke;(System.Drawing.Imaging.EmfPlusRecordType,System.Int32,System.Int32,System.IntPtr,System.Drawing.Imaging.PlayRecordCallback);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.Int32);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.Int32);;Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Int32,System.Int32,System.Int32,System.Int32,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.IntPtr);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;DrawImage;(System.Drawing.Image,System.Drawing.Rectangle,System.Single,System.Single,System.Single,System.Single,System.Drawing.GraphicsUnit,System.Drawing.Imaging.ImageAttributes,System.Drawing.Graphics+DrawImageAbort,System.IntPtr);;Argument[8];Argument[8].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.PointF[],System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Point[],System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.Rectangle,System.Drawing.Rectangle,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Graphics;false;EnumerateMetafile;(System.Drawing.Imaging.Metafile,System.Drawing.RectangleF,System.Drawing.RectangleF,System.Drawing.GraphicsUnit,System.Drawing.Graphics+EnumerateMetafileProc,System.IntPtr,System.Drawing.Imaging.ImageAttributes);;Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Image+GetThumbnailImageAbort;false;BeginInvoke;(System.AsyncCallback,System.Object);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Drawing;Image;false;GetThumbnailImage;(System.Int32,System.Int32,System.Drawing.Image+GetThumbnailImageAbort,System.IntPtr);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | +| System.Drawing;ImageAnimator;false;Animate;(System.Drawing.Image,System.EventHandler);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Drawing;ImageAnimator;false;StopAnimate;(System.Drawing.Image,System.EventHandler);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Drawing;PointConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | | System.Drawing;Rectangle;false;Inflate;(System.Drawing.Rectangle,System.Int32,System.Int32);;Argument[0];ReturnValue;taint;df-generated | | System.Drawing;RectangleConverter;false;ConvertTo;(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object,System.Type);;Argument[2];ReturnValue;taint;df-generated | @@ -7857,6 +9045,12 @@ summary | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[1].Element;Argument[2].Parameter[1];value;manual | | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2].ReturnValue;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Zip;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2];Argument[2].Parameter[delegate-self];value;manual | +| System.Media;SoundPlayer;false;add_LoadCompleted;(System.ComponentModel.AsyncCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;add_SoundLocationChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;add_StreamChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_LoadCompleted;(System.ComponentModel.AsyncCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_SoundLocationChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Media;SoundPlayer;false;remove_StreamChanged;(System.EventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.DateTime);;Argument[0];Argument[this];taint;df-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan);;Argument[1];Argument[this];taint;df-generated | | System.Net.Cache;HttpRequestCachePolicy;false;HttpRequestCachePolicy;(System.Net.Cache.HttpCacheAgeControl,System.TimeSpan,System.TimeSpan);;Argument[1];Argument[this];taint;df-generated | @@ -8262,6 +9456,7 @@ summary | System.Net.NetworkInformation;NetworkChange;false;add_NetworkAvailabilityChanged;(System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.NetworkInformation;NetworkChange;false;remove_NetworkAddressChanged;(System.Net.NetworkInformation.NetworkAddressChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.NetworkInformation;NetworkChange;false;remove_NetworkAvailabilityChanged;(System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| System.Net.NetworkInformation;NetworkInformationPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | | System.Net.NetworkInformation;PhysicalAddress;false;GetAddressBytes;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.NetworkInformation;PhysicalAddress;false;PhysicalAddress;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.Net.NetworkInformation;Ping;false;add_PingCompleted;(System.Net.NetworkInformation.PingCompletedEventHandler);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -10642,7 +11837,27 @@ summary | System.Security.Cryptography;SymmetricAlgorithm;true;get_LegalKeySizes;();;Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography;SymmetricAlgorithm;true;set_IV;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | | System.Security.Cryptography;SymmetricAlgorithm;true;set_Key;(System.Byte[]);;Argument[0].Element;Argument[this];taint;df-generated | +| System.Security.Permissions;FileDialogPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;FileIOPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;KeyContainerPermissionAccessEntryCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Security.Permissions;PrincipalPermission;false;Copy;();;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[0];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Intersect;(System.Security.IPermission);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PrincipalPermission;false;Union;(System.Security.IPermission);;Argument[this];ReturnValue;taint;df-generated | +| System.Security.Permissions;PublisherIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;ReflectionPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;SecurityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;StrongNameIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;TypeDescriptorPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;UIPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Permissions;ZoneIdentityPermission;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;ApplicationTrustCollection;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | System.Security.Policy;Evidence;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System.Security.Policy;HashMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;PolicyStatement;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;PublisherMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;StrongNameMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | +| System.Security.Policy;ZoneMembershipCondition;false;Copy;();;Argument[this];ReturnValue;value;df-generated | | System.Security.Principal;GenericIdentity;false;Clone;();;Argument[this];ReturnValue;taint;df-generated | | System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.Security.Principal.GenericIdentity);;Argument[0];Argument[this];taint;df-generated | | System.Security.Principal;GenericIdentity;false;GenericIdentity;(System.String);;Argument[0];Argument[this];taint;df-generated | @@ -10658,7 +11873,9 @@ summary | System.Security.Principal;WindowsIdentity;false;RunImpersonated;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security.Principal;WindowsIdentity;false;RunImpersonatedAsync;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security.Principal;WindowsIdentity;false;RunImpersonatedAsync;(Microsoft.Win32.SafeHandles.SafeAccessTokenHandle,System.Func>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | +| System.Security;HostProtectionException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.Security;PermissionSet;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | +| System.Security;SecurityContext;false;Run;(System.Security.SecurityContext,System.Threading.ContextCallback,System.Object);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[0];Argument[this];taint;df-generated | | System.Security;SecurityElement;false;AddAttribute;(System.String,System.String);;Argument[1];Argument[this];taint;df-generated | | System.Security;SecurityElement;false;AddChild;(System.Security.SecurityElement);;Argument[0];Argument[this];taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/options b/csharp/ql/test/library-tests/dataflow/library/options index f03707632a4..00c7d472fd9 100644 --- a/csharp/ql/test/library-tests/dataflow/library/options +++ b/csharp/ql/test/library-tests/dataflow/library/options @@ -4,5 +4,6 @@ semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resour semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/Dapper/2.1.24/Dapper.csproj semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/ServiceStack/8.0.0/ServiceStack.csproj semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/ServiceStack.OrmLite.SqlServer/8.0.0/ServiceStack.OrmLite.SqlServer.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/EntityFramework/6.4.4/EntityFramework.csproj semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs -semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFramework.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFrameworkCore.cs diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected index 820aca482f3..8522487dff7 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected @@ -141,6 +141,35 @@ summary | System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | | System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.AddressId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.PersonId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;(System.Threading.CancellationToken);;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | neutral sourceNode sinkNode diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/options b/csharp/ql/test/library-tests/frameworks/EntityFramework/options index fe4620d4008..b7af0693383 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/options +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/options @@ -1,3 +1,4 @@ semmle-extractor-options: /nostdlib /noconfig semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFramework.cs +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/EntityFramework/6.4.4/EntityFramework.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFrameworkCore.cs diff --git a/csharp/ql/test/library-tests/frameworks/system/data/entity/options b/csharp/ql/test/library-tests/frameworks/system/data/entity/options index 07b71b05003..ee3a5b16e19 100644 --- a/csharp/ql/test/library-tests/frameworks/system/data/entity/options +++ b/csharp/ql/test/library-tests/frameworks/system/data/entity/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/EntityFramework.cs /r:System.ComponentModel.TypeConverter.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/EntityFramework/6.4.4/EntityFramework.csproj diff --git a/csharp/ql/test/library-tests/security/dataflow/flowsources/options b/csharp/ql/test/library-tests/security/dataflow/flowsources/options index bb2d8d0768e..3eae271e2e3 100644 --- a/csharp/ql/test/library-tests/security/dataflow/flowsources/options +++ b/csharp/ql/test/library-tests/security/dataflow/flowsources/options @@ -1,4 +1,4 @@ semmle-extractor-options: /nostdlib /noconfig semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/System.Data.OleDb/8.0.0/System.Data.OleDb.csproj -semmle-extractor-options: ${testdir}/../../../../resources/stubs/EntityFramework.cs +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/EntityFramework/6.4.4/EntityFramework.csproj From 278d9b1dfb339beccb1f3df85eaab44e56b2fee5 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 19 Dec 2023 15:33:46 +0100 Subject: [PATCH 153/205] Fix integration tests --- .../standalone_dependencies_net48/Assemblies.ql | 5 +++-- .../standalone_dependencies/Assemblies.ql | 5 +++-- .../Assemblies.ql | 5 +++-- .../standalone_dependencies_nuget/Assemblies.ql | 16 +++------------- .../standalone_dependencies/Assemblies.ql | 5 +++-- 5 files changed, 15 insertions(+), 21 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql index 91ee82c1c7a..82cea3528a6 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql @@ -4,10 +4,11 @@ private string getPath(Assembly a) { not a.getCompilation().getOutputAssembly() = a and exists(string s | s = a.getFile().getAbsolutePath() | result = - s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/packages".length(), s.length()) or result = s and - not exists(s.indexOf("GitHub/packages/")) + not exists(s.indexOf("test-db/working/")) ) } diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql index 91ee82c1c7a..82cea3528a6 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql @@ -4,10 +4,11 @@ private string getPath(Assembly a) { not a.getCompilation().getOutputAssembly() = a and exists(string s | s = a.getFile().getAbsolutePath() | result = - s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/packages".length(), s.length()) or result = s and - not exists(s.indexOf("GitHub/packages/")) + not exists(s.indexOf("test-db/working/")) ) } diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql index 91ee82c1c7a..82cea3528a6 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/Assemblies.ql @@ -4,10 +4,11 @@ private string getPath(Assembly a) { not a.getCompilation().getOutputAssembly() = a and exists(string s | s = a.getFile().getAbsolutePath() | result = - s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/packages".length(), s.length()) or result = s and - not exists(s.indexOf("GitHub/packages/")) + not exists(s.indexOf("test-db/working/")) ) } diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql index 2170aef803f..e07e7c55e7d 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/Assemblies.ql @@ -4,19 +4,9 @@ private string getPath(Assembly a) { not a.getCompilation().getOutputAssembly() = a and exists(string s | s = a.getFile().getAbsolutePath() | result = - s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) - or - result = - s.substring(s.indexOf("GitHub/legacypackages/") + "GitHub/legacypackages/".length() + 16, - s.length()) - // TODO: excluding all other assemblies from the test result as mono installations seem problematic on ARM runners. - // or - // result = s.substring(s.indexOf("lib/mono/") + "lib/mono/".length(), s.length()) - // or - // result = s and - // not exists(s.indexOf("GitHub/packages/")) and - // not exists(s.indexOf("GitHub/legacypackages/")) and - // not exists(s.indexOf("lib/mono/")) + 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. ) } diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql index 91ee82c1c7a..82cea3528a6 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql @@ -4,10 +4,11 @@ private string getPath(Assembly a) { not a.getCompilation().getOutputAssembly() = a and exists(string s | s = a.getFile().getAbsolutePath() | result = - s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/packages".length(), s.length()) or result = s and - not exists(s.indexOf("GitHub/packages/")) + not exists(s.indexOf("test-db/working/")) ) } From dc8be7bbf03c4f5987348fe9abcc3795c4f4df22 Mon Sep 17 00:00:00 2001 From: Max Schaefer <54907921+max-schaefer@users.noreply.github.com> Date: Tue, 19 Dec 2023 15:09:42 +0000 Subject: [PATCH 154/205] Apply suggestions from code review Co-authored-by: Erik Krogh Kristensen --- csharp/ql/src/Security Features/CWE-079/XSS.qhelp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp index ce49ddfdfbb..382ed478125 100644 --- a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp +++ b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp @@ -13,7 +13,7 @@ without properly sanitizing the input first, allows for a cross-site scripting v

    To guard against cross-site scripting, consider using a library providing suitable encoding -functionality, such as the System.Net.WebUtility class or the AntiXSS library, +functionality, such as the System.Net.WebUtility class or the AntiXSS NuGet package, to sanitize the untrusted input before writing it to the page. The references also mention other possible solutions.

    @@ -31,13 +31,9 @@ Sanitizing the user-controlled data using WebUtility.HtmlEncode met

    -Alternatively, the AntiXSS library can be used to sanitize the user-controlled data: +Alternatively, the AntiXSS NuGet package can be used to sanitize the user-controlled data:

    -

    -Recall that this solution requires the AntiXSS library to be installed, for example by -adding a package reference to the AntiXSS NuGet package to the project file. -

    From ce130c6ed5145a102278c12926c0269eb3346025 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 15 Dec 2023 15:22:31 -0500 Subject: [PATCH 155/205] Add replace to MapMutator --- java/ql/lib/semmle/code/java/Maps.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Maps.qll b/java/ql/lib/semmle/code/java/Maps.qll index 95a3da1e4c7..1089e892415 100644 --- a/java/ql/lib/semmle/code/java/Maps.qll +++ b/java/ql/lib/semmle/code/java/Maps.qll @@ -40,7 +40,9 @@ class MapMethod extends Method { /** A method that mutates the map it belongs to. */ class MapMutator extends MapMethod { - MapMutator() { pragma[only_bind_into](this).getName().regexpMatch("(put.*|remove|clear)") } + MapMutator() { + pragma[only_bind_into](this).getName().regexpMatch("(put.*|remove|clear|replace.*)") + } } /** The `size` method of `java.util.Map`. */ From a93d6dd9568645d8c75507186131a5b2e9cd36d3 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 19 Dec 2023 10:21:51 -0500 Subject: [PATCH 156/205] Change note --- .../2023-12-19-add-replace-methods-to-mapmutator.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2023-12-19-add-replace-methods-to-mapmutator.md diff --git a/java/ql/lib/change-notes/2023-12-19-add-replace-methods-to-mapmutator.md b/java/ql/lib/change-notes/2023-12-19-add-replace-methods-to-mapmutator.md new file mode 100644 index 00000000000..9f69b26aefb --- /dev/null +++ b/java/ql/lib/change-notes/2023-12-19-add-replace-methods-to-mapmutator.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added the `Map#replace` and `Map#replaceAll` methods to the `MapMutator` class in `semmle.code.java.Maps`. From 0f71df9c41a483552324da743dee7d3ec70a5b85 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Tue, 19 Dec 2023 16:37:49 +0100 Subject: [PATCH 157/205] C#: Extend TestFile instead of separate class --- .../src/utils/modeleditor/FrameworkModeEndpointsQuery.qll | 6 +----- csharp/ql/src/utils/modeleditor/ModelEditor.qll | 7 ++----- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll index 51387628d51..31eb497b44c 100644 --- a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll +++ b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll @@ -7,11 +7,7 @@ private import ModelEditor * A class of effectively public callables from source code. */ class PublicEndpointFromSource extends Endpoint { - PublicEndpointFromSource() { - this.fromSource() and - not this.getFile() instanceof TestFile and - not this.getFile() instanceof TestSupportFile - } + PublicEndpointFromSource() { this.fromSource() and not this.getFile() instanceof TestFile } override predicate isSource() { this instanceof SourceCallable } diff --git a/csharp/ql/src/utils/modeleditor/ModelEditor.qll b/csharp/ql/src/utils/modeleditor/ModelEditor.qll index 9ae15965dc2..9c27a1bf756 100644 --- a/csharp/ql/src/utils/modeleditor/ModelEditor.qll +++ b/csharp/ql/src/utils/modeleditor/ModelEditor.qll @@ -110,11 +110,9 @@ string supportedType(Endpoint endpoint) { } string methodClassification(Call method) { - (method.getFile() instanceof TestFile or method.getFile() instanceof TestSupportFile) and - result = "test" + method.getFile() instanceof TestFile and result = "test" or not method.getFile() instanceof TestFile and - not method.getFile() instanceof TestSupportFile and result = "source" } @@ -133,9 +131,8 @@ private string qualifiedCallableName(string namespace, string type, Callable c) } /** A file that doesn't contain tests itself, but is only used in tests. */ -class TestSupportFile extends File { +class TestSupportFile extends TestFile { TestSupportFile() { - not this instanceof TestFile and this.getAbsolutePath().matches(["%/test/%", "%/tests/%"]) and not this.getAbsolutePath().matches("%/ql/test/%") // allows our test cases to work } From 35578deccb157d8854dbcc23c8ab5b6504220300 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Tue, 19 Dec 2023 09:02:55 -0800 Subject: [PATCH 158/205] Update system requirements for ruby --- docs/codeql/codeql-overview/system-requirements.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/codeql/codeql-overview/system-requirements.rst b/docs/codeql/codeql-overview/system-requirements.rst index 4788e866303..ad4c94dba93 100644 --- a/docs/codeql/codeql-overview/system-requirements.rst +++ b/docs/codeql/codeql-overview/system-requirements.rst @@ -35,3 +35,7 @@ For Python extraction: - On Linux and macOS, Python 3 must be installed and available on the ``PATH`` as ``python3`` or ``python``. - For Python 2 extraction on Linux and macOS, we also recommend having Python 2 installed and available on the ``PATH`` as ``python2``. - On Windows, the Python launcher must be installed and available on the ``PATH`` as ``py.exe``. + +For Ruby extraction: + +- On Windows, the ``msvcp140.dll`` must be installed and available in the system. This can be installed by downloading the appropriate Microsoft Visual C++ Redistributable for Visual Studio. From d09fadf22e81686227ae35ac9bcb34ef6e92fdb7 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Wed, 20 Dec 2023 09:53:51 +0100 Subject: [PATCH 159/205] C#: Introduce `TestRelatedFile` class --- .../modeleditor/FrameworkModeEndpointsQuery.qll | 2 +- csharp/ql/src/utils/modeleditor/ModelEditor.qll | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll index 31eb497b44c..6b2a6fb82fb 100644 --- a/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll +++ b/csharp/ql/src/utils/modeleditor/FrameworkModeEndpointsQuery.qll @@ -7,7 +7,7 @@ private import ModelEditor * A class of effectively public callables from source code. */ class PublicEndpointFromSource extends Endpoint { - PublicEndpointFromSource() { this.fromSource() and not this.getFile() instanceof TestFile } + PublicEndpointFromSource() { this.fromSource() and not this.getFile() instanceof TestRelatedFile } override predicate isSource() { this instanceof SourceCallable } diff --git a/csharp/ql/src/utils/modeleditor/ModelEditor.qll b/csharp/ql/src/utils/modeleditor/ModelEditor.qll index 9c27a1bf756..bdb0760da38 100644 --- a/csharp/ql/src/utils/modeleditor/ModelEditor.qll +++ b/csharp/ql/src/utils/modeleditor/ModelEditor.qll @@ -110,9 +110,9 @@ string supportedType(Endpoint endpoint) { } string methodClassification(Call method) { - method.getFile() instanceof TestFile and result = "test" + method.getFile() instanceof TestRelatedFile and result = "test" or - not method.getFile() instanceof TestFile and + not method.getFile() instanceof TestRelatedFile and result = "source" } @@ -130,9 +130,11 @@ private string qualifiedCallableName(string namespace, string type, Callable c) exists(string name | hasQualifiedMethodName(c, namespace, type, name) | result = name) } -/** A file that doesn't contain tests itself, but is only used in tests. */ -class TestSupportFile extends TestFile { - TestSupportFile() { +/** A file that is either a test file or is only used in tests. */ +class TestRelatedFile extends File { + TestRelatedFile() { + this instanceof TestFile + or this.getAbsolutePath().matches(["%/test/%", "%/tests/%"]) and not this.getAbsolutePath().matches("%/ql/test/%") // allows our test cases to work } From 12abf07d1d53a85dc93ecd373c5a6d1838e3440f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 20 Dec 2023 09:58:32 +0100 Subject: [PATCH 160/205] C++: Remove unneeded extractor option --- cpp/ql/test/header-variant-tests/clang-pch/g.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/header-variant-tests/clang-pch/g.c b/cpp/ql/test/header-variant-tests/clang-pch/g.c index feabf6be4a7..b16ca33ab36 100644 --- a/cpp/ql/test/header-variant-tests/clang-pch/g.c +++ b/cpp/ql/test/header-variant-tests/clang-pch/g.c @@ -3,4 +3,4 @@ static int g() { return 20; } #endif -// semmle-extractor-options: --clang -include-pch ${testdir}/clang-pch.testproj/f.pch --expect_errors +// semmle-extractor-options: --clang -include-pch ${testdir}/clang-pch.testproj/f.pch From 7c4275ad446d45596473ce6c7e7b6103cb755a48 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Wed, 20 Dec 2023 09:34:04 +0000 Subject: [PATCH 161/205] Address review comments. --- csharp/ql/src/Security Features/CWE-079/XSS.qhelp | 13 ++----------- .../Security Features/CWE-079/{XSS.cs => XSSBad.cs} | 0 csharp/ql/src/Security Features/CWE-079/XSSGood2.cs | 13 ------------- 3 files changed, 2 insertions(+), 24 deletions(-) rename csharp/ql/src/Security Features/CWE-079/{XSS.cs => XSSBad.cs} (100%) delete mode 100644 csharp/ql/src/Security Features/CWE-079/XSSGood2.cs diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp index 382ed478125..14c08e2fec4 100644 --- a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp +++ b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp @@ -13,8 +13,7 @@ without properly sanitizing the input first, allows for a cross-site scripting v

    To guard against cross-site scripting, consider using a library providing suitable encoding -functionality, such as the System.Net.WebUtility class or the AntiXSS NuGet package, -to sanitize the untrusted input before writing it to the page. +functionality, such as the System.Net.WebUtility class to sanitize the untrusted input before writing it to the page. The references also mention other possible solutions.

    @@ -25,15 +24,11 @@ The references also mention other possible solutions. The following example shows the page parameter being written directly to the server error page, leaving the website vulnerable to cross-site scripting.

    - +

    Sanitizing the user-controlled data using WebUtility.HtmlEncode method prevents the vulnerability:

    -

    -Alternatively, the AntiXSS NuGet package can be used to sanitize the user-controlled data: -

    - @@ -47,10 +42,6 @@ OWASP:
  • Wikipedia: Cross-site scripting.
  • -
  • -AntiXSS: AntiXSS NuGet package. -
  • -
    diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.cs b/csharp/ql/src/Security Features/CWE-079/XSSBad.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-079/XSS.cs rename to csharp/ql/src/Security Features/CWE-079/XSSBad.cs diff --git a/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs b/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs deleted file mode 100644 index 34011bf8c4f..00000000000 --- a/csharp/ql/src/Security Features/CWE-079/XSSGood2.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Web; -using Microsoft.Security.Application; - -public class XSSHandler : IHttpHandler -{ - public void ProcessRequest(HttpContext ctx) - { - string page = Encoder.HtmlEncode(ctx.Request.QueryString["page"]); - ctx.Response.Write( - "The page \"" + page + "\" was not found."); - } -} From dc36cdbede53aa1fca157b40df38a8f5d9d79ac1 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 20 Dec 2023 10:51:20 +0100 Subject: [PATCH 162/205] Only delete `dotnet-install.sh` if not in scratch directory --- .../BuildScripts.cs | 6 ++---- .../Semmle.Autobuild.CSharp/DotNetRule.cs | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index 966e8a10b1e..30b7322fe98 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -938,7 +938,6 @@ namespace Semmle.Autobuild.CSharp.Tests actions.RunProcessOut["dotnet --list-sdks"] = "2.1.2 [C:\\Program Files\\dotnet\\sdks]\n2.1.4 [C:\\Program Files\\dotnet\\sdks]"; actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"rm scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet --info"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet clean C:\Project/test.csproj"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet restore C:\Project/test.csproj"] = 0; @@ -964,7 +963,7 @@ namespace Semmle.Autobuild.CSharp.Tests actions.CreateDirectories.Add(@"scratch/.dotnet"); var autobuilder = CreateAutoBuilder(false, dotnetVersion: "2.1.3"); - TestAutobuilderScript(autobuilder, 0, 8); + TestAutobuilderScript(autobuilder, 0, 7); } [Fact] @@ -975,7 +974,6 @@ namespace Semmle.Autobuild.CSharp.Tests 2.1.4 [C:\Program Files\dotnet\sdks]"; actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"rm scratch/.dotnet/dotnet-install.sh"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet --info"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet clean C:\Project/test.csproj"] = 0; actions.RunProcess[@"scratch/.dotnet/dotnet restore C:\Project/test.csproj"] = 0; @@ -1001,7 +999,7 @@ namespace Semmle.Autobuild.CSharp.Tests actions.CreateDirectories.Add(@"scratch/.dotnet"); var autobuilder = CreateAutoBuilder(false, dotnetVersion: "2.1.3"); - TestAutobuilderScript(autobuilder, 0, 8); + TestAutobuilderScript(autobuilder, 0, 7); } private void TestDotnetVersionWindows(Action action, int commandsRun) diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index 20cebd82f56..e9ee8a0e028 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -190,7 +190,10 @@ namespace Semmle.Autobuild.CSharp } else { - var dotnetInstallPath = builder.Actions.PathCombine(FileUtils.GetTemporaryWorkingDirectory(builder.Actions.GetEnvironmentVariable, builder.Options.Language.UpperCaseName, out var _), ".dotnet", "dotnet-install.sh"); + var dotnetInstallPath = builder.Actions.PathCombine(FileUtils.GetTemporaryWorkingDirectory( + builder.Actions.GetEnvironmentVariable, + builder.Options.Language.UpperCaseName, + out var shouldCleanUp), ".dotnet", "dotnet-install.sh"); var downloadDotNetInstallSh = BuildScript.DownloadFile( "https://dot.net/v1/dotnet-install.sh", @@ -211,11 +214,17 @@ namespace Semmle.Autobuild.CSharp Argument("--install-dir"). Argument(path); - var removeScript = new CommandBuilder(builder.Actions). - RunCommand("rm"). - Argument(dotnetInstallPath); + var buildScript = downloadDotNetInstallSh & chmod.Script & install.Script; - return downloadDotNetInstallSh & chmod.Script & install.Script & BuildScript.Try(removeScript.Script); + if (shouldCleanUp) + { + var removeScript = new CommandBuilder(builder.Actions). + RunCommand("rm"). + Argument(dotnetInstallPath); + buildScript &= removeScript.Script; + } + + return buildScript; } }); } From 57e0804ceff87740a39749a04e2a4b267bc33fb4 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 20 Dec 2023 10:52:42 +0100 Subject: [PATCH 163/205] Update cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql Co-authored-by: Felicity Chapman --- .../Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql index 645d69c1398..84ef99ce955 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql +++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql @@ -1,6 +1,6 @@ /** * @name Use of unique pointer after lifetime ends - * @description If a reference to the contents of a unique pointer outlives the underlying object it may lead to unexpected behavior. + * @description Referencing the contents of a unique pointer after the underlying object has expired may lead to unexpected behavior. * @kind problem * @precision high * @id cpp/use-of-unique-pointer-after-lifetime-ends From 90fc54ca050f14f8c4be3eb257ef223cb694e0b3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 20 Dec 2023 11:04:36 +0100 Subject: [PATCH 164/205] Apply review feedback: use `Lazy<>` instead of locking --- csharp/extractor/Semmle.Util/FileUtils.cs | 36 +++++++---------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 873bca533e2..aed7ff99396 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -144,40 +144,26 @@ namespace Semmle.Util return nested; } - private static string? tempFolderPath = null; - private static readonly object lockObject = new(); + private static Lazy tempFolderPath = new Lazy(() => + { + var tempPath = Path.GetTempPath(); + var name = Guid.NewGuid().ToString("N").ToUpper(); + var tempFolder = Path.Combine(tempPath, "GitHub", name); + Directory.CreateDirectory(tempFolder); + return tempFolder; + }); public static string GetTemporaryWorkingDirectory(Func getEnvironmentVariable, string lang, out bool shouldCleanUp) { - shouldCleanUp = false; var tempFolder = getEnvironmentVariable($"CODEQL_EXTRACTOR_{lang}_SCRATCH_DIR"); if (!string.IsNullOrEmpty(tempFolder)) { + shouldCleanUp = false; return tempFolder; } - if (!string.IsNullOrEmpty(tempFolderPath)) - { - shouldCleanUp = true; - return tempFolderPath; - } - - lock (lockObject) - { - if (!string.IsNullOrEmpty(tempFolderPath)) - { - shouldCleanUp = true; - return tempFolderPath; - } - - var tempPath = Path.GetTempPath(); - var name = Guid.NewGuid().ToString("N").ToUpper(); - tempFolder = Path.Combine(tempPath, "GitHub", name); - Directory.CreateDirectory(tempFolder); - tempFolderPath = tempFolder; - shouldCleanUp = true; - return tempFolder; - } + shouldCleanUp = true; + return tempFolderPath.Value; } public static string GetTemporaryWorkingDirectory(out bool shouldCleanUp) => From b1413a1d98a16b8a496b04f18eb0e0e36f0fffc7 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 20 Dec 2023 11:16:49 +0100 Subject: [PATCH 165/205] Add `readonly` to `tempFolderPath` field --- csharp/extractor/Semmle.Util/FileUtils.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index aed7ff99396..3315c3e705e 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -144,7 +144,7 @@ namespace Semmle.Util return nested; } - private static Lazy tempFolderPath = new Lazy(() => + private static readonly Lazy tempFolderPath = new Lazy(() => { var tempPath = Path.GetTempPath(); var name = Guid.NewGuid().ToString("N").ToUpper(); From e85c4b5bf66ebefc1d5ca3838d173ffde0558c31 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:28:16 +0800 Subject: [PATCH 166/205] Update query from code review feedback to express it as a dataflow problem. --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 119 +++++++++--------- 1 file changed, 62 insertions(+), 57 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 1b949716406..8c9630a9302 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -1,12 +1,12 @@ /** * @name Load 3rd party classes or code ('unsafe reflection') without signature check - * @description Load classes or code from 3rd party package without checking the + * @description Load classes or code from 3rd party package without checking the * package signature but only rely on package name. - * This makes it susceptible to package namespace squatting + * This makes it susceptible to package namespace squatting * potentially leading to arbitrary code execution. * @problem.severity error * @precision high - * @kind problem + * @kind path-problem * @id java/unsafe-reflection * @tags security * experimental @@ -16,70 +16,75 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.controlflow.Guards +import semmle.code.java.dataflow.SSA +import semmle.code.java.frameworks.android.Intent +class CheckSignaturesGuard extends Guard instanceof EqualityTest { + MethodAccess checkSignatures; -MethodAccess getClassLoaderReachableMethodAccess(DataFlow::Node node) -{ - exists(MethodAccess maGetClassLoader | - maGetClassLoader.getCallee().getName() = "getClassLoader" and - maGetClassLoader.getQualifier() = node.asExpr() and - result = maGetClassLoader.getControlFlowNode().getASuccessor+() + CheckSignaturesGuard() { + this.getAnOperand() = checkSignatures and + checkSignatures + .getMethod() + .hasQualifiedName("android.content.pm", "PackageManager", "checkSignatures") and + exists(Expr signatureCheckResult | + this.getAnOperand() = signatureCheckResult and signatureCheckResult != checkSignatures + | + signatureCheckResult.(CompileTimeConstantExpr).getIntValue() = 0 or + signatureCheckResult + .(FieldRead) + .getField() + .hasQualifiedName("android.content.pm", "PackageManager", "SIGNATURE_MATCH") ) + } + + Expr getCheckedExpr() { result = checkSignatures.getArgument(0) } } -MethodAccess getDangerousReachableMethodAccess(MethodAccess ma) -{ - ma.getCallee().hasName(["getMethod", "getDeclaredMethod"]) and - ( - result = ma.getControlFlowNode().getASuccessor*() and - result.getCallee().hasName("invoke") - or - exists(AssignExpr ae | - ae.getSource() = ma and - ae.getDest().(VarAccess).getVariable() = - result.getQualifier().(VarAccess).getVariable() - ) +predicate signatureChecked(Expr safe) { + exists(CheckSignaturesGuard g, SsaVariable v | + v.getAUse() = g.getCheckedExpr() and + safe = v.getAUse() and + g.controls(safe.getBasicBlock(), g.(EqualityTest).polarity()) ) } -module SignaturePackageConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { -exists(MethodAccess maCheckSignatures | - maCheckSignatures - .getMethod() - .hasQualifiedName("android.content.pm", "PackageManager", "checkSignatures") and - source.asExpr() = maCheckSignatures.getArgument(0) +module InsecureLoadingConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { + exists(Method m | m = src.asExpr().(MethodAccess).getMethod() | + m.getDeclaringType().getASourceSupertype*() instanceof TypeContext and + m.hasName("createPackageContext") and + not signatureChecked(src.asExpr().(MethodAccess).getArgument(0)) ) - } + } - predicate isSink(DataFlow::Node sink) { - exists (MethodAccess maCreatePackageContext | - (maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" or - maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.Context") and - maCreatePackageContext.getCallee().getName() = "createPackageContext" and - sink.asExpr() = maCreatePackageContext.getArgument(0) - ) - } + predicate isSink(DataFlow::Node sink) { + exists(MethodAccess ma | + ma.getMethod().hasQualifiedName("java.lang", "ClassLoader", "loadClass") + | + sink.asExpr() = ma.getQualifier() + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m | + ma.getMethod() = m and + m.getDeclaringType().getASourceSupertype*() instanceof TypeContext and + m.hasName("getClassLoader") + | + node1.asExpr() = ma.getQualifier() and + node2.asExpr() = ma + ) + } } -module SigPkgCfg = TaintTracking::Global; +module InsecureLoadFlow = TaintTracking::Global; + +import InsecureLoadFlow::PathGraph + +from InsecureLoadFlow::PathNode source, InsecureLoadFlow::PathNode sink +where InsecureLoadFlow::flowPath(source, sink) +select sink.getNode(), source, sink, "Class loaded from a $@ without signature check", + source.getNode(), "third party library" -predicate isSignaturesChecked(MethodAccess maCreatePackageContext) -{ - SigPkgCfg::flowToExpr(maCreatePackageContext.getArgument(0)) -} - -from - MethodAccess maCreatePackageContext, LocalVariableDeclExpr lvdePackageContext, - DataFlow::Node sinkPackageContext, MethodAccess maGetMethod, MethodAccess maInvoke -where - maCreatePackageContext - .getMethod() - .hasQualifiedName("android.content", ["ContextWrapper", "Context"], "createPackageContext") and - not isSignaturesChecked(maCreatePackageContext) and - lvdePackageContext.getEnclosingStmt() = maCreatePackageContext.getEnclosingStmt() and - TaintTracking::localTaint(DataFlow::exprNode(lvdePackageContext.getAnAccess()), sinkPackageContext) and - getClassLoaderReachableMethodAccess(sinkPackageContext) = maGetMethod and - getDangerousReachableMethodAccess(maGetMethod) = maInvoke -select maInvoke, "Potential arbitary code execution due to $@ without $@ signature checking.", sinkPackageContext, "class loading", sinkPackageContext, "package" - From 3b7e29bed6dbaf7d5d2af59144d904965e1be849 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 12:06:52 +0100 Subject: [PATCH 167/205] Python: add test for crosstalk --- .../ApiGraphs/py3/test_crosstalk.expected | 4 ++++ .../library-tests/ApiGraphs/py3/test_crosstalk.py | 13 +++++++++++++ .../library-tests/ApiGraphs/py3/test_crosstalk.ql | 8 ++++++++ 3 files changed, 25 insertions(+) create mode 100644 python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected create mode 100644 python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.py create mode 100644 python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.ql diff --git a/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected new file mode 100644 index 00000000000..e45d1430ca5 --- /dev/null +++ b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected @@ -0,0 +1,4 @@ +| test_crosstalk.py:8:16:8:18 | ControlFlowNode for f() | bar | +| test_crosstalk.py:8:16:8:18 | ControlFlowNode for f() | baz | +| test_crosstalk.py:13:16:13:18 | ControlFlowNode for g() | bar | +| test_crosstalk.py:13:16:13:18 | ControlFlowNode for g() | baz | diff --git a/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.py b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.py new file mode 100644 index 00000000000..c58d5770031 --- /dev/null +++ b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.py @@ -0,0 +1,13 @@ + +def outer(): + from foo import bar, baz + + def inner_bar(): + f = bar + g = baz + return f() + + def inner_baz(): + f = bar + g = baz + return g() \ No newline at end of file diff --git a/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.ql b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.ql new file mode 100644 index 00000000000..0367e854835 --- /dev/null +++ b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.ql @@ -0,0 +1,8 @@ +import python +import semmle.python.ApiGraphs + +from API::CallNode callNode, string member +where + callNode = API::moduleImport("foo").getMember(member).getACall() and + callNode.getLocation().getFile().getBaseName() = "test_crosstalk.py" +select callNode, member From 169d7a3c9827684e5a888503a3adaa0c1bbc4294 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 19 Dec 2023 22:55:41 +0100 Subject: [PATCH 168/205] Python: Add scope entry definition nodes otherwise we confuse captured variables in the single scope entry cfg node. Now we have one for each defined variable. --- .../dataflow/new/internal/DataFlowPrivate.qll | 5 +++- .../dataflow/new/internal/DataFlowPublic.qll | 29 +++++++++++++++++-- .../dataflow/new/internal/LocalSources.qll | 4 +-- .../new/internal/TypeTrackingImpl.qll | 2 +- .../dataflow/coverage/localFlow.expected | 10 +++---- .../EnclosingCallable.expected | 1 - .../dataflow/typetracking/moduleattr.expected | 2 +- .../dataflow/typetracking/tracked.ql | 2 +- .../ApiGraphs/py3/test_crosstalk.expected | 2 -- 9 files changed, 41 insertions(+), 16 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 f1f9668e856..50c095c8c65 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -352,7 +352,10 @@ module LocalFlow { // nodeFrom is `y` on first line // nodeTo is `y` on second line exists(EssaDefinition def | - nodeFrom.(CfgNode).getNode() = def.(EssaNodeDefinition).getDefiningNode() and + nodeFrom.(CfgNode).getNode() = def.(EssaNodeDefinition).getDefiningNode() + or + nodeFrom.(ScopeEntryDefinitionNode).getDefinition() = def + | AdjacentUses::firstUse(def, nodeTo.(CfgNode).getNode()) ) or diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index f5731f44ab0..35eae2f99cb 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -27,9 +27,12 @@ newtype TNode = isExpressionNode(node) or node.getNode() instanceof Pattern - or - node = any(ScopeEntryDefinition def | not def.getScope() instanceof Module).getDefiningNode() } or + /** + * A node corresponding to a scope entry definition. That is, the value of a variable + * as it enters a scope. + */ + TScopeEntryDefinitionNode(ScopeEntryDefinition def) { not def.getScope() instanceof Module } or /** * A synthetic node representing the value of an object before a state change. * @@ -257,6 +260,28 @@ class ExprNode extends CfgNode { /** Gets a node corresponding to expression `e`. */ ExprNode exprNode(DataFlowExpr e) { result.getNode().getNode() = e } +/** + * A node corresponding to a scope entry definition. That is, the value of a variable + * as it enters a scope. + */ +class ScopeEntryDefinitionNode extends Node, TScopeEntryDefinitionNode { + ScopeEntryDefinition def; + + ScopeEntryDefinitionNode() { this = TScopeEntryDefinitionNode(def) } + + /** Gets the `ScopeEntryDefinition` associated with this node. */ + ScopeEntryDefinition getDefinition() { result = def } + + /** Gets the source variable represented by this node. */ + SsaSourceVariable getVariable() { result = def.getSourceVariable() } + + override Location getLocation() { result = def.getLocation() } + + override Scope getScope() { result = def.getScope() } + + override string toString() { result = "Entry definition for " + this.getVariable().toString() } +} + /** * The value of a parameter at function entry, viewed as a node in a data * flow graph. diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index ac45700bf47..34b137b3511 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -71,7 +71,7 @@ class LocalSourceNode extends Node { or // We include all scope entry definitions, as these act as the local source within the scope they // enter. - this.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() + this instanceof ScopeEntryDefinitionNode or this instanceof ParameterNode } @@ -167,7 +167,7 @@ class LocalSourceNodeNotModuleVariableNode extends LocalSourceNode { LocalSourceNodeNotModuleVariableNode() { this instanceof ExprNode or - this.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() + this instanceof ScopeEntryDefinitionNode } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 4c3538d75f7..1a9bdb5202e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -251,7 +251,7 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { e.getSourceVariable() = var and var.hasDefiningNode(def) | - nodeTo.asCfgNode() = e.getDefiningNode() and + nodeTo.(DataFlowPublic::ScopeEntryDefinitionNode).getDefinition() = e and nodeFrom.asCfgNode() = def.getValue() and var.getScope().getScope*() = nodeFrom.getScope() ) diff --git a/python/ql/test/experimental/dataflow/coverage/localFlow.expected b/python/ql/test/experimental/dataflow/coverage/localFlow.expected index 9712b9939f0..1cb2cab49fa 100644 --- a/python/ql/test/experimental/dataflow/coverage/localFlow.expected +++ b/python/ql/test/experimental/dataflow/coverage/localFlow.expected @@ -1,12 +1,12 @@ -| test.py:41:1:41:33 | Entry node for Function test_tuple_with_local_flow | test.py:42:10:42:18 | ControlFlowNode for NONSOURCE | -| test.py:41:1:41:33 | Entry node for Function test_tuple_with_local_flow | test.py:42:21:42:26 | ControlFlowNode for SOURCE | -| test.py:41:1:41:33 | Entry node for Function test_tuple_with_local_flow | test.py:44:5:44:8 | ControlFlowNode for SINK | +| test.py:41:1:41:33 | Entry definition for SsaSourceVariable NONSOURCE | test.py:42:10:42:18 | ControlFlowNode for NONSOURCE | +| test.py:41:1:41:33 | Entry definition for SsaSourceVariable SINK | test.py:44:5:44:8 | ControlFlowNode for SINK | +| test.py:41:1:41:33 | Entry definition for SsaSourceVariable SOURCE | test.py:42:21:42:26 | ControlFlowNode for SOURCE | | test.py:42:5:42:5 | ControlFlowNode for x | test.py:43:9:43:9 | ControlFlowNode for x | | test.py:42:10:42:26 | ControlFlowNode for Tuple | test.py:42:5:42:5 | ControlFlowNode for x | | test.py:43:5:43:5 | ControlFlowNode for y | test.py:44:10:44:10 | ControlFlowNode for y | | test.py:43:9:43:12 | ControlFlowNode for Subscript | test.py:43:5:43:5 | ControlFlowNode for y | -| test.py:208:1:208:53 | Entry node for Function test_nested_comprehension_deep_with_local_flow | test.py:209:25:209:30 | ControlFlowNode for SOURCE | -| test.py:208:1:208:53 | Entry node for Function test_nested_comprehension_deep_with_local_flow | test.py:210:5:210:8 | ControlFlowNode for SINK | +| test.py:208:1:208:53 | Entry definition for SsaSourceVariable SINK | test.py:210:5:210:8 | ControlFlowNode for SINK | +| test.py:208:1:208:53 | Entry definition for SsaSourceVariable SOURCE | test.py:209:25:209:30 | ControlFlowNode for SOURCE | | test.py:209:5:209:5 | ControlFlowNode for x | test.py:210:10:210:10 | ControlFlowNode for x | | test.py:209:9:209:68 | ControlFlowNode for .0 | test.py:209:9:209:68 | ControlFlowNode for .0 | | test.py:209:9:209:68 | ControlFlowNode for ListComp | test.py:209:5:209:5 | ControlFlowNode for x | diff --git a/python/ql/test/experimental/dataflow/enclosing-callable/EnclosingCallable.expected b/python/ql/test/experimental/dataflow/enclosing-callable/EnclosingCallable.expected index a2f7e02fd4e..3bd4cd81d54 100644 --- a/python/ql/test/experimental/dataflow/enclosing-callable/EnclosingCallable.expected +++ b/python/ql/test/experimental/dataflow/enclosing-callable/EnclosingCallable.expected @@ -18,7 +18,6 @@ | generator.py:1:1:1:23 | Function generator_func | generator.py:2:12:2:26 | ControlFlowNode for .0 | | generator.py:1:1:1:23 | Function generator_func | generator.py:2:12:2:26 | ControlFlowNode for .0 | | generator.py:1:1:1:23 | Function generator_func | generator.py:2:12:2:26 | ControlFlowNode for ListComp | -| generator.py:1:1:1:23 | Function generator_func | generator.py:2:12:2:26 | Entry node for Function listcomp | | generator.py:1:1:1:23 | Function generator_func | generator.py:2:13:2:13 | ControlFlowNode for Yield | | generator.py:1:1:1:23 | Function generator_func | generator.py:2:13:2:13 | ControlFlowNode for x | | generator.py:1:1:1:23 | Function generator_func | generator.py:2:19:2:19 | ControlFlowNode for x | diff --git a/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected b/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected index baa29e053ce..ff9673aaaea 100644 --- a/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected +++ b/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected @@ -6,6 +6,6 @@ module_attr_tracker | import_as_attr.py:1:28:1:35 | ControlFlowNode for attr_ref | | import_as_attr.py:3:1:3:1 | ControlFlowNode for x | | import_as_attr.py:3:5:3:12 | ControlFlowNode for attr_ref | -| import_as_attr.py:5:1:5:10 | Entry node for Function fun | +| import_as_attr.py:5:1:5:10 | Entry definition for SsaSourceVariable attr_ref | | import_as_attr.py:6:5:6:5 | ControlFlowNode for y | | import_as_attr.py:6:9:6:16 | ControlFlowNode for attr_ref | diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index e1e70761221..56e0c19eed3 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -26,7 +26,7 @@ module TrackedTest implements TestSig { not e.getLocation().getStartLine() = 0 and // We do not wish to annotate scope entry definitions, // as they do not appear in the source code. - not e.asCfgNode() = any(ScopeEntryDefinition def).getDefiningNode() and + not e instanceof DataFlow::ScopeEntryDefinitionNode and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and diff --git a/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected index e45d1430ca5..58698e5ec9d 100644 --- a/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected +++ b/python/ql/test/library-tests/ApiGraphs/py3/test_crosstalk.expected @@ -1,4 +1,2 @@ | test_crosstalk.py:8:16:8:18 | ControlFlowNode for f() | bar | -| test_crosstalk.py:8:16:8:18 | ControlFlowNode for f() | baz | -| test_crosstalk.py:13:16:13:18 | ControlFlowNode for g() | bar | | test_crosstalk.py:13:16:13:18 | ControlFlowNode for g() | baz | From 07c88dc0be38177d2c9d13d79eb8daced4f2d27a Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 10:26:07 +0100 Subject: [PATCH 169/205] Python: remove unnecessary post-processing also, it is slightly incorrect... --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 3 +-- 1 file changed, 1 insertion(+), 2 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 50c095c8c65..0043aa3b2fd 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -484,8 +484,7 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { * or at runtime when callables in the module are called. */ predicate simpleLocalFlowStepForTypetracking(Node nodeFrom, Node nodeTo) { - IncludePostUpdateFlow::step/2>::step(nodeFrom, - nodeTo) + LocalFlow::localFlowStep(nodeFrom, nodeTo) } private predicate summaryLocalStep(Node nodeFrom, Node nodeTo) { From 7749b8e60e4b86b2183381f8ff00d1ceb3b1e2b3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 12:53:37 +0100 Subject: [PATCH 170/205] Python: add change-note --- .../2023-12-20-add-scope-entry-definition-nodes.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2023-12-20-add-scope-entry-definition-nodes.md diff --git a/python/ql/lib/change-notes/2023-12-20-add-scope-entry-definition-nodes.md b/python/ql/lib/change-notes/2023-12-20-add-scope-entry-definition-nodes.md new file mode 100644 index 00000000000..f2fca008e44 --- /dev/null +++ b/python/ql/lib/change-notes/2023-12-20-add-scope-entry-definition-nodes.md @@ -0,0 +1,5 @@ +--- +category: fix +--- + +- We would previously confuse all captured variables into a single scope entry node. Now they each get their own node so they can be tracked properly. From 3cea46fe7be54c488641474ce9651e6267f6ea40 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 14:35:10 +0100 Subject: [PATCH 171/205] Python: fix typos --- .../python/dataflow/new/internal/DataFlowDispatch.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 6f58c644843..cc376ad804e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1533,7 +1533,7 @@ abstract class ParameterNodeImpl extends Node { } /** - * A sythetic parameter representing the values of the variables captured + * A synthetic parameter representing the values of the variables captured * by the callable being called. This parameter represents a single object * where all the values are stored as attributes. * This is also known as the environment part of a closure. @@ -1638,7 +1638,7 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl } /** - * A sythetic argument representing the values of the variables captured + * A synthetic argument representing the values of the variables captured * by the callable being called. This argument represents a single object * where all the values are stored as attributes. * This is also known as the environment part of a closure. @@ -1649,7 +1649,7 @@ private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl * We might want a synthetic node here, but currently that incurs problems * with non-monotonic recursion, because of the use of `resolveCall` in the * char pred. This may be solvable by using - * `CallGraphConstruction::Make` in staed of + * `CallGraphConstruction::Make` in stead of * `CallGraphConstruction::Simple::Make` appropriately. */ class CapturedVariablesArgumentNode extends CfgNode, ArgumentNode { From afb3d1da6faf0b398065ef46e1f11d9821912bfa Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 14:41:17 +0100 Subject: [PATCH 172/205] Python: move capture node to DataFlowPrivate --- .../dataflow/new/internal/DataFlowPrivate.qll | 30 +++++++++++++++++++ .../dataflow/new/internal/DataFlowPublic.qll | 30 ------------------- 2 files changed, 30 insertions(+), 30 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 b30ba3a0fbd..38301d0552c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -688,6 +688,36 @@ predicate storeStep(Node nodeFrom, ContentSet c, Node nodeTo) { VariableCapture::storeStep(nodeFrom, c, nodeTo) } +/** + * A synthesized data flow node representing a closure object that tracks + * captured variables. + */ +class SynthCaptureNode extends Node, TSynthCaptureNode { + private VariableCapture::Flow::SynthesizedCaptureNode cn; + + SynthCaptureNode() { this = TSynthCaptureNode(cn) } + + /** Gets the `SynthesizedCaptureNode` that this node represents. */ + VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } + + override Scope getScope() { result = cn.getEnclosingCallable() } + + override Location getLocation() { result = cn.getLocation() } + + override string toString() { result = cn.toString() } +} + +private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptureNode { + private SynthCaptureNode pre; + + SynthCapturePostUpdateNode() { + VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), + pre.getSynthesizedCaptureNode()) + } + + override Node getPreUpdateNode() { result = pre } +} + /** * INTERNAL: Do not use. * diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 716a9ed5c89..8f08efb0f93 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -504,36 +504,6 @@ class StarPatternElementNode extends Node, TStarPatternElementNode { override Location getLocation() { result = consumer.getLocation() } } -/** - * A synthesized data flow node representing a closure object that tracks - * captured variables. - */ -class SynthCaptureNode extends Node, TSynthCaptureNode { - private VariableCapture::Flow::SynthesizedCaptureNode cn; - - SynthCaptureNode() { this = TSynthCaptureNode(cn) } - - /** Gets the `SynthesizedCaptureNode` that this node represents. */ - VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } - - override Scope getScope() { result = cn.getEnclosingCallable() } - - override Location getLocation() { result = cn.getLocation() } - - override string toString() { result = cn.toString() } -} - -private class SynthCapturePostUpdateNode extends PostUpdateNodeImpl, SynthCaptureNode { - private SynthCaptureNode pre; - - SynthCapturePostUpdateNode() { - VariableCapture::Flow::capturePostUpdateNode(this.getSynthesizedCaptureNode(), - pre.getSynthesizedCaptureNode()) - } - - override Node getPreUpdateNode() { result = pre } -} - /** * Gets a node that controls whether other nodes are evaluated. * From 491ca3f1e695d097804a1b9cd2842eacba8bcc2e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 14:42:45 +0100 Subject: [PATCH 173/205] Python: hide synthetic variable node --- .../lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 2 ++ 1 file changed, 2 insertions(+) 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 38301d0552c..2f7d78e7214 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1052,6 +1052,8 @@ predicate nodeIsHidden(Node n) { n instanceof SynthDictSplatParameterNode or n instanceof SynthCaptureNode + or + n instanceof SynthCapturedVariablesParameterNode } class LambdaCallKind = Unit; From 215b146f06455e583eee501e2abce3c44f37ec58 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 14:45:00 +0100 Subject: [PATCH 174/205] Python: remove unused member predicate --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 3 --- 1 file changed, 3 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index cc376ad804e..87a278e0f6b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1668,9 +1668,6 @@ class CapturedVariablesArgumentNode extends CfgNode, ArgumentNode { callNode = call.getNode() and pos.isLambdaSelf() } - - /** Gets the `CallNode` that is being passed as an argument to itself. */ - CallNode getCallNode() { result = callNode } } /** Gets a viable run-time target for the call `call`. */ From 45411f4a93cc5101b109b9f639e7444ea2f52782 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 14:53:37 +0100 Subject: [PATCH 175/205] Python: make it a real consistency check --- .../dataflow-capture-consistency.ql | 0 .../dataflow-capture-consistency.expected | 17 ----------------- 2 files changed, 17 deletions(-) rename python/ql/{test/experimental/dataflow/variable-capture => consistency-queries}/dataflow-capture-consistency.ql (100%) delete mode 100644 python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected diff --git a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql b/python/ql/consistency-queries/dataflow-capture-consistency.ql similarity index 100% rename from python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql rename to python/ql/consistency-queries/dataflow-capture-consistency.ql diff --git a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected deleted file mode 100644 index 35f4edcf1fb..00000000000 --- a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected +++ /dev/null @@ -1,17 +0,0 @@ -uniqueToString -uniqueEnclosingCallable -uniqueDominator -localDominator -localSuccessor -uniqueDefiningScope -variableIsCaptured -uniqueLocation -uniqueCfgNode -uniqueWriteTarget -uniqueWriteCfgNode -uniqueReadVariable -closureMustHaveBody -closureAliasMustBeInSameScope -variableAccessAstNesting -uniqueCallableLocation -consistencyOverview From 2df8bcb9dc073c7bc0a8a0070a3c8c0fec277515 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 20 Dec 2023 14:59:07 +0100 Subject: [PATCH 176/205] Update java/ql/lib/change-notes/2023-10-31-new-models.md Co-authored-by: Jami <57204504+jcogs33@users.noreply.github.com> --- java/ql/lib/change-notes/2023-10-31-new-models.md | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/change-notes/2023-10-31-new-models.md b/java/ql/lib/change-notes/2023-10-31-new-models.md index e5155582afd..1c0fc3daa55 100644 --- a/java/ql/lib/change-notes/2023-10-31-new-models.md +++ b/java/ql/lib/change-notes/2023-10-31-new-models.md @@ -8,7 +8,6 @@ category: minorAnalysis * hudson.console * java.lang * java.net - * java.rmi.server * java.util.logging * javax.imageio.stream * org.apache.commons.io From 706e9dc896635c3b7d8aebbcaffe08115da1e4e5 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 15:23:33 +0100 Subject: [PATCH 177/205] Python: fix compilation --- python/ql/test/experimental/dataflow/typetracking/tracked.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/test/experimental/dataflow/typetracking/tracked.ql b/python/ql/test/experimental/dataflow/typetracking/tracked.ql index 115d36bcae4..ca893688256 100644 --- a/python/ql/test/experimental/dataflow/typetracking/tracked.ql +++ b/python/ql/test/experimental/dataflow/typetracking/tracked.ql @@ -3,6 +3,7 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TypeTracking import TestUtilities.InlineExpectationsTest import semmle.python.ApiGraphs +private import semmle.python.dataflow.new.internal.DataFlowPrivate as DP // ----------------------------------------------------------------------------- // tracked @@ -28,7 +29,7 @@ module TrackedTest implements TestSig { // as they do not appear in the source code. not e instanceof DataFlow::ScopeEntryDefinitionNode and // ...same for `SynthCaptureNode`s - not e instanceof DataFlow::SynthCaptureNode and + not e instanceof DP::SynthCaptureNode and tag = "tracked" and location = e.getLocation() and value = t.getAttr() and From d039ceb68912e51f773294e633e14790f84d0bce Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 15:23:45 +0100 Subject: [PATCH 178/205] Python: add test for fields --- .../test/experimental/dataflow/validTest.py | 1 + .../dataflow/variable-capture/test_fields.py | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/variable-capture/test_fields.py diff --git a/python/ql/test/experimental/dataflow/validTest.py b/python/ql/test/experimental/dataflow/validTest.py index 0c6dc259d51..76bd7bb52a5 100644 --- a/python/ql/test/experimental/dataflow/validTest.py +++ b/python/ql/test/experimental/dataflow/validTest.py @@ -75,6 +75,7 @@ if __name__ == "__main__": check_tests_valid("variable-capture.test_collections") check_tests_valid("variable-capture.by_value") check_tests_valid("variable-capture.test_library_calls") + check_tests_valid("variable-capture.test_fields") check_tests_valid("module-initialization.multiphase") check_tests_valid("fieldflow.test") check_tests_valid("fieldflow.test_dict") diff --git a/python/ql/test/experimental/dataflow/variable-capture/test_fields.py b/python/ql/test/experimental/dataflow/variable-capture/test_fields.py new file mode 100644 index 00000000000..79f2c4d04f4 --- /dev/null +++ b/python/ql/test/experimental/dataflow/variable-capture/test_fields.py @@ -0,0 +1,51 @@ +import sys +import os + +sys.path.append(os.path.dirname(os.path.dirname((__file__)))) +from testlib import expects + +# These are defined so that we can evaluate the test code. +NONSOURCE = "not a source" +SOURCE = "source" + +def is_source(x): + return x == "source" or x == b"source" or x == 42 or x == 42.0 or x == 42j + + +def SINK(x): + if is_source(x): + print("OK") + else: + print("Unexpected flow", x) + + +def SINK_F(x): + if is_source(x): + print("Unexpected flow", x) + else: + print("OK") + +class MyObj(object): + def setFoo(self, foo): + self.foo = foo + + def getFoo(self): + return self.foo + +@expects(3) +def test_captured_field(): + foo = MyObj() + foo.setFoo(NONSOURCE) + + def test(): + SINK(foo.getFoo()) #$ captured + + def read(): + return foo.getFoo() + + SINK_F(read()) + + foo.setFoo(SOURCE) + test() + + SINK(read()) #$ captured \ No newline at end of file From 39708524e7ed12fb61995cc1bc3f7fa9a184d1d8 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 20 Dec 2023 15:16:00 +0100 Subject: [PATCH 179/205] Minor fixes - Query ID - MethodAccess -> MethodCall - Redundant import - Formatting --- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 8c9630a9302..159254d4cbb 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -7,21 +7,20 @@ * @problem.severity error * @precision high * @kind path-problem - * @id java/unsafe-reflection + * @id java/android/unsafe-reflection * @tags security * experimental * external/cwe/cwe-470 */ import java -import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking import semmle.code.java.controlflow.Guards import semmle.code.java.dataflow.SSA import semmle.code.java.frameworks.android.Intent class CheckSignaturesGuard extends Guard instanceof EqualityTest { - MethodAccess checkSignatures; + MethodCall checkSignatures; CheckSignaturesGuard() { this.getAnOperand() = checkSignatures and @@ -52,15 +51,15 @@ predicate signatureChecked(Expr safe) { module InsecureLoadingConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { - exists(Method m | m = src.asExpr().(MethodAccess).getMethod() | + exists(Method m | m = src.asExpr().(MethodCall).getMethod() | m.getDeclaringType().getASourceSupertype*() instanceof TypeContext and m.hasName("createPackageContext") and - not signatureChecked(src.asExpr().(MethodAccess).getArgument(0)) + not signatureChecked(src.asExpr().(MethodCall).getArgument(0)) ) } predicate isSink(DataFlow::Node sink) { - exists(MethodAccess ma | + exists(MethodCall ma | ma.getMethod().hasQualifiedName("java.lang", "ClassLoader", "loadClass") | sink.asExpr() = ma.getQualifier() @@ -68,7 +67,7 @@ module InsecureLoadingConfig implements DataFlow::ConfigSig { } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, Method m | + exists(MethodCall ma, Method m | ma.getMethod() = m and m.getDeclaringType().getASourceSupertype*() instanceof TypeContext and m.hasName("getClassLoader") @@ -87,4 +86,3 @@ from InsecureLoadFlow::PathNode source, InsecureLoadFlow::PathNode sink where InsecureLoadFlow::flowPath(source, sink) select sink.getNode(), source, sink, "Class loaded from a $@ without signature check", source.getNode(), "third party library" - From 0f89f69555ee09d07540e45b0f296d3b634d94e4 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 15:44:00 +0100 Subject: [PATCH 180/205] Python: fix VariableWrite and remove unneded step --- .../python/dataflow/new/internal/DataFlowPrivate.qll | 8 -------- .../python/dataflow/new/internal/VariableCapture.qll | 2 +- 2 files changed, 1 insertion(+), 9 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 2f7d78e7214..61d84764d87 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -300,14 +300,6 @@ module LocalFlow { nodeTo.(CfgNode).getNode() = def.getDefiningNode() ) or - // Assignment to captured variables - // These are not covered by the `AssignmentDefinition`s in the case above, - // as they are not necessarily live. - nodeFrom.(CfgNode).getNode() = nodeTo.(CfgNode).getNode().(DefinitionNode).getValue() and - nodeTo.asExpr() = any(VariableCapture::CapturedVariable c).getAStore() and - // Exclude assignments to parameters. These are from default values and not local. - not nodeTo instanceof ParameterNode - or // With definition // `with f(42) as x:` // nodeFrom is `f(42)` 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 1e975880e27..dd4d3f03867 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -72,7 +72,7 @@ private module CaptureInput implements Shared::InputSig { class VariableWrite extends ControlFlowNode { CapturedVariable v; - VariableWrite() { this = v.getAStore().getAFlowNode() } + VariableWrite() { this = v.getAStore().getAFlowNode().(DefinitionNode).getValue() } CapturedVariable getVariable() { result = v } From fea69263f30539ed3cd05ce98a306f6c898ecd1d Mon Sep 17 00:00:00 2001 From: Max Schaefer <54907921+max-schaefer@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:06:03 +0000 Subject: [PATCH 181/205] Apply suggestions from code review Co-authored-by: Felicity Chapman --- csharp/ql/src/Security Features/CWE-079/XSS.qhelp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp index 14c08e2fec4..a6183e13c8e 100644 --- a/csharp/ql/src/Security Features/CWE-079/XSS.qhelp +++ b/csharp/ql/src/Security Features/CWE-079/XSS.qhelp @@ -12,9 +12,9 @@ without properly sanitizing the input first, allows for a cross-site scripting v

    -To guard against cross-site scripting, consider using a library providing suitable encoding -functionality, such as the System.Net.WebUtility class to sanitize the untrusted input before writing it to the page. -The references also mention other possible solutions. +To guard against cross-site scripting, consider using a library that provides suitable encoding +functionality, such as the System.Net.WebUtility class, to sanitize the untrusted input before writing it to the page. +For other possible solutions, see the references.

    @@ -26,7 +26,7 @@ leaving the website vulnerable to cross-site scripting.

    -Sanitizing the user-controlled data using WebUtility.HtmlEncode method prevents the vulnerability: +Sanitizing the user-controlled data using the WebUtility.HtmlEncode method prevents the vulnerability:

    From da4aef80e962f36343002fc525275a74f21a125c Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 20 Dec 2023 16:15:17 +0100 Subject: [PATCH 182/205] Revert "Python: make it a real consistency check" This reverts commit 45411f4a93cc5101b109b9f639e7444ea2f52782. --- .../dataflow-capture-consistency.expected | 17 +++++++++++++++++ .../dataflow-capture-consistency.ql | 0 2 files changed, 17 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected rename python/ql/{consistency-queries => test/experimental/dataflow/variable-capture}/dataflow-capture-consistency.ql (100%) diff --git a/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected new file mode 100644 index 00000000000..35f4edcf1fb --- /dev/null +++ b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.expected @@ -0,0 +1,17 @@ +uniqueToString +uniqueEnclosingCallable +uniqueDominator +localDominator +localSuccessor +uniqueDefiningScope +variableIsCaptured +uniqueLocation +uniqueCfgNode +uniqueWriteTarget +uniqueWriteCfgNode +uniqueReadVariable +closureMustHaveBody +closureAliasMustBeInSameScope +variableAccessAstNesting +uniqueCallableLocation +consistencyOverview diff --git a/python/ql/consistency-queries/dataflow-capture-consistency.ql b/python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql similarity index 100% rename from python/ql/consistency-queries/dataflow-capture-consistency.ql rename to python/ql/test/experimental/dataflow/variable-capture/dataflow-capture-consistency.ql From c6d1b6cb58a48ffaba8851f65eac89dbc9c49d7d Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Wed, 20 Dec 2023 11:51:23 -0800 Subject: [PATCH 183/205] Update docs/codeql/codeql-overview/system-requirements.rst --- docs/codeql/codeql-overview/system-requirements.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/system-requirements.rst b/docs/codeql/codeql-overview/system-requirements.rst index ad4c94dba93..c9d6d261e15 100644 --- a/docs/codeql/codeql-overview/system-requirements.rst +++ b/docs/codeql/codeql-overview/system-requirements.rst @@ -38,4 +38,4 @@ For Python extraction: For Ruby extraction: -- On Windows, the ``msvcp140.dll`` must be installed and available in the system. This can be installed by downloading the appropriate Microsoft Visual C++ Redistributable for Visual Studio. +- On Windows, the ``msvcp140.dll`` must be installed and available on the system. This can be installed by downloading the appropriate Microsoft Visual C++ Redistributable for Visual Studio. From d77e8df800faa6cc66dbafb014f187a8570c5eb8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 00:16:28 +0000 Subject: [PATCH 184/205] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 25 ++++++++++++------- .../library-coverage/coverage.rst | 12 ++++----- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 6ec17922920..334fbdedac0 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -15,7 +15,7 @@ androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,5,,,,,27,61 antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, ch.ethz.ssh2,2,,,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.alibaba.druid.sql,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.alibaba.druid.sql,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,1, com.alibaba.fastjson2,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, com.amazonaws.auth,2,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, com.auth0.jwt.algorithms,6,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -28,7 +28,7 @@ com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,,,,,63,24 com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 com.google.common.flogger,29,,,,,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,, -com.google.common.io,8,,73,,,,,,,,1,,,,,,,,,,,,,,7,,,,,,,,,,,,,,,,,,,,,,,72,1 +com.google.common.io,10,,73,,,,,,,,1,,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,72,1 com.google.gson,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30,14 com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, com.jcraft.jsch,5,,1,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,1, @@ -56,7 +56,7 @@ freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,, groovy.lang,26,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.text,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.util,5,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,68,9,2647,,4,,,,,,3,,,,4,,,,,,,,,,51,,,,,,,,,6,,,,,,,,,,,,5,4,2571,76 +hudson,71,9,2648,,4,,,,,,3,,,,4,,,,,,,,,,54,,,,,,,,,6,,,,,,,,,,,,5,4,2572,76 io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,, io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 @@ -69,6 +69,7 @@ io.netty.util,2,,23,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,21,2 jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,2, jakarta.faces.context,2,7,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,1, jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 @@ -76,17 +77,17 @@ jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, java.awt,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, java.io,50,1,46,,,,,,,,22,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,1,,44,2 -java.lang,31,3,94,,13,,,,,,,,,,,,,,,,,8,,,5,,,4,,,1,,,,,,,,,,,,,,3,,,57,37 -java.net,15,3,23,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,,,,,3,23, +java.lang,32,3,94,,13,,,,,,,,,,,,,,,,,8,,,6,,,4,,,1,,,,,,,,,,,,,,3,,,57,37 +java.net,16,3,23,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,,,,3,23, java.nio,49,,36,,,,,,,,5,,,,,,,,,,,,,,43,,,,,,,,,1,,,,,,,,,,,,,,36, java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,45,2,519,,,,,,,,1,,,,,,,,,,,34,,,,,,,5,2,,1,2,,,,,,,,,,,,2,,,45,474 +java.util,47,2,519,,,,,,,,1,,,,,,,,,,,34,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,45,474 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, javax.faces.context,2,7,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -javax.imageio.stream,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.imageio.stream,1,,1,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 javax.management,2,,1,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, @@ -109,6 +110,8 @@ javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, jenkins,,,523,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,500,23 jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 kotlin,16,,1849,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,,,,,1836,13 +liquibase.database.jvm,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, +liquibase.statement.core,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, net.schmizz.sshj,4,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,321,17 net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,,,,, @@ -122,7 +125,7 @@ org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, org.apache.commons.exec,6,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,111,,560,,,,,,,,2,,,,,,,,,,,,,,94,,,,,,,,,15,,,,,,,,,,,,,,546,14 +org.apache.commons.io,117,,562,,,,,,,,4,,,,,,,,,,,,,,98,,,,,,,,,15,,,,,,,,,,,,,,548,14 org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -146,6 +149,8 @@ org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.hadoop.fs,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10, 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,,,,,,,,,,,,,,,,,,,,,,,, org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,,,,,, org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,, org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,,, @@ -157,6 +162,7 @@ org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, org.apache.http,48,3,95,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,46,,,,,,,,,,,,,3,86,9 org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,57, +org.apache.ibatis.mapping,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, org.apache.log4j,11,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.logging.log4j,359,,8,,,,,,,,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,4,4 org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, @@ -165,7 +171,7 @@ org.apache.shiro.mgt,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.sshd.client.session,3,,,,,,1,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.struts.beanvalidation.validation.interceptor,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, org.apache.struts2,14,,3873,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,3,,,,,,,,,,3839,34 -org.apache.tools.ant,11,,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.tools.ant,12,,,,1,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,, org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, @@ -184,6 +190,7 @@ org.jenkins.ui.icon,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48,1 org.jenkins.ui.symbol,,,33,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,8 org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 +org.keycloak.models.map.storage,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,, org.kohsuke.stapler,20,24,363,,,,,,,,,,,,2,,,,,,,,,,9,,,,,,,,,4,,,,,5,,,,,,,,24,352,11 org.mvel2,16,,,,,,,,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,, org.openjdk.jmh.runner.options,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index c423d16677d..03642cec209 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -10,18 +10,18 @@ Java framework & library support Android,``android.*``,52,481,138,,3,67,,, Android extensions,``androidx.*``,5,183,19,,,,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,, - `Apache Commons IO `_,``org.apache.commons.io``,,560,111,94,,,,,15 + `Apache Commons IO `_,``org.apache.commons.io``,,562,117,98,,,,,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 `Apache Log4j 2 `_,``org.apache.logging.log4j``,,8,359,,,,,, - `Google Guava `_,``com.google.common.*``,,730,41,7,,,,, + `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,724,226,76,,9,,,18 - Java extensions,"``javax.*``, ``jakarta.*``",67,686,77,4,4,,1,1,4 + Java Standard Library,``java.*``,10,724,230,79,,9,,,19 + Java extensions,"``javax.*``, ``jakarta.*``",67,687,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``, ``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.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.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.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``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,10503,864,116,6,18,18,,208 - Totals,,308,18921,2421,316,16,122,33,1,401 + 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.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,10506,874,121,6,22,18,,208 + Totals,,308,18927,2446,331,16,128,33,1,402 From 4c46be1ed00e5255103a72cd2fcd4fe75395c6d3 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Thu, 21 Dec 2023 00:23:01 +0000 Subject: [PATCH 185/205] Use 3 arg overload on Method for hasQualifiedName for Package/Name/Type --- go/ql/lib/semmle/go/frameworks/XPath.qll | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/XPath.qll b/go/ql/lib/semmle/go/frameworks/XPath.qll index 0828a1a5067..5ef6cf0088c 100644 --- a/go/ql/lib/semmle/go/frameworks/XPath.qll +++ b/go/ql/lib/semmle/go/frameworks/XPath.qll @@ -148,15 +148,13 @@ module XPath { */ private class LestratGoLibxml2XPathExpressionString extends Range { LestratGoLibxml2XPathExpressionString() { - exists(Function f, string name | name.matches("Parse%") | - f.hasQualifiedName("github.com/lestrrat-go/libxml2/parser.Parser", name) and - //f.hasQualifiedName(package("github.com/lestrrat-go/libxml2/parser.Parser", ""), name) and - this = f.getACall().getArgument(0) + exists(Method m, string name | name.matches("Parse%") | + m.hasQualifiedName(package("github.com/lestrrat-go/libxml2", "parser"), "Parser", name) and + this = m.getACall().getArgument(0) ) } } - /** * An XPath expression string used in an API function of the * [xpathparser](https://github.com/santhosh-tekuri/xpathparser) package. From 6f3867d8046b03c7a7b574cff51c5fc59ce32ddc Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Wed, 20 Dec 2023 19:25:48 -0500 Subject: [PATCH 186/205] stub the type Parser + the function New (it will automatically make stubs for all the methods on that type) Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/test/query-tests/Security/CWE-643/tst.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/test/query-tests/Security/CWE-643/tst.go b/go/ql/test/query-tests/Security/CWE-643/tst.go index d0d0a604a74..c5c212990a1 100644 --- a/go/ql/test/query-tests/Security/CWE-643/tst.go +++ b/go/ql/test/query-tests/Security/CWE-643/tst.go @@ -10,7 +10,7 @@ package main //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xml Node //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xpath "" Compile //go:generate depstubber -vendor github.com/santhosh-tekuri/xpathparser "" Parse,MustParse -//go:generate depstubber -vendor github.com/lestrrat-go/libxml2/parser "" ParseString +//go:generate depstubber -vendor github.com/lestrrat-go/libxml2/parser Parser New import ( "net/http" From 667861f575ac638c3c5fabe0a72de3a0caf33f42 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Thu, 21 Dec 2023 00:42:37 +0000 Subject: [PATCH 187/205] depstubber with latest change - still failing with ./tst.go:195:25: undefined: parser.XMLParseNoEnt --- .../Security/CWE-643/XPathInjection.expected | 6 +++ .../lestrrat-go/libxml2/parser/stub.go | 40 +++++++++++++++++++ .../github.com/lestrrat-go/libxml2/stub.go | 12 ------ 3 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go delete mode 100644 go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go 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 15294abb8de..34fbf42f85f 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -50,6 +50,8 @@ edges | 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 | ...+... | 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 | @@ -105,6 +107,9 @@ nodes | tst.go:164:31:164:126 | ...+... | semmle.label | ...+... | | tst.go:173:21:173:116 | ...+... | semmle.label | ...+... | | tst.go:182:27:182:122 | ...+... | semmle.label | ...+... | +| tst.go:193:14:193:19 | selection of Form | semmle.label | selection of Form | +| tst.go:193:14:193:35 | call to Get | semmle.label | call to Get | +| tst.go:198:23:198:85 | ...+... | semmle.label | ...+... | subpaths #select | XPathInjection.go:16:29:16:91 | ...+... | XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:16:29:16:91 | ...+... | XPath expression depends on a $@. | XPathInjection.go:13:14:13:19 | selection of Form | user-provided value | @@ -147,3 +152,4 @@ subpaths | tst.go:173:21:173:116 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:173:21:173:116 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | | tst.go:182:27:182:122 | ...+... | tst.go:151:14:151:19 | selection of Form | tst.go:182:27:182:122 | ...+... | XPath expression depends on a $@. | tst.go:151:14:151:19 | selection of Form | user-provided value | | tst.go:182:27:182:122 | ...+... | tst.go:152:14:152:19 | selection of Form | tst.go:182:27:182:122 | ...+... | XPath expression depends on a $@. | tst.go:152:14:152:19 | selection of Form | user-provided value | +| tst.go:198:23:198:85 | ...+... | tst.go:193:14:193:19 | selection of Form | tst.go:198:23:198:85 | ...+... | XPath expression depends on a $@. | tst.go:193:14:193:19 | selection of Form | user-provided value | diff --git a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go new file mode 100644 index 00000000000..e77d0a3d56a --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go @@ -0,0 +1,40 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/lestrrat-go/libxml2/parser, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/lestrrat-go/libxml2/parser (exports: Parser; functions: New) + +// Package parser is a stub of github.com/lestrrat-go/libxml2/parser, generated by depstubber. +package parser + +import ( + io "io" +) + +func New(_ ...Option) *Parser { + return nil +} + +type Option int + +func (_ Option) String() string { + return "" +} + +func (_ *Option) Set(_ ...Option) {} + +type Parser struct { + Options Option +} + +func (_ *Parser) Parse(_ []byte) (interface{}, error) { + return nil, nil +} + +func (_ *Parser) ParseReader(_ io.Reader) (interface{}, error) { + return nil, nil +} + +func (_ *Parser) ParseString(_ string) (interface{}, error) { + return nil, nil +} diff --git a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go deleted file mode 100644 index cd99cc3cebd..00000000000 --- a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/stub.go +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by depstubber. DO NOT EDIT. -// This is a simple stub for github.com/lestrrat-go/libxml2, strictly for use in testing. - -// See the LICENSE file for information about the licensing of the original library. -// Source: github.com/lestrrat-go/libxml2 (exports: ; functions: ParseString) - -// Package libxml2 is a stub of github.com/lestrrat-go/libxml2, generated by depstubber. -package libxml2 - -func ParseString(_ string, _ ...interface{}) (interface{}, error) { - return nil, nil -} From 7c93a2c825df93918114628fd6ab4c0939d49061 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Thu, 21 Dec 2023 00:49:14 +0000 Subject: [PATCH 188/205] Add const XMLParseNoEnt to stub --- go/ql/test/query-tests/Security/CWE-643/tst.go | 2 +- .../vendor/github.com/lestrrat-go/libxml2/parser/stub.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-643/tst.go b/go/ql/test/query-tests/Security/CWE-643/tst.go index c5c212990a1..87ce0e4b6e1 100644 --- a/go/ql/test/query-tests/Security/CWE-643/tst.go +++ b/go/ql/test/query-tests/Security/CWE-643/tst.go @@ -10,7 +10,7 @@ package main //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xml Node //go:generate depstubber -vendor github.com/jbowtie/gokogiri/xpath "" Compile //go:generate depstubber -vendor github.com/santhosh-tekuri/xpathparser "" Parse,MustParse -//go:generate depstubber -vendor github.com/lestrrat-go/libxml2/parser Parser New +//go:generate depstubber -vendor github.com/lestrrat-go/libxml2/parser Parser New,XMLParseNoEnt import ( "net/http" diff --git a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go index e77d0a3d56a..57e83756e2f 100644 --- a/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go +++ b/go/ql/test/query-tests/Security/CWE-643/vendor/github.com/lestrrat-go/libxml2/parser/stub.go @@ -2,7 +2,7 @@ // This is a simple stub for github.com/lestrrat-go/libxml2/parser, strictly for use in testing. // See the LICENSE file for information about the licensing of the original library. -// Source: github.com/lestrrat-go/libxml2/parser (exports: Parser; functions: New) +// Source: github.com/lestrrat-go/libxml2/parser (exports: Parser; functions: New,XMLParseNoEnt) // Package parser is a stub of github.com/lestrrat-go/libxml2/parser, generated by depstubber. package parser @@ -38,3 +38,5 @@ func (_ *Parser) ParseReader(_ io.Reader) (interface{}, error) { func (_ *Parser) ParseString(_ string) (interface{}, error) { return nil, nil } + +var XMLParseNoEnt Option = 0 From 25c818f42572b26f87e923e5a07e2f1303d53384 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Thu, 21 Dec 2023 12:13:00 +0800 Subject: [PATCH 189/205] Added unit test files. --- .../security/CWE-470/BadClassLoader.java | 27 ++++++++++++++++ .../security/CWE-470/GoodClassLoader.java | 31 +++++++++++++++++++ .../CWE-470/LoadClassNoSignatureCheck.qlref | 1 + 3 files changed, 59 insertions(+) create mode 100644 java/ql/test/experimental/query-tests/security/CWE-470/BadClassLoader.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-470/GoodClassLoader.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.qlref diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/BadClassLoader.java b/java/ql/test/experimental/query-tests/security/CWE-470/BadClassLoader.java new file mode 100644 index 00000000000..6fd6b9ccfa5 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-470/BadClassLoader.java @@ -0,0 +1,27 @@ +package poc.sample.classloader; + +import android.app.Application; +import android.content.pm.PackageInfo; +import android.content.Context; +import android.util.Log; + +public class BadClassLoader extends Application { + @Override + public void onCreate() { + super.onCreate(); + for (PackageInfo p : getPackageManager().getInstalledPackages(0)) { + try { + if (p.packageName.startsWith("some.package.")) { + Context appContext = createPackageContext(p.packageName, + CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY); + ClassLoader classLoader = appContext.getClassLoader(); + Object result = classLoader.loadClass("some.package.SomeClass") + .getMethod("someMethod") + .invoke(null); + } + } catch (Exception e) { + Log.e("Class loading failed", e.toString()); + } + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/GoodClassLoader.java b/java/ql/test/experimental/query-tests/security/CWE-470/GoodClassLoader.java new file mode 100644 index 00000000000..fea80fc638d --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-470/GoodClassLoader.java @@ -0,0 +1,31 @@ +package poc.sample.classloader; + +import android.app.Application; +import android.content.pm.PackageInfo; +import android.content.Context; +import android.content.pm.PackageManager; +import android.util.Log; + +public class GoodClassLoader extends Application { + @Override + public void onCreate() { + super.onCreate(); + PackageManager pm = getPackageManager(); + for (PackageInfo p : pm.getInstalledPackages(0)) { + try { + if (p.packageName.startsWith("some.package.") && + (pm.checkSignatures(p.packageName, getApplicationContext().getPackageName()) == PackageManager.SIGNATURE_MATCH) + ) { + Context appContext = createPackageContext(p.packageName, + CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY); + ClassLoader classLoader = appContext.getClassLoader(); + Object result = classLoader.loadClass("some.package.SomeClass") + .getMethod("someMethod") + .invoke(null); + } + } catch (Exception e) { + Log.e("Class loading failed", e.toString()); + } + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.qlref b/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.qlref new file mode 100644 index 00000000000..27b16b52148 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql From 1007c4fc83470cbe8b7d99102dd15a8e9b8b67fe Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 21 Dec 2023 10:38:58 +0100 Subject: [PATCH 190/205] C++: Show indirections when printing SSA variables. --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 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 5c0174be32d..52c873efec7 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 @@ -16,6 +16,15 @@ private module SourceVariables { ind = [0 .. countIndirectionsForCppType(base.getLanguageType()) + 1] } + private int maxNumberOfIndirections() { result = max(SourceVariable sv | | sv.getIndirection()) } + + private string repeatStars(int n) { + n = 0 and result = "" + or + n = [1 .. maxNumberOfIndirections()] and + result = "*" + repeatStars(n - 1) + } + class SourceVariable extends TSourceVariable { SsaInternals0::SourceVariable base; int ind; @@ -32,13 +41,7 @@ private module SourceVariables { SsaInternals0::SourceVariable getBaseVariable() { result = base } /** Gets a textual representation of this element. */ - string toString() { - ind = 0 and - result = this.getBaseVariable().toString() - or - ind > 0 and - result = this.getBaseVariable().toString() + " indirection" - } + string toString() { result = repeatStars(this.getIndirection()) } /** * Gets the number of loads performed on the base source variable From 7162540faf594c1841a10bfd895a8b956748617c Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Thu, 21 Dec 2023 19:57:37 +0800 Subject: [PATCH 191/205] Added options, .qhelp and .expected file for unit test. --- .../CWE/CWE-470/LoadClassNoSignatureCheck.qhelp | 12 ++++++++++++ .../CWE-470/LoadClassNoSignatureCheck.expected | 12 ++++++++++++ .../query-tests/security/CWE-470/options | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp index 93bd37d7375..5a2d447dc70 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp @@ -17,6 +17,18 @@ Verify that the signature of an app in addition to the package name before loadi

    + +

    +The BadClassLoader class illustrate class loading with android.content.pm.PackageInfo.packageName.startsWith() method without any check on the package signature. +

    + +

    +The GoodClassLoader class illustrate class loading with package signature check using android.content.pm.PackageManager.checkSignatures() method. +

    + +
    + +
  • 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 new file mode 100644 index 00000000000..23d52993a91 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-470/LoadClassNoSignatureCheck.expected @@ -0,0 +1,12 @@ +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 | +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 | +| BadClassLoader.java:17:47:17:73 | getClassLoader(...) : ClassLoader | semmle.label | getClassLoader(...) : ClassLoader | +| BadClassLoader.java:18:37:18:47 | classLoader | semmle.label | classLoader | +subpaths +#select +| BadClassLoader.java:18:37:18:47 | classLoader | BadClassLoader.java:15:42:16:75 | createPackageContext(...) : Context | BadClassLoader.java:18:37:18:47 | classLoader | Class loaded from a $@ without signature check | BadClassLoader.java:15:42:16:75 | createPackageContext(...) | third party library | diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/options b/java/ql/test/experimental/query-tests/security/CWE-470/options index ba166b547a0..c0d25dba5c2 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-470/options +++ b/java/ql/test/experimental/query-tests/security/CWE-470/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/ \ No newline at end of file +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/:${testdir}/../../../../stubs/google-android-9.0.0 From f7da6f56f3fbab1ca09527f939df6fc2227b034e Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 15 Nov 2022 13:21:53 +0100 Subject: [PATCH 192/205] C++: Ensure that only one `Function` exists for every function --- cpp/ql/lib/semmle/code/cpp/Element.qll | 4 ++ cpp/ql/lib/semmle/code/cpp/Function.qll | 3 + .../controlflow/internal/ConstantExprs.qll | 6 +- .../code/cpp/internal/ResolveFunction.qll | 57 +++++++++++++++++++ .../cpp/internal/ResolveGlobalVariable.qll | 2 +- 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 cpp/ql/lib/semmle/code/cpp/internal/ResolveFunction.qll diff --git a/cpp/ql/lib/semmle/code/cpp/Element.qll b/cpp/ql/lib/semmle/code/cpp/Element.qll index 79df774d80f..98b5da60c1c 100644 --- a/cpp/ql/lib/semmle/code/cpp/Element.qll +++ b/cpp/ql/lib/semmle/code/cpp/Element.qll @@ -7,6 +7,7 @@ import semmle.code.cpp.Location private import semmle.code.cpp.Enclosing private import semmle.code.cpp.internal.ResolveClass private import semmle.code.cpp.internal.ResolveGlobalVariable +private import semmle.code.cpp.internal.ResolveFunction /** * Get the `Element` that represents this `@element`. @@ -30,11 +31,14 @@ pragma[inline] @element unresolveElement(Element e) { not result instanceof @usertype and not result instanceof @variable and + not result instanceof @function and result = e or e = resolveClass(result) or e = resolveGlobalVariable(result) + or + e = resolveFunction(result) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index db6f1c487e7..92134dca31d 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -9,6 +9,7 @@ import semmle.code.cpp.exprs.Call import semmle.code.cpp.metrics.MetricFunction import semmle.code.cpp.Linkage private import semmle.code.cpp.internal.ResolveClass +private import semmle.code.cpp.internal.ResolveFunction /** * A C/C++ function [N4140 8.3.5]. Both member functions and non-member @@ -25,6 +26,8 @@ private import semmle.code.cpp.internal.ResolveClass * in more detail in `Declaration.qll`. */ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { + Function() { isFunction(underlyingElement(this)) } + override string getName() { functions(underlyingElement(this), result, _) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/ConstantExprs.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/ConstantExprs.qll index dfb5782238b..84e96fa9c46 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/ConstantExprs.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/ConstantExprs.qll @@ -110,8 +110,8 @@ private predicate loopConditionAlwaysUponEntry(ControlFlowNode loop, Expr condit * should be in this relation. */ pragma[noinline] -private predicate isFunction(Element el) { - el instanceof Function +private predicate isFunction(@element el) { + el instanceof @function or el.(Expr).getParent() = el } @@ -122,7 +122,7 @@ private predicate isFunction(Element el) { */ pragma[noopt] private predicate callHasNoTarget(@funbindexpr fc) { - exists(Function f | + exists(@function f | funbind(fc, f) and not isFunction(f) ) diff --git a/cpp/ql/lib/semmle/code/cpp/internal/ResolveFunction.qll b/cpp/ql/lib/semmle/code/cpp/internal/ResolveFunction.qll new file mode 100644 index 00000000000..95cd2806856 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/internal/ResolveFunction.qll @@ -0,0 +1,57 @@ +private predicate hasDefinition(@function f) { + exists(@fun_decl fd | fun_decls(fd, f, _, _, _) | fun_def(fd)) +} + +private predicate onlyOneCompleteFunctionExistsWithMangledName(@mangledname name) { + strictcount(@function f | hasDefinition(f) and mangled_name(f, name)) = 1 +} + +/** Holds if `f` is a unique function with a definition named `name`. */ +private predicate isFunctionWithMangledNameAndWithDefinition(@mangledname name, @function f) { + hasDefinition(f) and + mangled_name(f, name) and + onlyOneCompleteFunctionExistsWithMangledName(name) +} + +/** Holds if `f` is a function without a definition named `name`. */ +private predicate isFunctionWithMangledNameAndWithoutDefinition(@mangledname name, @function f) { + not hasDefinition(f) and + mangled_name(f, name) +} + +/** + * Holds if `incomplete` is a function without a definition, and there exists + * a unique function `complete` with the same name that does have a definition. + */ +private predicate hasTwinWithDefinition(@function incomplete, @function complete) { + not function_instantiation(incomplete, complete) and + ( + not compgenerated(incomplete) or + not compgenerated(complete) + ) and + exists(@mangledname name | + isFunctionWithMangledNameAndWithoutDefinition(name, incomplete) and + isFunctionWithMangledNameAndWithDefinition(name, complete) + ) +} + +import Cached + +cached +private module Cached { + /** + * If `f` is a function without a definition, and there exists a unique + * function with the same name that does have a definition, then the + * result is that unique function. Otherwise, the result is `f`. + */ + cached + @function resolveFunction(@function f) { + hasTwinWithDefinition(f, result) + or + not hasTwinWithDefinition(f, _) and + result = f + } + + cached + predicate isFunction(@function f) { f = resolveFunction(_) } +} diff --git a/cpp/ql/lib/semmle/code/cpp/internal/ResolveGlobalVariable.qll b/cpp/ql/lib/semmle/code/cpp/internal/ResolveGlobalVariable.qll index c11e1457dae..3727a1aaa00 100644 --- a/cpp/ql/lib/semmle/code/cpp/internal/ResolveGlobalVariable.qll +++ b/cpp/ql/lib/semmle/code/cpp/internal/ResolveGlobalVariable.qll @@ -24,8 +24,8 @@ private predicate isGlobalWithMangledNameAndWithoutDefinition(@mangledname name, * a unique global variable `complete` with the same name that does have a definition. */ private predicate hasTwinWithDefinition(@globalvariable incomplete, @globalvariable complete) { + not variable_instantiation(incomplete, complete) and exists(@mangledname name | - not variable_instantiation(incomplete, complete) and isGlobalWithMangledNameAndWithoutDefinition(name, incomplete) and isGlobalWithMangledNameAndWithDefinition(name, complete) ) From cb5733d64780b2b08a5f34b644dc9093958c3209 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Fri, 22 Dec 2023 08:25:05 +0800 Subject: [PATCH 193/205] Apply suggestions from code review Update to documentation. Co-authored-by: Tony Torralba --- .../CWE/CWE-470/LoadClassNoSignatureCheck.qhelp | 10 +++++----- .../Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp index 5a2d447dc70..861c606486e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.qhelp @@ -3,8 +3,8 @@

    -If a vulnerable loads classes or code of any app based solely on the package name of the app without -first checking the package signature of the app, this could malicious app with the same package name +If an application loads classes or code from another app based solely on its package name without +first checking its package signature, this could allow a malicious app with the same package name to be loaded through "package namespace squatting". If the victim user install such malicious app in the same device as the vulnerable app, the vulnerable app would load classes or code from the malicious app, potentially leading to arbitrary code execution. @@ -13,17 +13,17 @@ classes or code from the malicious app, potentially leading to arbitrary code ex

    -Verify that the signature of an app in addition to the package name before loading the classes or code. +Verify the package signature in addition to the package name before loading any classes or code from another application.

    -The BadClassLoader class illustrate class loading with android.content.pm.PackageInfo.packageName.startsWith() method without any check on the package signature. +The BadClassLoader class illustrates class loading with the android.content.pm.PackageInfo.packageName.startsWith() method without any check on the package signature.

    -The GoodClassLoader class illustrate class loading with package signature check using android.content.pm.PackageManager.checkSignatures() method. +The GoodClassLoader class illustrates class loading with correct package signature check using the android.content.pm.PackageManager.checkSignatures() method.

    diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index 159254d4cbb..2279fa7d71f 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -1,8 +1,8 @@ /** * @name Load 3rd party classes or code ('unsafe reflection') without signature check - * @description Load classes or code from 3rd party package without checking the - * package signature but only rely on package name. - * This makes it susceptible to package namespace squatting + * @description Loading classes or code from third-party packages without checking the + * package signature could make the application + * susceptible to package namespace squatting attacks, * potentially leading to arbitrary code execution. * @problem.severity error * @precision high From 0fd09759dfdbfb3679a5f744b81a32fd5d292334 Mon Sep 17 00:00:00 2001 From: masterofnow <150010466+masterofnow@users.noreply.github.com> Date: Fri, 22 Dec 2023 08:31:23 +0800 Subject: [PATCH 194/205] Added sample java file for qhelp to render correctly. --- .../Security/CWE/CWE-470/BadClassLoader.java | 27 ++++++++++++++++ .../Security/CWE/CWE-470/GoodClassLoader.java | 31 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-470/BadClassLoader.java create mode 100644 java/ql/src/experimental/Security/CWE/CWE-470/GoodClassLoader.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/BadClassLoader.java b/java/ql/src/experimental/Security/CWE/CWE-470/BadClassLoader.java new file mode 100644 index 00000000000..6fd6b9ccfa5 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-470/BadClassLoader.java @@ -0,0 +1,27 @@ +package poc.sample.classloader; + +import android.app.Application; +import android.content.pm.PackageInfo; +import android.content.Context; +import android.util.Log; + +public class BadClassLoader extends Application { + @Override + public void onCreate() { + super.onCreate(); + for (PackageInfo p : getPackageManager().getInstalledPackages(0)) { + try { + if (p.packageName.startsWith("some.package.")) { + Context appContext = createPackageContext(p.packageName, + CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY); + ClassLoader classLoader = appContext.getClassLoader(); + Object result = classLoader.loadClass("some.package.SomeClass") + .getMethod("someMethod") + .invoke(null); + } + } catch (Exception e) { + Log.e("Class loading failed", e.toString()); + } + } + } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/GoodClassLoader.java b/java/ql/src/experimental/Security/CWE/CWE-470/GoodClassLoader.java new file mode 100644 index 00000000000..fea80fc638d --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-470/GoodClassLoader.java @@ -0,0 +1,31 @@ +package poc.sample.classloader; + +import android.app.Application; +import android.content.pm.PackageInfo; +import android.content.Context; +import android.content.pm.PackageManager; +import android.util.Log; + +public class GoodClassLoader extends Application { + @Override + public void onCreate() { + super.onCreate(); + PackageManager pm = getPackageManager(); + for (PackageInfo p : pm.getInstalledPackages(0)) { + try { + if (p.packageName.startsWith("some.package.") && + (pm.checkSignatures(p.packageName, getApplicationContext().getPackageName()) == PackageManager.SIGNATURE_MATCH) + ) { + Context appContext = createPackageContext(p.packageName, + CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY); + ClassLoader classLoader = appContext.getClassLoader(); + Object result = classLoader.loadClass("some.package.SomeClass") + .getMethod("someMethod") + .invoke(null); + } + } catch (Exception e) { + Log.e("Class loading failed", e.toString()); + } + } + } +} From 7f9dff2dc7487f1fc1f2c6cf0c75e8b0509d60ee Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 20 Dec 2023 22:16:45 -0500 Subject: [PATCH 195/205] Fix minor error in Weak Hashing --- .../code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index 8d390cb142c..eb4ca60ee6d 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -44,10 +44,12 @@ module InsecureCryptoConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node n) { n.asExpr() instanceof InsecureAlgoLiteral or - exists(PropertiesGetPropertyMethodCall mc | n.asExpr() = mc | + exists(PropertiesGetPropertyMethodCall mc, string value | + n.asExpr() = mc and value = mc.getPropertyValue() + | // Since properties pairs are not included in the java/weak-crypto-algorithm, // The check for values from properties files can be less strict than `InsecureAlgoLiteral`. - not mc.getPropertyValue().regexpMatch(getSecureAlgorithmRegex()) + not value.regexpMatch(getSecureAlgorithmRegex()) ) } From 6455e1893d5257b3efd31a4eae8d6e3e5259a8e4 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 20 Dec 2023 22:28:23 -0500 Subject: [PATCH 196/205] Add more test cases --- .../security/CWE-327/semmle/tests/WeakHashing.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java index 8b5271d8dcc..4a2f5779064 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java @@ -14,7 +14,16 @@ public class WeakHashing { // BAD: Using a weak hashing algorithm MessageDigest bad = MessageDigest.getInstance(props.getProperty("hashAlg1")); + // BAD: Using a weak hashing algorithm even with a secure default + MessageDigest bad2 = MessageDigest.getInstance(props.getProperty("hashAlg1", "SHA-256")); + // GOOD: Using a strong hashing algorithm MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); + + // OK: Using a strong hashing algorithm even with a weak default + MessageDigest ok2 = MessageDigest.getInstance(props.getProperty("hashAlg2", "MD5")); + + // OK: Property does not exist and default is secure + MessageDigest ok3 = MessageDigest.getInstance(props.getProperty("hashAlg3", "SHA-256")); } } \ No newline at end of file From 8051cfcef5fc86fbcce7851be3d9dc0dd849c05c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 21 Dec 2023 22:40:50 -0500 Subject: [PATCH 197/205] Fix tests and fix `getStringValue` method --- .../Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 4 +++- .../CWE-327/semmle/tests/BrokenCryptoAlgorithm.expected | 4 ++++ .../semmle/tests/MaybeBrokenCryptoAlgorithm.expected | 4 ++++ .../security/CWE-327/semmle/tests/WeakHashing.java | 8 ++++---- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index 25ab8a0c813..f7de8e199bf 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -27,7 +27,9 @@ import InsecureCryptoFlow::PathGraph string getStringValue(DataFlow::Node algo) { result = algo.asExpr().(StringLiteral).getValue() or - result = algo.asExpr().(PropertiesGetPropertyMethodCall).getPropertyValue() + exists(string value | value = algo.asExpr().(PropertiesGetPropertyMethodCall).getPropertyValue() | + result = value and not value.regexpMatch(getSecureAlgorithmRegex()) + ) } from InsecureCryptoFlow::PathNode source, InsecureCryptoFlow::PathNode sink, CryptoAlgoSpec c 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 19ab13ed803..3965182c6d4 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,8 +1,12 @@ edges +| WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | nodes | Test.java:19:45:19:49 | "DES" | semmle.label | "DES" | | Test.java:42:33:42:37 | "RC2" | semmle.label | "RC2" | +| WeakHashing.java:21:56:21:91 | getProperty(...) | semmle.label | getProperty(...) | +| WeakHashing.java:21:86:21:90 | "MD5" : String | semmle.label | "MD5" : String | subpaths #select | Test.java:19:20:19:50 | getInstance(...) | Test.java:19:45:19:49 | "DES" | Test.java:19:45:19:49 | "DES" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:19:45:19:49 | "DES" | DES | | Test.java:42:14:42:38 | getInstance(...) | Test.java:42:33:42:37 | "RC2" | Test.java:42:33:42:37 | "RC2" | Cryptographic algorithm $@ is weak and should not be used. | Test.java:42:33:42:37 | "RC2" | RC2 | +| WeakHashing.java:21:30:21:92 | getInstance(...) | WeakHashing.java:21:86:21:90 | "MD5" : String | WeakHashing.java:21:56:21:91 | getProperty(...) | Cryptographic algorithm $@ is weak and should not be used. | WeakHashing.java:21:86:21:90 | "MD5" | MD5 | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected index db8d77a1454..da6f6312a89 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/MaybeBrokenCryptoAlgorithm.expected @@ -2,7 +2,11 @@ edges nodes | Test.java:34:48:34:52 | "foo" | semmle.label | "foo" | | WeakHashing.java:15:55:15:83 | getProperty(...) | semmle.label | getProperty(...) | +| WeakHashing.java:18:56:18:95 | getProperty(...) | semmle.label | getProperty(...) | +| WeakHashing.java:21:56:21:91 | getProperty(...) | semmle.label | getProperty(...) | subpaths #select | Test.java:34:21:34:53 | new SecretKeySpec(...) | Test.java:34:48:34:52 | "foo" | Test.java:34:48:34:52 | "foo" | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | Test.java:34:48:34:52 | "foo" | foo | | WeakHashing.java:15:29:15:84 | getInstance(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | WeakHashing.java:15:55:15:83 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:15:55:15:83 | getProperty(...) | MD5 | +| WeakHashing.java:18:30:18:96 | getInstance(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | WeakHashing.java:18:56:18:95 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:18:56:18:95 | getProperty(...) | MD5 | +| WeakHashing.java:21:30:21:92 | getInstance(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | WeakHashing.java:21:56:21:91 | getProperty(...) | Cryptographic algorithm $@ may not be secure, consider using a different algorithm. | WeakHashing.java:21:56:21:91 | getProperty(...) | MD5 | diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java index 4a2f5779064..6a3565fc141 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/WeakHashing.java @@ -16,14 +16,14 @@ public class WeakHashing { // BAD: Using a weak hashing algorithm even with a secure default MessageDigest bad2 = MessageDigest.getInstance(props.getProperty("hashAlg1", "SHA-256")); + + // BAD: Using a strong hashing algorithm but with a weak default + MessageDigest bad3 = MessageDigest.getInstance(props.getProperty("hashAlg2", "MD5")); // GOOD: Using a strong hashing algorithm MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); - // OK: Using a strong hashing algorithm even with a weak default - MessageDigest ok2 = MessageDigest.getInstance(props.getProperty("hashAlg2", "MD5")); - // OK: Property does not exist and default is secure - MessageDigest ok3 = MessageDigest.getInstance(props.getProperty("hashAlg3", "SHA-256")); + MessageDigest ok2 = MessageDigest.getInstance(props.getProperty("hashAlg3", "SHA-256")); } } \ No newline at end of file From 8ad787f3b8a300335c41085ca1425ca6fcd31ef2 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 22 Dec 2023 10:15:40 +0100 Subject: [PATCH 198/205] Java: Generelize MaybeBrokenCryptoAlgorithmQuery.qll --- .../MaybeBrokenCryptoAlgorithmQuery.qll | 42 ++++++++++++------- .../CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql | 16 +------ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index eb4ca60ee6d..1533b61dd5e 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -10,6 +10,12 @@ private import semmle.code.java.dataflow.RangeUtils private import semmle.code.java.dispatch.VirtualDispatch private import semmle.code.java.frameworks.Properties +/** A reference to an insecure cryptographic algorithm. */ +abstract class InsecureAlgorithm extends Expr { + /** Gets the string representation of this insecure cryptographic algorithm. */ + abstract string getStringValue(); +} + private class ShortStringLiteral extends StringLiteral { ShortStringLiteral() { this.getValue().length() < 100 } } @@ -17,16 +23,34 @@ private class ShortStringLiteral extends StringLiteral { /** * A string literal that may refer to an insecure cryptographic algorithm. */ -class InsecureAlgoLiteral extends ShortStringLiteral { +class InsecureAlgoLiteral extends InsecureAlgorithm, ShortStringLiteral { InsecureAlgoLiteral() { - // Algorithm identifiers should be at least two characters. - this.getValue().length() > 1 and exists(string s | s = this.getValue() | + // Algorithm identifiers should be at least two characters. + s.length() > 1 and not s.regexpMatch(getSecureAlgorithmRegex()) and // Exclude results covered by another query. not s.regexpMatch(getInsecureAlgorithmRegex()) ) } + + override string getStringValue() { result = this.getValue() } +} + +/** + * A property access that may refer to an insecure cryptographic algorithm. + */ +class InsecureAlgoProperty extends InsecureAlgorithm, PropertiesGetPropertyMethodCall { + string value; + + InsecureAlgoProperty() { + value = this.getPropertyValue() and + // Since properties pairs are not included in the java/weak-cryptographic-algorithm, + // the check for values from properties files can be less strict than `InsecureAlgoLiteral`. + not value.regexpMatch(getSecureAlgorithmRegex()) + } + + override string getStringValue() { result = value } } private predicate objectToString(MethodCall ma) { @@ -41,17 +65,7 @@ private predicate objectToString(MethodCall ma) { * A taint-tracking configuration to reason about the use of potentially insecure cryptographic algorithms. */ module InsecureCryptoConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { - n.asExpr() instanceof InsecureAlgoLiteral - or - exists(PropertiesGetPropertyMethodCall mc, string value | - n.asExpr() = mc and value = mc.getPropertyValue() - | - // Since properties pairs are not included in the java/weak-crypto-algorithm, - // The check for values from properties files can be less strict than `InsecureAlgoLiteral`. - not value.regexpMatch(getSecureAlgorithmRegex()) - ) - } + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof InsecureAlgorithm } predicate isSink(DataFlow::Node n) { exists(CryptoAlgoSpec c | n.asExpr() = c.getAlgoSpec()) } diff --git a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql index f7de8e199bf..d9decc0fe6d 100644 --- a/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql +++ b/java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql @@ -18,24 +18,10 @@ import semmle.code.java.frameworks.Properties import semmle.code.java.security.MaybeBrokenCryptoAlgorithmQuery import InsecureCryptoFlow::PathGraph -/** - * Get the string value represented by the given expression. - * - * If the value is a string literal, get the literal value. - * If the value is a call to `java.util.Properties::getProperty`, get the potential values of the property. - */ -string getStringValue(DataFlow::Node algo) { - result = algo.asExpr().(StringLiteral).getValue() - or - exists(string value | value = algo.asExpr().(PropertiesGetPropertyMethodCall).getPropertyValue() | - result = value and not value.regexpMatch(getSecureAlgorithmRegex()) - ) -} - from InsecureCryptoFlow::PathNode source, InsecureCryptoFlow::PathNode sink, CryptoAlgoSpec c where sink.getNode().asExpr() = c.getAlgoSpec() and InsecureCryptoFlow::flowPath(source, sink) select c, source, sink, "Cryptographic algorithm $@ may not be secure, consider using a different algorithm.", source, - getStringValue(source.getNode()) + source.getNode().asExpr().(InsecureAlgorithm).getStringValue() From ffdd28eaa9f3f04868bd4a0e5c8d77adc76088f3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Fri, 22 Dec 2023 10:29:31 +0100 Subject: [PATCH 199/205] C++: Show base variable in SSA variable 'toString's. --- .../lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 52c873efec7..11bebd975f0 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 @@ -41,7 +41,7 @@ private module SourceVariables { SsaInternals0::SourceVariable getBaseVariable() { result = base } /** Gets a textual representation of this element. */ - string toString() { result = repeatStars(this.getIndirection()) } + string toString() { result = repeatStars(this.getIndirection()) + base.toString() } /** * Gets the number of loads performed on the base source variable From d4f9e89b5b50ba67498ed9d1da8861e08f902518 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Dec 2023 13:20:38 +0100 Subject: [PATCH 200/205] C++: Add change note --- cpp/ql/lib/change-notes/2023-12-22-unique-function.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2023-12-22-unique-function.md diff --git a/cpp/ql/lib/change-notes/2023-12-22-unique-function.md b/cpp/ql/lib/change-notes/2023-12-22-unique-function.md new file mode 100644 index 00000000000..3dc36b01fc2 --- /dev/null +++ b/cpp/ql/lib/change-notes/2023-12-22-unique-function.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Under certain circumstances a function declaration that is not also a definition could be associated with a `Function` that did not have the definition as a `FunctionDeclarationEntry`. This is now fixed when only ine definition exists, and a unique `Function` will exist that has both the declaration and the definition as a `FunctionDeclarationEntry`. \ No newline at end of file From 1cb02475a8ec6cea0d778f6eaa1e2808a7acb802 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Fri, 22 Dec 2023 13:33:20 +0100 Subject: [PATCH 201/205] Update cpp/ql/lib/change-notes/2023-12-22-unique-function.md --- cpp/ql/lib/change-notes/2023-12-22-unique-function.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2023-12-22-unique-function.md b/cpp/ql/lib/change-notes/2023-12-22-unique-function.md index 3dc36b01fc2..bd5d84132ab 100644 --- a/cpp/ql/lib/change-notes/2023-12-22-unique-function.md +++ b/cpp/ql/lib/change-notes/2023-12-22-unique-function.md @@ -1,4 +1,4 @@ --- category: fix --- -* Under certain circumstances a function declaration that is not also a definition could be associated with a `Function` that did not have the definition as a `FunctionDeclarationEntry`. This is now fixed when only ine definition exists, and a unique `Function` will exist that has both the declaration and the definition as a `FunctionDeclarationEntry`. \ No newline at end of file +* Under certain circumstances a function declaration that is not also a definition could be associated with a `Function` that did not have the definition as a `FunctionDeclarationEntry`. This is now fixed when only one definition exists, and a unique `Function` will exist that has both the declaration and the definition as a `FunctionDeclarationEntry`. \ No newline at end of file From cf25cc95313913e3c40ec8ffd312722d585568e8 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 22 Dec 2023 16:53:21 +0000 Subject: [PATCH 202/205] Add docs --- .../change-notes/2023-12-22-minor-analysis-xpath-libxml2.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md diff --git a/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md b/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md new file mode 100644 index 00000000000..c312e77012b --- /dev/null +++ b/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The XPath library for the XPath injection query (`go/xml/xpath-injection`) now includes support for the [libxml2](https://github.com/lestrrat-go/libxml2) package. From 86c258df7ee701e4ddbf997328e392a367f60724 Mon Sep 17 00:00:00 2001 From: Chad Bentz <1760475+felickz@users.noreply.github.com> Date: Fri, 22 Dec 2023 16:56:54 +0000 Subject: [PATCH 203/205] mention sinks in changelog --- .../lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md b/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md index c312e77012b..16baf7f5b07 100644 --- a/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md +++ b/go/ql/lib/change-notes/2023-12-22-minor-analysis-xpath-libxml2.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* The XPath library for the XPath injection query (`go/xml/xpath-injection`) now includes support for the [libxml2](https://github.com/lestrrat-go/libxml2) package. +* The XPath library, which is used for the XPath injection query (`go/xml/xpath-injection`), now includes support for `Parser` sinks from the [libxml2](https://github.com/lestrrat-go/libxml2) package. \ No newline at end of file From ad2fb7c6d5c66ce6400c39e2998cf064c369c1a7 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 22 Dec 2023 20:40:47 +0100 Subject: [PATCH 204/205] C++: Support attribute arguments that are expressions --- .../attribute_args.ql | 17 + .../old.dbscheme | 2238 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2233 ++++++++++++++++ .../upgrade.properties | 4 + cpp/ql/lib/semmle/code/cpp/Specifier.qll | 10 +- cpp/ql/lib/semmlecode.cpp.dbscheme | 5 + cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 1431 ++++++----- .../old.dbscheme | 2233 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2238 +++++++++++++++++ .../upgrade.properties | 2 + 10 files changed, 9728 insertions(+), 683 deletions(-) create mode 100644 cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/attribute_args.ql create mode 100644 cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/old.dbscheme create mode 100644 cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/upgrade.properties diff --git a/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/attribute_args.ql b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/attribute_args.ql new file mode 100644 index 00000000000..aeb75aed4a4 --- /dev/null +++ b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/attribute_args.ql @@ -0,0 +1,17 @@ +class AttributeArg extends @attribute_arg { + string toString() { none() } +} + +class Attribute extends @attribute { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from AttributeArg arg, int kind, int kind_new, Attribute attr, int index, Location location +where + attribute_args(arg, kind, attr, index, location) and + if arg instanceof @attribute_arg_expr then kind_new = 0 else kind_new = kind +select arg, kind_new, attr, index, location diff --git a/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/old.dbscheme b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/old.dbscheme new file mode 100644 index 00000000000..d8149ca90e6 --- /dev/null +++ b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/old.dbscheme @@ -0,0 +1,2238 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/semmlecode.cpp.dbscheme b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..fc81eb5a3a7 --- /dev/null +++ b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/semmlecode.cpp.dbscheme @@ -0,0 +1,2233 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/upgrade.properties b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/upgrade.properties new file mode 100644 index 00000000000..790fcddb636 --- /dev/null +++ b/cpp/downgrades/d8149ca90e695fe26f9a0c5a7fa0edd6d4ea3f5d/upgrade.properties @@ -0,0 +1,4 @@ +description: Support expression attribute arguments +compatibility: partial +attribute_arg_expr.rel: delete +attribute_args.rel: run attribute_args.qlo diff --git a/cpp/ql/lib/semmle/code/cpp/Specifier.qll b/cpp/ql/lib/semmle/code/cpp/Specifier.qll index 19622bbdc56..7e32372da5a 100644 --- a/cpp/ql/lib/semmle/code/cpp/Specifier.qll +++ b/cpp/ql/lib/semmle/code/cpp/Specifier.qll @@ -281,6 +281,11 @@ class AttributeArgument extends Element, @attribute_arg { attribute_arg_constant(underlyingElement(this), unresolveElement(result)) } + /** + * Gets the value of this argument, if its value is a expression. + */ + Expr getValueExpr() { attribute_arg_expr(underlyingElement(this), unresolveElement(result)) } + /** * Gets the attribute to which this is an argument. */ @@ -308,7 +313,10 @@ class AttributeArgument extends Element, @attribute_arg { else if underlyingElement(this) instanceof @attribute_arg_constant_expr then tail = this.getValueConstant().toString() - else tail = this.getValueText() + else + if underlyingElement(this) instanceof @attribute_arg_expr + then tail = this.getValueExpr().toString() + else tail = this.getValueText() ) and result = prefix + tail ) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index fc81eb5a3a7..d8149ca90e6 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -937,6 +937,7 @@ case @attribute_arg.kind of | 2 = @attribute_arg_constant | 3 = @attribute_arg_type | 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr ; attribute_arg_value( @@ -951,6 +952,10 @@ attribute_arg_constant( unique int arg: @attribute_arg ref, int constant: @expr ref ) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) attribute_arg_name( unique int arg: @attribute_arg ref, string name: string ref diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 35ffe97c708..7209e4609b0 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -24,14 +24,14 @@ @location_stmt 3814079 - - @location_expr - 13167909 - @diagnostic 5200 + + @location_expr + 13167909 + @file 122996 @@ -66,7 +66,7 @@ @namespace_decl - 308610 + 311770 @using @@ -74,7 +74,7 @@ @static_assert - 133393 + 134759 @parameter @@ -390,11 +390,11 @@ @stdattribute - 491320 + 492230 @declspec - 243362 + 243349 @msattribute @@ -424,6 +424,10 @@ @attribute_arg_type 465 + + @attribute_arg_expr + 1 + @derivation 395653 @@ -434,7 +438,7 @@ @comment - 8761469 + 8756423 @namespace @@ -454,111 +458,7 @@ @initialiser - 1698635 - - - @lambdacapture - 27953 - - - @stmt_expr - 1483766 - - - @stmt_if - 724811 - - - @stmt_while - 29372 - - - @stmt_goto - 110523 - - - @stmt_label - 53061 - - - @stmt_return - 1283543 - - - @stmt_block - 1422380 - - - @stmt_end_test_while - 148648 - - - @stmt_for - 61463 - - - @stmt_switch_case - 209381 - - - @stmt_switch - 20755 - - - @stmt_asm - 109816 - - - @stmt_decl - 592150 - - - @stmt_empty - 193307 - - - @stmt_continue - 22528 - - - @stmt_break - 102247 - - - @stmt_try_block - 46863 - - - @stmt_microsoft_try - 163 - - - @stmt_set_vla_size - 26 - - - @stmt_vla_decl - 22 - - - @stmt_assigned_goto - 9061 - - - @stmt_range_based_for - 8386 - - - @stmt_handler - 65232 - - - @stmt_constexpr_if - 52432 - - - @stmt_co_return - 2 + 1711579 @address_of @@ -642,7 +542,7 @@ @pdiffexpr - 35407 + 35375 @lshiftexpr @@ -750,7 +650,7 @@ @commaexpr - 123874 + 123762 @subscriptexpr @@ -762,7 +662,7 @@ @vastartexpr - 3703 + 3741 @vaargexpr @@ -842,7 +742,7 @@ @assume - 3200 + 3233 @conjugation @@ -894,7 +794,7 @@ @thisaccess - 1126162 + 1118111 @new_expr @@ -970,11 +870,11 @@ @isbaseofexpr - 150 + 152 @isclassexpr - 1836 + 1854 @isconvtoexpr @@ -986,7 +886,7 @@ @isenumexpr - 522 + 521 @ispodexpr @@ -1010,7 +910,7 @@ @uuidof - 20103 + 20309 @delete_array_expr @@ -1018,7 +918,7 @@ @new_array_expr - 5099 + 5101 @foldexpr @@ -1058,11 +958,11 @@ @reinterpret_cast - 30707 + 30992 @const_cast - 35198 + 35271 @dynamic_cast @@ -1078,11 +978,11 @@ @noopexpr - 37 + 38 @istriviallyconstructibleexpr - 1357 + 1356 @isdestructibleexpr @@ -1094,7 +994,7 @@ @istriviallydestructibleexpr - 835 + 834 @istriviallyassignableexpr @@ -1102,7 +1002,7 @@ @isnothrowassignableexpr - 4177 + 4174 @istrivialexpr @@ -1138,7 +1038,7 @@ @isnothrowconstructibleexpr - 14413 + 14400 @hasfinalizerexpr @@ -1348,6 +1248,110 @@ @isvolatile 2 + + @lambdacapture + 27953 + + + @stmt_expr + 1483766 + + + @stmt_if + 724811 + + + @stmt_while + 29372 + + + @stmt_goto + 110523 + + + @stmt_label + 53061 + + + @stmt_return + 1283543 + + + @stmt_block + 1422380 + + + @stmt_end_test_while + 148648 + + + @stmt_for + 61463 + + + @stmt_switch_case + 209381 + + + @stmt_switch + 20755 + + + @stmt_asm + 109816 + + + @stmt_decl + 592150 + + + @stmt_empty + 193307 + + + @stmt_continue + 22528 + + + @stmt_break + 103275 + + + @stmt_try_block + 46863 + + + @stmt_microsoft_try + 165 + + + @stmt_set_vla_size + 26 + + + @stmt_vla_decl + 22 + + + @stmt_assigned_goto + 9061 + + + @stmt_range_based_for + 8386 + + + @stmt_handler + 65232 + + + @stmt_constexpr_if + 52384 + + + @stmt_co_return + 2 + @ppd_if 665765 @@ -1378,7 +1382,7 @@ @ppd_define - 2429760 + 2427864 @ppd_undef @@ -1394,11 +1398,11 @@ @ppd_error - 44 + 104 @ppd_pragma - 311566 + 314309 @ppd_objc_import @@ -1410,7 +1414,7 @@ @link_target - 1475 + 850 @xmldtd @@ -2036,7 +2040,7 @@ seconds - 14600 + 14560 @@ -2125,7 +2129,7 @@ 718 -
    6 + 5 9 159 @@ -2137,27 +2141,32 @@ 10 11 - 159 + 119 11 - 15 + 13 159 - 16 - 19 + 14 + 17 + 79 + + + 18 + 21 159 - 20 - 26 + 21 + 45 159 - 45 - 134 - 119 + 56 + 116 + 79 @@ -2222,10 +2231,15 @@ 12 + + 2 + 3 + 39 + 3 4 - 638 + 598 4 @@ -2235,12 +2249,12 @@ 5 6 - 159 + 239 6 7 - 319 + 239 7 @@ -2259,12 +2273,12 @@ 11 - 27 + 28 279 - 29 - 100 + 28 + 95 199 @@ -2311,8 +2325,8 @@ 12 - 4 - 5 + 3 + 4 39 @@ -2326,8 +2340,8 @@ 39 - 190 - 191 + 186 + 187 39 @@ -2344,22 +2358,22 @@ 1 2 - 10012 + 10252 2 3 - 3071 + 3111 3 - 4 - 1037 + 16 + 1116 - 4 - 44 - 478 + 41 + 46 + 79 @@ -2375,12 +2389,12 @@ 1 2 - 9414 + 9015 2 3 - 3071 + 3630 3 @@ -2389,8 +2403,8 @@ 4 - 75 - 797 + 74 + 598 @@ -2406,12 +2420,12 @@ 1 2 - 14241 + 14360 2 4 - 359 + 199 @@ -2755,7 +2769,7 @@ cpu_seconds - 7140 + 7286 elapsed_seconds @@ -2805,17 +2819,17 @@ 1 2 - 5667 + 5971 2 3 - 1023 + 854 3 - 14 - 449 + 16 + 461 @@ -2831,12 +2845,12 @@ 1 2 - 6522 + 6825 2 3 - 618 + 461 @@ -2860,8 +2874,13 @@ 33 - 7 - 8 + 9 + 10 + 11 + + + 10 + 11 11 @@ -2869,34 +2888,29 @@ 12 11 - - 12 - 13 - 11 - 21 22 11 - 120 - 121 + 112 + 113 11 - 180 - 181 + 174 + 175 11 - 243 - 244 + 253 + 254 11 - 262 - 263 + 266 + 267 11 @@ -2921,8 +2935,13 @@ 33 - 7 - 8 + 9 + 10 + 11 + + + 10 + 11 11 @@ -2930,34 +2949,29 @@ 12 11 - - 12 - 13 - 11 - 21 22 11 - 114 - 115 + 103 + 104 11 - 133 - 134 + 125 + 126 11 - 167 - 168 + 160 + 161 11 - 218 - 219 + 243 + 244 11 @@ -14078,11 +14092,11 @@ purefunctions - 99971 + 100995 id - 99971 + 100995 @@ -14971,15 +14985,15 @@ fun_decl_noexcept - 61101 + 61046 fun_decl - 61101 + 61046 constant - 60997 + 60941 @@ -14993,7 +15007,7 @@ 1 2 - 61101 + 61046 @@ -15009,7 +15023,7 @@ 1 2 - 60892 + 60837 2 @@ -16225,23 +16239,23 @@ namespace_decls - 308610 + 311770 id - 308610 + 311770 namespace_id - 1414 + 1429 location - 308610 + 311770 bodylocation - 308610 + 311770 @@ -16255,7 +16269,7 @@ 1 2 - 308610 + 311770 @@ -16271,7 +16285,7 @@ 1 2 - 308610 + 311770 @@ -16287,7 +16301,7 @@ 1 2 - 308610 + 311770 @@ -16303,57 +16317,57 @@ 1 2 - 289 + 292 2 3 - 157 + 158 3 5 - 100 + 101 5 11 - 113 + 114 11 28 - 106 + 107 28 51 - 119 + 120 53 69 - 106 + 107 69 113 - 106 + 107 123 185 - 106 + 107 186 363 - 106 + 107 406 12195 - 100 + 101 @@ -16369,57 +16383,57 @@ 1 2 - 289 + 292 2 3 - 157 + 158 3 5 - 100 + 101 5 11 - 113 + 114 11 28 - 106 + 107 28 51 - 119 + 120 53 69 - 106 + 107 69 113 - 106 + 107 123 185 - 106 + 107 186 363 - 106 + 107 406 12195 - 100 + 101 @@ -16435,57 +16449,57 @@ 1 2 - 289 + 292 2 3 - 157 + 158 3 5 - 100 + 101 5 11 - 113 + 114 11 28 - 106 + 107 28 51 - 119 + 120 53 69 - 106 + 107 69 113 - 106 + 107 123 185 - 106 + 107 186 363 - 106 + 107 406 12195 - 100 + 101 @@ -16501,7 +16515,7 @@ 1 2 - 308610 + 311770 @@ -16517,7 +16531,7 @@ 1 2 - 308610 + 311770 @@ -16533,7 +16547,7 @@ 1 2 - 308610 + 311770 @@ -16549,7 +16563,7 @@ 1 2 - 308610 + 311770 @@ -16565,7 +16579,7 @@ 1 2 - 308610 + 311770 @@ -16581,7 +16595,7 @@ 1 2 - 308610 + 311770 @@ -16860,27 +16874,27 @@ static_asserts - 133393 + 134759 id - 133393 + 134759 condition - 133393 + 134759 message - 29938 + 30245 location - 17399 + 17577 enclosing - 4603 + 4650 @@ -16894,7 +16908,7 @@ 1 2 - 133393 + 134759 @@ -16910,7 +16924,7 @@ 1 2 - 133393 + 134759 @@ -16926,7 +16940,7 @@ 1 2 - 133393 + 134759 @@ -16942,7 +16956,7 @@ 1 2 - 133393 + 134759 @@ -16958,7 +16972,7 @@ 1 2 - 133393 + 134759 @@ -16974,7 +16988,7 @@ 1 2 - 133393 + 134759 @@ -16990,7 +17004,7 @@ 1 2 - 133393 + 134759 @@ -17006,7 +17020,7 @@ 1 2 - 133393 + 134759 @@ -17022,32 +17036,32 @@ 1 2 - 22027 + 22253 2 3 - 471 + 476 3 4 - 2848 + 2877 4 12 - 1597 + 1613 12 17 - 2408 + 2433 17 513 - 584 + 590 @@ -17063,32 +17077,32 @@ 1 2 - 22027 + 22253 2 3 - 471 + 476 3 4 - 2848 + 2877 4 12 - 1597 + 1613 12 17 - 2408 + 2433 17 513 - 584 + 590 @@ -17104,12 +17118,12 @@ 1 2 - 27743 + 28028 2 33 - 2194 + 2217 @@ -17125,27 +17139,27 @@ 1 2 - 23442 + 23682 2 3 - 257 + 260 3 4 - 2647 + 2674 4 12 - 1440 + 1454 12 37 - 2150 + 2172 @@ -17161,37 +17175,37 @@ 1 2 - 3257 + 3290 2 3 - 2804 + 2833 3 4 - 1389 + 1403 4 5 - 81 + 82 5 6 - 3659 + 3697 6 13 - 333 + 336 14 15 - 2049 + 2070 16 @@ -17201,12 +17215,12 @@ 17 18 - 3401 + 3436 19 52 - 377 + 381 @@ -17222,37 +17236,37 @@ 1 2 - 3257 + 3290 2 3 - 2804 + 2833 3 4 - 1389 + 1403 4 5 - 81 + 82 5 6 - 3659 + 3697 6 13 - 333 + 336 14 15 - 2049 + 2070 16 @@ -17262,12 +17276,12 @@ 17 18 - 3401 + 3436 19 52 - 377 + 381 @@ -17283,22 +17297,22 @@ 1 2 - 5250 + 5304 2 3 - 5942 + 6003 3 4 - 6024 + 6085 4 7 - 182 + 184 @@ -17314,37 +17328,37 @@ 1 2 - 3861 + 3900 2 3 - 6219 + 6282 3 4 - 1163 + 1175 4 5 - 3672 + 3709 5 13 - 377 + 381 13 14 - 2049 + 2070 16 23 - 56 + 57 @@ -17360,22 +17374,22 @@ 1 2 - 3741 + 3779 2 3 - 427 + 431 3 210 - 358 + 362 223 11052 - 75 + 76 @@ -17391,22 +17405,22 @@ 1 2 - 3741 + 3779 2 3 - 427 + 431 3 210 - 358 + 362 223 11052 - 75 + 76 @@ -17422,17 +17436,17 @@ 1 2 - 3911 + 3951 2 3 - 371 + 374 3 2936 - 320 + 323 @@ -17448,17 +17462,17 @@ 1 2 - 3898 + 3938 2 3 - 383 + 387 3 1929 - 320 + 323 @@ -17964,15 +17978,15 @@ overrides - 159848 + 126795 new - 125042 + 123797 old - 15098 + 9825 @@ -17986,17 +18000,12 @@ 1 2 - 90243 + 120808 2 - 3 - 34793 - - - 3 4 - 6 + 2989 @@ -18012,37 +18021,37 @@ 1 2 - 7923 + 4324 2 3 - 1905 + 2116 3 4 - 987 + 932 4 5 - 1320 + 461 5 - 11 - 1213 + 7 + 856 - 11 - 60 - 1163 + 7 + 23 + 768 - 61 - 231 - 584 + 25 + 1464 + 365 @@ -18590,15 +18599,15 @@ autoderivation - 149150 + 149015 var - 149150 + 149015 derivation_type - 522 + 521 @@ -18612,7 +18621,7 @@ 1 2 - 149150 + 149015 @@ -21929,26 +21938,26 @@ usertype_final - 9504 + 9496 id - 9504 + 9496 usertype_uuid - 36295 + 36667 id - 36295 + 36667 uuid - 35924 + 36292 @@ -21962,7 +21971,7 @@ 1 2 - 36295 + 36667 @@ -21978,12 +21987,12 @@ 1 2 - 35553 + 35918 2 3 - 371 + 374 @@ -23520,26 +23529,26 @@ is_variable_template - 47210 + 47376 id - 47210 + 47376 variable_instantiation - 172651 + 172598 to - 172651 + 172598 from - 25902 + 25879 @@ -23553,7 +23562,7 @@ 1 2 - 172651 + 172598 @@ -23569,42 +23578,42 @@ 1 2 - 13891 + 13878 2 3 - 2611 + 2608 3 4 - 1253 + 1252 4 6 - 1880 + 1878 6 8 - 1357 + 1356 8 12 - 2193 + 2191 12 38 - 1984 + 1982 46 277 - 731 + 730 @@ -23614,19 +23623,19 @@ variable_template_argument - 310940 + 310761 variable_id - 163460 + 163415 index - 1775 + 1773 arg_type - 171293 + 171242 @@ -23640,22 +23649,22 @@ 1 2 - 83662 + 83690 2 3 - 50865 + 50819 3 4 - 18800 + 18783 4 17 - 10131 + 10122 @@ -23671,22 +23680,22 @@ 1 2 - 88362 + 88386 2 3 - 52119 + 52071 3 4 - 13682 + 13670 4 17 - 9295 + 9287 @@ -23740,8 +23749,8 @@ 104 - 1252 - 1253 + 1253 + 1254 104 @@ -23801,8 +23810,8 @@ 104 - 742 - 743 + 743 + 744 104 @@ -23819,22 +23828,22 @@ 1 2 - 137766 + 137745 2 3 - 19531 + 19513 3 - 23 - 12847 + 24 + 12939 - 23 + 24 110 - 1148 + 1043 @@ -23850,17 +23859,17 @@ 1 2 - 154268 + 154232 2 3 - 14935 + 14922 3 6 - 2088 + 2087 @@ -23870,11 +23879,11 @@ variable_template_argument_value - 11907 + 11896 variable_id - 7833 + 7826 index @@ -23882,7 +23891,7 @@ arg_value - 11907 + 11896 @@ -23896,7 +23905,7 @@ 1 2 - 7415 + 7409 2 @@ -23917,12 +23926,12 @@ 1 2 - 4386 + 4382 2 3 - 3133 + 3130 4 @@ -24005,7 +24014,7 @@ 1 2 - 11907 + 11896 @@ -24021,7 +24030,7 @@ 1 2 - 11907 + 11896 @@ -24918,11 +24927,11 @@ attributes - 735205 + 736102 id - 735205 + 736102 kind @@ -24930,7 +24939,7 @@ name - 1671 + 1669 name_space @@ -24938,7 +24947,7 @@ location - 482756 + 483464 @@ -24952,7 +24961,7 @@ 1 2 - 735205 + 736102 @@ -24968,7 +24977,7 @@ 1 2 - 735205 + 736102 @@ -24984,7 +24993,7 @@ 1 2 - 735205 + 736102 @@ -25000,7 +25009,7 @@ 1 2 - 735205 + 736102 @@ -25019,13 +25028,13 @@ 104 - 2330 - 2331 + 2332 + 2333 104 - 4704 - 4705 + 4717 + 4718 104 @@ -25092,13 +25101,13 @@ 104 - 2055 - 2056 + 2057 + 2058 104 - 2565 - 2566 + 2574 + 2575 104 @@ -25168,8 +25177,8 @@ 104 - 1043 - 1044 + 1048 + 1049 104 @@ -25178,8 +25187,8 @@ 104 - 3934 - 3935 + 3944 + 3945 104 @@ -25196,7 +25205,7 @@ 1 2 - 1462 + 1460 2 @@ -25217,7 +25226,7 @@ 1 2 - 1671 + 1669 @@ -25281,8 +25290,8 @@ 104 - 331 - 332 + 333 + 334 104 @@ -25291,8 +25300,8 @@ 104 - 2379 - 2380 + 2388 + 2389 104 @@ -25312,8 +25321,8 @@ 104 - 7016 - 7017 + 7031 + 7032 104 @@ -25375,8 +25384,8 @@ 104 - 4613 - 4614 + 4624 + 4625 104 @@ -25393,17 +25402,17 @@ 1 2 - 425205 + 425862 2 3 - 36869 + 36627 3 201 - 20680 + 20974 @@ -25419,7 +25428,7 @@ 1 2 - 482756 + 483464 @@ -25435,12 +25444,12 @@ 1 2 - 478473 + 479186 2 3 - 4282 + 4278 @@ -25456,7 +25465,7 @@ 1 2 - 482756 + 483464 @@ -26101,6 +26110,54 @@ + + attribute_arg_expr + 1 + + + arg + 1 + + + expr + 1 + + + + + arg + expr + + + 12 + + + 1 + 2 + 1 + + + + + + + expr + arg + + + 12 + + + 1 + 2 + 1 + + + + + + + attribute_arg_name 6 @@ -26156,15 +26213,15 @@ typeattributes - 84811 + 85047 type_id - 61937 + 62194 spec_id - 84811 + 85047 @@ -26178,17 +26235,17 @@ 1 2 - 55983 + 56245 2 4 - 4282 + 4278 12 13 - 1671 + 1669 @@ -26204,7 +26261,7 @@ 1 2 - 84811 + 85047 @@ -28126,19 +28183,19 @@ comments - 8761469 + 8756423 id - 8761469 + 8756423 contents - 3335424 + 3334269 location - 8761469 + 8756423 @@ -28152,7 +28209,7 @@ 1 2 - 8761469 + 8756423 @@ -28168,7 +28225,7 @@ 1 2 - 8761469 + 8756423 @@ -28184,17 +28241,17 @@ 1 2 - 3051327 + 3050117 2 7 - 250569 + 250654 7 32784 - 33527 + 33497 @@ -28210,17 +28267,17 @@ 1 2 - 3051327 + 3050117 2 7 - 250569 + 250654 7 32784 - 33527 + 33497 @@ -28236,7 +28293,7 @@ 1 2 - 8761469 + 8756423 @@ -28252,7 +28309,7 @@ 1 2 - 8761469 + 8756423 @@ -29008,11 +29065,11 @@ expr_isload - 5206600 + 5206561 expr_id - 5206600 + 5206561 @@ -30585,19 +30642,19 @@ bitfield - 20889 + 20870 id - 20889 + 20870 bits - 2611 + 2608 declared_bits - 2611 + 2608 @@ -30611,7 +30668,7 @@ 1 2 - 20889 + 20870 @@ -30627,7 +30684,7 @@ 1 2 - 20889 + 20870 @@ -30643,7 +30700,7 @@ 1 2 - 731 + 730 2 @@ -30694,7 +30751,7 @@ 1 2 - 2611 + 2608 @@ -30710,7 +30767,7 @@ 1 2 - 731 + 730 2 @@ -30761,7 +30818,7 @@ 1 2 - 2611 + 2608 @@ -30771,23 +30828,23 @@ initialisers - 1698635 + 1711579 init - 1698635 + 1711579 var - 722109 + 720140 expr - 1698635 + 1711579 location - 390823 + 394825 @@ -30801,7 +30858,7 @@ 1 2 - 1698635 + 1711579 @@ -30817,7 +30874,7 @@ 1 2 - 1698635 + 1711579 @@ -30833,7 +30890,7 @@ 1 2 - 1698635 + 1711579 @@ -30849,17 +30906,17 @@ 1 2 - 633984 + 634328 2 - 16 - 31466 + 15 + 28745 16 25 - 56657 + 57066 @@ -30875,17 +30932,17 @@ 1 2 - 633984 + 634328 2 - 16 - 31466 + 15 + 28745 16 25 - 56657 + 57066 @@ -30901,7 +30958,7 @@ 1 2 - 722102 + 720134 2 @@ -30922,7 +30979,7 @@ 1 2 - 1698635 + 1711579 @@ -30938,7 +30995,7 @@ 1 2 - 1698635 + 1711579 @@ -30954,7 +31011,7 @@ 1 2 - 1698635 + 1711579 @@ -30970,22 +31027,22 @@ 1 2 - 318451 + 321852 2 3 - 23851 + 23975 3 15 - 30680 + 31001 15 111551 - 17839 + 17997 @@ -31001,17 +31058,17 @@ 1 2 - 341120 + 344754 2 4 - 35642 + 36115 4 - 12811 - 14060 + 12073 + 13956 @@ -31027,22 +31084,22 @@ 1 2 - 318451 + 321852 2 3 - 23851 + 23975 3 15 - 30680 + 31001 15 111551 - 17839 + 17997 @@ -31641,15 +31698,15 @@ new_array_allocated_type - 5099 + 5101 expr - 5099 + 5101 type_id - 2194 + 2191 @@ -31663,7 +31720,7 @@ 1 2 - 5099 + 5101 @@ -31684,17 +31741,17 @@ 2 3 - 1943 + 1937 3 - 7 - 169 + 5 + 165 - 8 + 6 15 - 50 + 57 @@ -32827,15 +32884,15 @@ uuidof_bind - 20103 + 20309 expr - 20103 + 20309 type_id - 19908 + 20112 @@ -32849,7 +32906,7 @@ 1 2 - 20103 + 20309 @@ -32865,12 +32922,12 @@ 1 2 - 19745 + 19947 2 4 - 163 + 165 @@ -34006,19 +34063,19 @@ stmts - 4646866 + 4651301 id - 4646866 + 4651301 kind - 1984 + 1982 location - 2281758 + 2288031 @@ -34032,7 +34089,7 @@ 1 2 - 4646866 + 4651301 @@ -34048,7 +34105,7 @@ 1 2 - 4646866 + 4651301 @@ -34137,23 +34194,23 @@ 104 - 4612 - 4613 + 4613 + 4614 104 - 8756 - 8757 + 8794 + 8795 104 - 11554 - 11555 + 11560 + 11561 104 - 13283 - 13284 + 13321 + 13322 104 @@ -34243,23 +34300,23 @@ 104 - 2189 - 2190 + 2190 + 2191 104 - 4192 - 4193 + 4229 + 4230 104 - 6065 - 6066 + 6071 + 6072 104 - 6531 - 6532 + 6568 + 6569 104 @@ -34276,22 +34333,22 @@ 1 2 - 1887887 + 1894414 2 4 - 175576 + 175416 4 12 - 175785 + 175729 12 687 - 42510 + 42471 @@ -34307,12 +34364,12 @@ 1 2 - 2224626 + 2230846 2 8 - 57132 + 57185 @@ -34610,15 +34667,15 @@ constexpr_if_then - 52432 + 52384 constexpr_if_stmt - 52432 + 52384 then_id - 52432 + 52384 @@ -34632,7 +34689,7 @@ 1 2 - 52432 + 52384 @@ -34648,7 +34705,7 @@ 1 2 - 52432 + 52384 @@ -34658,15 +34715,15 @@ constexpr_if_else - 30811 + 30783 constexpr_if_stmt - 30811 + 30783 else_id - 30811 + 30783 @@ -34680,7 +34737,7 @@ 1 2 - 30811 + 30783 @@ -34696,7 +34753,7 @@ 1 2 - 30811 + 30783 @@ -35356,19 +35413,19 @@ stmtparents - 4053171 + 4057309 id - 4053171 + 4057309 index - 12211 + 12336 parent - 1719896 + 1722474 @@ -35382,7 +35439,7 @@ 1 2 - 4053171 + 4057309 @@ -35398,7 +35455,7 @@ 1 2 - 4053171 + 4057309 @@ -35414,52 +35471,52 @@ 1 2 - 4011 + 4053 2 3 - 999 + 1010 3 4 - 220 + 222 4 5 - 1553 + 1569 7 8 - 1018 + 1029 8 12 - 792 + 800 12 29 - 1075 + 1086 29 38 - 918 + 927 41 77 - 924 + 933 77 - 196965 - 697 + 195121 + 705 @@ -35475,52 +35532,52 @@ 1 2 - 4011 + 4053 2 3 - 999 + 1010 3 4 - 220 + 222 4 5 - 1553 + 1569 7 8 - 1018 + 1029 8 12 - 792 + 800 12 29 - 1075 + 1086 29 38 - 918 + 927 41 77 - 924 + 933 77 - 196965 - 697 + 195121 + 705 @@ -35536,32 +35593,32 @@ 1 2 - 987613 + 989875 2 3 - 373033 + 372788 3 4 - 105762 + 105778 4 6 - 111258 + 111280 6 17 - 129865 + 130458 17 1943 - 12362 + 12292 @@ -35577,32 +35634,32 @@ 1 2 - 987613 + 989875 2 3 - 373033 + 372788 3 4 - 105762 + 105778 4 6 - 111258 + 111280 6 17 - 129865 + 130458 17 1943 - 12362 + 12292 @@ -35649,7 +35706,7 @@ 1 2 - 524114 + 524113 2 @@ -35670,7 +35727,7 @@ 1 2 - 524114 + 524113 2 @@ -35916,7 +35973,7 @@ decl_entry - 527490 + 527489 @@ -36154,7 +36211,7 @@ 1 2 - 527469 + 527468 3 @@ -36175,7 +36232,7 @@ 1 2 - 527490 + 527489 @@ -36424,19 +36481,19 @@ preprocdirects - 4421260 + 4424439 id - 4421260 + 4424439 kind - 1044 + 1147 location - 4418753 + 4421830 @@ -36450,7 +36507,7 @@ 1 2 - 4421260 + 4424439 @@ -36466,7 +36523,7 @@ 1 2 - 4421260 + 4424439 @@ -36479,29 +36536,34 @@ 12 + + 1 + 2 + 104 + 122 123 104 - 692 - 693 + 694 + 695 104 - 795 - 796 + 799 + 800 104 - 918 - 919 + 932 + 933 104 - 1688 - 1689 + 1689 + 1690 104 @@ -36510,23 +36572,23 @@ 104 - 2983 - 2984 + 3012 + 3013 104 - 3797 - 3798 + 3802 + 3803 104 - 6280 - 6281 + 6290 + 6291 104 - 23263 - 23264 + 23266 + 23267 104 @@ -36540,29 +36602,34 @@ 12 + + 1 + 2 + 104 + 122 123 104 - 692 - 693 + 694 + 695 104 - 795 - 796 + 799 + 800 104 - 918 - 919 + 932 + 933 104 - 1688 - 1689 + 1689 + 1690 104 @@ -36571,23 +36638,23 @@ 104 - 2983 - 2984 + 3012 + 3013 104 - 3797 - 3798 + 3802 + 3803 104 - 6280 - 6281 + 6290 + 6291 104 - 23239 - 23240 + 23241 + 23242 104 @@ -36604,11 +36671,11 @@ 1 2 - 4418648 + 4421726 - 25 - 26 + 26 + 27 104 @@ -36625,7 +36692,7 @@ 1 2 - 4418753 + 4421830 @@ -36715,19 +36782,19 @@ preproctext - 3564582 + 3567497 id - 3564582 + 3567497 head - 2585700 + 2585436 body - 1512398 + 1511023 @@ -36741,7 +36808,7 @@ 1 2 - 3564582 + 3567497 @@ -36757,7 +36824,7 @@ 1 2 - 3564582 + 3567497 @@ -36773,12 +36840,12 @@ 1 2 - 2438952 + 2438403 2 740 - 146748 + 147032 @@ -36794,12 +36861,12 @@ 1 2 - 2523659 + 2523242 2 5 - 62041 + 62194 @@ -36815,17 +36882,17 @@ 1 2 - 1369097 + 1367851 2 6 - 113429 + 113326 6 - 11572 - 29871 + 11630 + 29844 @@ -36841,17 +36908,17 @@ 1 2 - 1372126 + 1370878 2 7 - 113743 + 113639 7 - 2959 - 26529 + 2980 + 26505 @@ -36934,15 +37001,15 @@ link_targets - 1475 + 850 id - 1475 + 850 binary - 1475 + 850 @@ -36956,7 +37023,7 @@ 1 2 - 1475 + 850 @@ -36972,7 +37039,7 @@ 1 2 - 1475 + 850 diff --git a/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/old.dbscheme b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/old.dbscheme new file mode 100644 index 00000000000..fc81eb5a3a7 --- /dev/null +++ b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/old.dbscheme @@ -0,0 +1,2233 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..d8149ca90e6 --- /dev/null +++ b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/semmlecode.cpp.dbscheme @@ -0,0 +1,2238 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/upgrade.properties b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/upgrade.properties new file mode 100644 index 00000000000..87523401555 --- /dev/null +++ b/cpp/ql/lib/upgrades/fc81eb5a3a7cdde8d9ad813da1e8f1e90dadbb91/upgrade.properties @@ -0,0 +1,2 @@ +description: Support expression attribute arguments +compatibility: backwards From f59a00c5ea6797a13f0a509be950ad4985070600 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:52:18 +0100 Subject: [PATCH 205/205] Update cpp/ql/lib/semmle/code/cpp/Specifier.qll Co-authored-by: Calum Grant <42069085+calumgrant@users.noreply.github.com> --- cpp/ql/lib/semmle/code/cpp/Specifier.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Specifier.qll b/cpp/ql/lib/semmle/code/cpp/Specifier.qll index 7e32372da5a..2f1976d220c 100644 --- a/cpp/ql/lib/semmle/code/cpp/Specifier.qll +++ b/cpp/ql/lib/semmle/code/cpp/Specifier.qll @@ -282,7 +282,7 @@ class AttributeArgument extends Element, @attribute_arg { } /** - * Gets the value of this argument, if its value is a expression. + * Gets the value of this argument, if its value is an expression. */ Expr getValueExpr() { attribute_arg_expr(underlyingElement(this), unresolveElement(result)) }