Merge branch 'main' into maikypedia/ruby-ssti

This commit is contained in:
Alex Ford
2023-03-20 09:55:53 +00:00
committed by GitHub
455 changed files with 22298 additions and 2302 deletions

View File

@@ -5,6 +5,7 @@
private import SemanticExpr
private import SemanticExprSpecific::SemanticExprConfig as Specific
private import SemanticSSA
private import SemanticLocation
/**
* A valid base for an expression bound.
@@ -14,6 +15,8 @@ private import SemanticSSA
class SemBound instanceof Specific::Bound {
final string toString() { result = super.toString() }
final SemLocation getLocation() { result = super.getLocation() }
final SemExpr getExpr(int delta) { result = Specific::getBoundExpr(this, delta) }
}

View File

@@ -0,0 +1,23 @@
private import semmle.code.cpp.Location
class SemLocation instanceof Location {
/**
* Gets a textual representation of this element.
*
* The format is "file://filePath:startLine:startColumn:endLine:endColumn".
*/
string toString() { result = super.toString() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}

View File

@@ -0,0 +1,29 @@
private import RangeAnalysisStage
module IntDelta implements DeltaSig {
class Delta = int;
bindingset[d]
bindingset[result]
float toFloat(Delta d) { result = d }
bindingset[d]
bindingset[result]
int toInt(Delta d) { result = d }
bindingset[n]
bindingset[result]
Delta fromInt(int n) { result = n }
bindingset[f]
Delta fromFloat(float f) {
result =
min(float diff, float res |
diff = (res - f) and res = f.ceil()
or
diff = (f - res) and res = f.floor()
|
res order by diff
)
}
}

View File

@@ -1,24 +1,2 @@
private import RangeAnalysisStage
private import RangeAnalysisSpecific
private import experimental.semmle.code.cpp.semantic.analysis.FloatDelta
private import RangeUtils
private import experimental.semmle.code.cpp.semantic.SemanticBound as SemanticBound
module Bounds implements BoundSig<FloatDelta> {
class SemBound instanceof SemanticBound::SemBound {
string toString() { result = super.toString() }
SemExpr getExpr(float delta) { result = super.getExpr(delta) }
}
class SemZeroBound extends SemBound instanceof SemanticBound::SemZeroBound { }
class SemSsaBound extends SemBound instanceof SemanticBound::SemSsaBound {
SemSsaVariable getAVariable() { result = this.(SemanticBound::SemSsaBound).getAVariable() }
}
}
private module CppRangeAnalysis =
RangeStage<FloatDelta, Bounds, CppLangImpl, RangeUtil<FloatDelta, CppLangImpl>>;
import CppRangeAnalysis
import RangeAnalysisImpl
import experimental.semmle.code.cpp.semantic.SemanticBound

View File

@@ -0,0 +1,107 @@
private import RangeAnalysisStage
private import RangeAnalysisSpecific
private import experimental.semmle.code.cpp.semantic.analysis.FloatDelta
private import RangeUtils
private import experimental.semmle.code.cpp.semantic.SemanticBound as SemanticBound
private import experimental.semmle.code.cpp.semantic.SemanticLocation
private import experimental.semmle.code.cpp.semantic.SemanticSSA
module ConstantBounds implements BoundSig<FloatDelta> {
class SemBound instanceof SemanticBound::SemBound {
SemBound() {
this instanceof SemanticBound::SemZeroBound
or
this.(SemanticBound::SemSsaBound).getAVariable() instanceof SemSsaPhiNode
}
string toString() { result = super.toString() }
SemLocation getLocation() { result = super.getLocation() }
SemExpr getExpr(float delta) { result = super.getExpr(delta) }
}
class SemZeroBound extends SemBound instanceof SemanticBound::SemZeroBound { }
class SemSsaBound extends SemBound instanceof SemanticBound::SemSsaBound {
SemSsaVariable getAVariable() { result = this.(SemanticBound::SemSsaBound).getAVariable() }
}
}
private module RelativeBounds implements BoundSig<FloatDelta> {
class SemBound instanceof SemanticBound::SemBound {
SemBound() { not this instanceof SemanticBound::SemZeroBound }
string toString() { result = super.toString() }
SemLocation getLocation() { result = super.getLocation() }
SemExpr getExpr(float delta) { result = super.getExpr(delta) }
}
class SemZeroBound extends SemBound instanceof SemanticBound::SemZeroBound { }
class SemSsaBound extends SemBound instanceof SemanticBound::SemSsaBound {
SemSsaVariable getAVariable() { result = this.(SemanticBound::SemSsaBound).getAVariable() }
}
}
private module ConstantStage =
RangeStage<FloatDelta, ConstantBounds, CppLangImpl, RangeUtil<FloatDelta, CppLangImpl>>;
private module RelativeStage =
RangeStage<FloatDelta, RelativeBounds, CppLangImpl, RangeUtil<FloatDelta, CppLangImpl>>;
private newtype TSemReason =
TSemNoReason() or
TSemCondReason(SemGuard guard) {
guard = any(ConstantStage::SemCondReason reason).getCond()
or
guard = any(RelativeStage::SemCondReason reason).getCond()
}
/**
* A reason for an inferred bound. This can either be `CondReason` if the bound
* is due to a specific condition, or `NoReason` if the bound is inferred
* without going through a bounding condition.
*/
abstract class SemReason extends TSemReason {
/** Gets a textual representation of this reason. */
abstract string toString();
}
/**
* A reason for an inferred bound that indicates that the bound is inferred
* without going through a bounding condition.
*/
class SemNoReason extends SemReason, TSemNoReason {
override string toString() { result = "NoReason" }
}
/** A reason for an inferred bound pointing to a condition. */
class SemCondReason extends SemReason, TSemCondReason {
/** Gets the condition that is the reason for the bound. */
SemGuard getCond() { this = TSemCondReason(result) }
override string toString() { result = getCond().toString() }
}
private ConstantStage::SemReason constantReason(SemReason reason) {
result instanceof ConstantStage::SemNoReason and reason instanceof SemNoReason
or
result.(ConstantStage::SemCondReason).getCond() = reason.(SemCondReason).getCond()
}
private RelativeStage::SemReason relativeReason(SemReason reason) {
result instanceof RelativeStage::SemNoReason and reason instanceof SemNoReason
or
result.(RelativeStage::SemCondReason).getCond() = reason.(SemCondReason).getCond()
}
predicate semBounded(
SemExpr e, SemanticBound::SemBound b, float delta, boolean upper, SemReason reason
) {
ConstantStage::semBounded(e, b, delta, upper, constantReason(reason))
or
RelativeStage::semBounded(e, b, delta, upper, relativeReason(reason))
}

View File

@@ -73,6 +73,7 @@ import experimental.semmle.code.cpp.semantic.SemanticCFG
import experimental.semmle.code.cpp.semantic.SemanticType
import experimental.semmle.code.cpp.semantic.SemanticOpcode
private import ConstantAnalysis
import experimental.semmle.code.cpp.semantic.SemanticLocation
/**
* Holds if `typ` is a small integral type with the given lower and upper bounds.
@@ -228,6 +229,10 @@ signature module UtilSig<DeltaSig DeltaParam> {
signature module BoundSig<DeltaSig D> {
class SemBound {
string toString();
SemLocation getLocation();
SemExpr getExpr(D::Delta delta);
}

View File

@@ -4,12 +4,12 @@ import experimental.semmle.code.cpp.semantic.Semantic
import experimental.semmle.code.cpp.semantic.analysis.RangeUtils
import experimental.semmle.code.cpp.semantic.analysis.FloatDelta
import experimental.semmle.code.cpp.semantic.analysis.RangeAnalysisSpecific
import experimental.semmle.code.cpp.semantic.analysis.RangeAnalysis
import experimental.semmle.code.cpp.semantic.analysis.RangeAnalysisImpl
import semmle.code.cpp.ir.IR as IR
import TestUtilities.InlineExpectationsTest
module ModulusAnalysisInstantiated =
ModulusAnalysis<FloatDelta, Bounds, RangeUtil<FloatDelta, CppLangImpl>>;
ModulusAnalysis<FloatDelta, ConstantBounds, RangeUtil<FloatDelta, CppLangImpl>>;
class ModulusAnalysisTest extends InlineExpectationsTest {
ModulusAnalysisTest() { this = "ModulusAnalysisTest" }

View File

@@ -24,7 +24,7 @@
JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [7]_"
Python [8]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11",Not applicable,``.py``
Ruby [9]_,"up to 3.1",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``"
TypeScript [10]_,"2.6-4.9",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``"
TypeScript [10]_,"2.6-5.0",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``"
.. container:: footnote-group

View File

@@ -19,6 +19,16 @@ abstract class SafeExternalApiFunction extends Function { }
/** DEPRECATED: Alias for SafeExternalApiFunction */
deprecated class SafeExternalAPIFunction = SafeExternalApiFunction;
/**
* A `Function` with one or more arguments that are considered "safe" from a security perspective.
*/
abstract class SafeExternalApiArgument extends Function {
/**
* Holds if `i` is a safe argument to this function.
*/
abstract predicate isSafeArgument(int i);
}
private predicate isDefaultSafePackage(Package package) {
package.getPath() in ["time", "unicode/utf8", package("gopkg.in/go-playground/validator", "")]
}
@@ -44,6 +54,16 @@ private class DefaultSafeExternalApiFunction extends SafeExternalApiFunction {
}
}
private class DefaultSafeExternalApiFunctionArgument extends SafeExternalApiArgument {
int index;
DefaultSafeExternalApiFunctionArgument() {
this.(Method).hasQualifiedName("net/http", "Header", ["Set", "Del"]) and index = -1
}
override predicate isSafeArgument(int i) { i = index }
}
/** Holds if `callNode` is a local function pointer. */
private predicate isProbableLocalFunctionPointer(DataFlow::CallNode callNode) {
// Not a method call
@@ -77,7 +97,9 @@ class ExternalApiDataNode extends DataFlow::Node {
// Not already modeled as a taint step
not TaintTracking::localTaintStep(this, _) and
// Not a call to a known safe external API
not call.getTarget() instanceof SafeExternalApiFunction
not call.getTarget() instanceof SafeExternalApiFunction and
// Not a known safe argument to an external API
not any(SafeExternalApiArgument seaa).isSafeArgument(i)
}
/** Gets the called API `Function`. */

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* The receiver arguments of `net/http.Header.Set` and `.Del` are no longer flagged by query `go/untrusted-data-to-external-api`.

View File

@@ -25,6 +25,7 @@ com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,
com.mitchellbosecke.pebble,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,
com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,,,
com.rabbitmq.client,,21,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,7,
com.thoughtworks.xstream,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,
com.unboundid.ldap.sdk,17,,,,,,,,,,,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,
com.zaxxer.hikari,2,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1
@@ -32,16 +33,18 @@ freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,
freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,
groovy.lang,26,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
groovy.util,5,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
hudson.remoting,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,7,,
jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23
jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,
jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,
jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55
java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
java.io,42,,42,,17,,,,,,,,,,,,,,,3,,,,,,,,,,,,,22,,,,,,,,41,1
java.io,42,,40,,17,,,,,,,,,,,,,,,3,,,,,,,,,,,,,22,,,,,,,,39,1
java.lang,16,,76,,,,,,,,,,,,8,,,,,3,,4,,,1,,,,,,,,,,,,,,,,53,23
java.net,10,3,9,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,3,9,
java.nio,16,,16,,13,,,,,,,,,,,,,,,1,,,,,,,,,,,,,2,,,,,,,,16,
java.net,12,3,16,,,,,,,,,,,,,,,12,,,,,,,,,,,,,,,,,,,,,,3,16,
java.nio,20,,15,,15,,,,,,,,,,,,,,,3,,,,,,,,,,,,,2,,,,,,,,15,
java.sql,13,,2,,,,,,,,4,,,,,,,,,,,,,,,,,,9,,,,,,,,,,,,1,1
java.util,44,,465,,,,,,,,,,,,34,,,,,,,,5,2,,1,2,,,,,,,,,,,,,,38,427
javafx.scene.web,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,
@@ -57,7 +60,7 @@ javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,
javax.ws.rs.client,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,
javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,
javax.ws.rs.core,3,,149,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55
javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,6,
javax.xml.transform,2,,6,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,6,
javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,
jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10
kotlin,12,,1835,,10,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,1828,7
@@ -67,8 +70,9 @@ okhttp3,2,,47,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,22,25
org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,
org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783
org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17,783
org.apache.commons.compress.archivers.tar,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,
org.apache.commons.io,106,,560,,91,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,546,14
org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,
org.apache.commons.io,107,,560,,91,,,,,,,,,,,,,15,,1,,,,,,,,,,,,,,,,,,,,,546,14
org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,
org.apache.commons.jexl2,15,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.apache.commons.jexl3,15,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.apache.commons.lang3,6,,424,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,293,131
@@ -88,6 +92,8 @@ org.apache.log4j,11,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.apache.logging.log4j,359,,8,,,,,,,,,,,,359,,,,,,,,,,,,,,,,,,,,,,,,,,4,4
org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
org.apache.shiro.jndi,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.apache.tools.ant,11,,,,3,,,,,,,,,,,,,,,8,,,,,,,,,,,,,,,,,,,,,,
org.apache.tools.zip,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,
org.apache.velocity.app,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,
org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,
org.codehaus.cargo.container.installer,3,,,,2,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,
@@ -98,7 +104,9 @@ org.jboss.logging,324,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.jdbi.v3.core,6,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,
org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38
org.kohsuke.stapler,3,,1,,,,,,,,,,,,,,,1,,1,,,,,,,,,,,,1,,,,,,,,,1,
org.mvel2,16,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,,,,,,,
org.openjdk.jmh.runner.options,1,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.scijava.log,13,,,,,,,,,,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,
org.slf4j,55,,6,,,,,,,,,,,,55,,,,,,,,,,,,,,,,,,,,,,,,,,2,4
org.springframework.beans,,,30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30
1 package sink source summary sink:bean-validation sink:create-file sink:fragment-injection sink:groovy sink:header-splitting sink:information-leak sink:intent-start sink:jdbc-url sink:jexl sink:jndi-injection sink:ldap sink:logging sink:mvel sink:ognl-injection sink:open-url sink:pending-intent-sent sink:read-file sink:regex-use sink:regex-use[-1] sink:regex-use[0] sink:regex-use[] sink:regex-use[f-1] sink:regex-use[f1] sink:regex-use[f] sink:set-hostname-verifier sink:sql sink:ssti sink:url-open-stream sink:url-redirect sink:write-file sink:xpath sink:xslt sink:xss source:android-external-storage-dir source:android-widget source:contentprovider source:remote summary:taint summary:value
25 com.mitchellbosecke.pebble 2 2
26 com.opensymphony.xwork2.ognl 3 3
27 com.rabbitmq.client 21 7 21 7
28 com.thoughtworks.xstream 1 1
29 com.unboundid.ldap.sdk 17 17
30 com.zaxxer.hikari 2 2
31 flexjson 1 1
33 freemarker.template 7 7
34 groovy.lang 26 26
35 groovy.util 5 5
36 hudson.remoting 1 1
37 io.netty.resolver 1 1
38 jakarta.faces.context 2 7 2 7
39 jakarta.json 123 100 23
40 jakarta.ws.rs.client 1 1
41 jakarta.ws.rs.container 9 9
42 jakarta.ws.rs.core 2 149 2 94 55
43 java.beans 1 1
44 java.io 42 42 40 17 3 22 41 39 1
45 java.lang 16 76 8 3 4 1 53 23
46 java.net 10 12 3 9 16 10 12 3 9 16
47 java.nio 16 20 16 15 13 15 1 3 2 16 15
48 java.sql 13 2 4 9 1 1
49 java.util 44 465 34 5 2 1 2 38 427
50 javafx.scene.web 1 1
60 javax.ws.rs.client 1 1
61 javax.ws.rs.container 9 9
62 javax.ws.rs.core 3 149 1 2 94 55
63 javax.xml.transform 1 2 6 1 1 6
64 javax.xml.xpath 3 3
65 jodd.json 10 10
66 kotlin 12 1835 10 2 1828 7
70 org.apache.commons.codec 6 6
71 org.apache.commons.collections 800 17 783
72 org.apache.commons.collections4 800 17 783
73 org.apache.commons.compress.archivers.tar 2 4 2 4
74 org.apache.commons.io 106 107 560 91 15 1 546 14
75 org.apache.commons.jelly 6 6
76 org.apache.commons.jexl2 15 15
77 org.apache.commons.jexl3 15 15
78 org.apache.commons.lang3 6 424 6 293 131
92 org.apache.logging.log4j 359 8 359 4 4
93 org.apache.shiro.codec 1 1
94 org.apache.shiro.jndi 1 1
95 org.apache.tools.ant 11 3 8
96 org.apache.tools.zip 1 1
97 org.apache.velocity.app 4 4
98 org.apache.velocity.runtime 4 4
99 org.codehaus.cargo.container.installer 3 2 1
104 org.jdbi.v3.core 6 6
105 org.jooq 1 1
106 org.json 236 198 38
107 org.kohsuke.stapler 3 1 1 1 1 1
108 org.mvel2 16 16
109 org.openjdk.jmh.runner.options 1 1
110 org.scijava.log 13 13
111 org.slf4j 55 6 55 2 4
112 org.springframework.beans 30 30

View File

@@ -10,7 +10,7 @@ Java framework & library support
Android,``android.*``,52,479,138,,,3,67,,,
Android extensions,``androidx.*``,5,183,19,,,,,,,
`Apache Commons Collections <https://commons.apache.org/proper/commons-collections/>`_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,,,
`Apache Commons IO <https://commons.apache.org/proper/commons-io/>`_,``org.apache.commons.io``,,560,106,91,,,,,,15
`Apache Commons IO <https://commons.apache.org/proper/commons-io/>`_,``org.apache.commons.io``,,560,107,91,,,,,,15
`Apache Commons Lang <https://commons.apache.org/proper/commons-lang/>`_,``org.apache.commons.lang3``,,424,6,,,,,,,
`Apache Commons Text <https://commons.apache.org/proper/commons-text/>`_,``org.apache.commons.text``,,272,,,,,,,,
`Apache HttpComponents <https://hc.apache.org/>`_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,143,28,,,3,,,,25
@@ -18,10 +18,10 @@ Java framework & library support
`Google Guava <https://guava.dev/>`_,``com.google.common.*``,,728,39,,6,,,,,
JBoss Logging,``org.jboss.logging``,,,324,,,,,,,
`JSON-java <https://github.com/stleary/JSON-java>`_,``org.json``,,236,,,,,,,,
Java Standard Library,``java.*``,3,611,141,30,,,9,,,10
Java extensions,"``javax.*``, ``jakarta.*``",63,609,32,,,4,,1,1,2
Java Standard Library,``java.*``,3,615,147,32,,,9,,,12
Java extensions,"``javax.*``, ``jakarta.*``",63,609,33,1,,4,,1,1,2
Kotlin Standard Library,``kotlin*``,,1835,12,10,,,,,,2
`Spring <https://spring.io/>`_,``org.springframework.*``,29,477,101,,,,19,14,,29
Others,"``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.hubspot.jinjava``, ``com.mitchellbosecke.pebble``, ``com.opensymphony.xwork2.ognl``, ``com.rabbitmq.client``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.util``, ``javafx.scene.web``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jdbi.v3.core``, ``org.jooq``, ``org.mvel2``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``",60,302,277,2,,,18,18,,5
Totals,,217,8467,1582,133,6,10,113,33,1,88
Others,"``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.hubspot.jinjava``, ``com.mitchellbosecke.pebble``, ``com.opensymphony.xwork2.ognl``, ``com.rabbitmq.client``, ``com.thoughtworks.xstream``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.util``, ``hudson.remoting``, ``io.netty.resolver``, ``javafx.scene.web``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``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.hibernate``, ``org.jdbi.v3.core``, ``org.jooq``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``",60,308,299,6,,,18,18,,12
Totals,,217,8477,1612,140,6,10,113,33,1,97

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["com.thoughtworks.xstream", "XStream", True, "fromXML", "(File)", "", "Argument[0]", "read-file", "ai-generated"]

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["hudson.remoting", "URLDeserializationHelper", True, "wrapIfRequired", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["io.netty.resolver", "SimpleNameResolver", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]

View File

@@ -87,9 +87,7 @@ extensions:
- ["java.io", "OutputStream", True, "write", "(byte[],int,int)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["java.io", "OutputStream", True, "write", "(int)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["java.io", "Reader", True, "read", "", "", "Argument[-1]", "Argument[0]", "taint", "manual"]
- ["java.io", "Reader", True, "read", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.io", "StringReader", False, "StringReader", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["java.io", "Writer", True, "toString", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.io", "Writer", True, "write", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- addsTo:
pack: codeql/java-all

View File

@@ -9,7 +9,9 @@ extensions:
pack: codeql/java-all
extensible: sinkModel
data:
- ["java.net", "DatagramSocket", True, "connect", "(SocketAddress)", "", "Argument[0]", "open-url", "ai-generated"]
- ["java.net", "URL", False, "openConnection", "", "", "Argument[-1]", "open-url", "manual"]
- ["java.net", "URL", False, "openConnection", "(Proxy)", "", "Argument[0]", "open-url", "ai-generated"]
- ["java.net", "URL", False, "openStream", "", "", "Argument[-1]", "open-url", "manual"]
- ["java.net", "URLClassLoader", False, "URLClassLoader", "(String,URL[],ClassLoader)", "", "Argument[1]", "open-url", "manual"]
- ["java.net", "URLClassLoader", False, "URLClassLoader", "(String,URL[],ClassLoader,URLStreamHandlerFactory)", "", "Argument[1]", "open-url", "manual"]
@@ -21,6 +23,11 @@ extensions:
pack: codeql/java-all
extensible: summaryModel
data:
- ["java.net", "InetAddress", True, "getByName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]
- ["java.net", "InetSocketAddress", True, "createUnresolved", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]
- ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(String,int)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["java.net", "URI", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]
- ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "ai-generated"]
- ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["java.net", "URI", False, "toASCIIString", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
@@ -29,4 +36,6 @@ extensions:
- ["java.net", "URL", False, "URL", "(String)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["java.net", "URL", False, "toURI", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.net", "URL", False, "toExternalForm", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[1]", "Argument[-1]", "taint", "ai-generated"] # @atorralba: review for consistency
- ["java.net", "URLDecoder", False, "decode", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]

View File

@@ -12,7 +12,11 @@ extensions:
- ["java.nio.file", "Files", False, "createSymbolicLink", "", "", "Argument[0]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "createTempDirectory", "(Path,String,FileAttribute[])", "", "Argument[0]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "createTempFile", "(Path,String,String,FileAttribute[])", "", "Argument[0]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "delete", "(Path)", "", "Argument[0]", "create-file", "ai-generated"] # should be delete-file
- ["java.nio.file", "Files", False, "deleteIfExists", "(Path)", "", "Argument[0]", "create-file", "ai-generated"] # should be delete-file
- ["java.nio.file", "Files", False, "lines", "(Path,Charset)", "", "Argument[0]", "read-file", "ai-generated"]
- ["java.nio.file", "Files", False, "move", "", "", "Argument[1]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "newBufferedReader", "(Path,Charset)", "", "Argument[0]", "read-file", "ai-generated"]
- ["java.nio.file", "Files", False, "newBufferedWriter", "", "", "Argument[0]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "newOutputStream", "", "", "Argument[0]", "create-file", "manual"]
- ["java.nio.file", "Files", False, "write", "", "", "Argument[0]", "create-file", "manual"]
@@ -24,7 +28,6 @@ extensions:
extensible: summaryModel
data:
- ["java.nio.file", "FileSystem", True, "getPath", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["java.nio.file", "FileSystem", True, "getRootDirectories", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["java.nio.file", "Path", True, "getParent", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.nio.file", "Path", True, "normalize", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["java.nio.file", "Path", True, "resolve", "", "", "Argument[-1..0]", "ReturnValue", "taint", "manual"]

View File

@@ -5,3 +5,8 @@ extensions:
data:
- ["javax.xml.transform.stream", "StreamSource", False, "StreamSource", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["javax.xml.transform.stream", "StreamSource", False, "getInputStream", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["javax.xml.transform.stream", "StreamResult", True, "StreamResult", "(File)", "", "Argument[0]", "create-file", "ai-generated"]

View File

@@ -3,5 +3,7 @@ extensions:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.commons.compress.archivers.tar", "TarArchiveEntry", True, "TarArchiveEntry", "(String,boolean)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["org.apache.commons.compress.archivers.tar", "TarArchiveEntry", True, "TarArchiveEntry", "(String)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["org.apache.commons.compress.archivers.tar", "TarArchiveEntry", True, "TarArchiveEntry", "(String,boolean)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["org.apache.commons.compress.archivers.tar", "TarArchiveEntry", True, "TarArchiveEntry", "(String,byte)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]
- ["org.apache.commons.compress.archivers.tar", "TarArchiveEntry", True, "setLinkName", "(String)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]

View File

@@ -12,3 +12,8 @@ extensions:
- ["org.apache.commons.io", "IOUtils", True, "toByteArray", "(Reader,String)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["org.apache.commons.io", "IOUtils", True, "writeLines", "(Collection,String,Writer)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"]
- ["org.apache.commons.io", "IOUtils", True, "writeLines", "(Collection,String,Writer)", "", "Argument[1]", "Argument[2]", "taint", "manual"]
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.commons.io", "FileUtils", True, "openInputStream", "(File)", "", "Argument[0]", "read-file", "ai-generated"]

View File

@@ -0,0 +1,11 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(JellyContext,URL,URL)", "", "Argument[1]", "open-url", "ai-generated"]
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(JellyContext,URL,URL)", "", "Argument[2]", "open-url", "ai-generated"]
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(JellyContext,URL)", "", "Argument[1]", "open-url", "ai-generated"]
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(URL,URL)", "", "Argument[0]", "open-url", "ai-generated"]
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(URL,URL)", "", "Argument[1]", "open-url", "ai-generated"]
- ["org.apache.commons.jelly", "JellyContext", True, "JellyContext", "(URL)", "", "Argument[0]", "open-url", "ai-generated"]

View File

@@ -0,0 +1,10 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.tools.ant", "AntClassLoader", True, "addPathComponent", "(File)", "", "Argument[0]", "read-file", "ai-generated"]
- ["org.apache.tools.ant", "AntClassLoader", True, "AntClassLoader", "(ClassLoader,Project,Path,boolean)", "", "Argument[2]", "read-file", "ai-generated"]
- ["org.apache.tools.ant", "AntClassLoader", True, "AntClassLoader", "(Project,Path,boolean)", "", "Argument[1]", "read-file", "ai-generated"]
- ["org.apache.tools.ant", "AntClassLoader", True, "AntClassLoader", "(Project,Path)", "", "Argument[1]", "read-file", "ai-generated"]
- ["org.apache.tools.ant", "DirectoryScanner", True, "setBasedir", "(File)", "", "Argument[0]", "read-file", "ai-generated"]

View File

@@ -0,0 +1,11 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.tools.ant.taskdefs", "Copy", True, "addFileset", "(FileSet)", "", "Argument[0]", "read-file", "ai-generated"]
- ["org.apache.tools.ant.taskdefs", "Copy", True, "setFile", "(File)", "", "Argument[0]", "read-file", "ai-generated"]
- ["org.apache.tools.ant.taskdefs", "Copy", True, "setTodir", "(File)", "", "Argument[0]", "create-file", "ai-generated"]
- ["org.apache.tools.ant.taskdefs", "Copy", True, "setTofile", "(File)", "", "Argument[0]", "create-file", "ai-generated"]
- ["org.apache.tools.ant.taskdefs", "Expand", True, "setDest", "(File)", "", "Argument[0]", "create-file", "ai-generated"]
- ["org.apache.tools.ant.taskdefs", "Expand", True, "setSrc", "(File)", "", "Argument[0]", "read-file", "ai-generated"]

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.apache.tools.zip", "ZipEntry", True, "ZipEntry", "(String)", "", "Argument[0]", "Argument[-1]", "taint", "ai-generated"]

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", True, "AdjunctManager", "(ServletContext,ClassLoader,String,long)", "", "Argument[2]", "Argument[-1].Field[org.kohsuke.stapler.framework.adjunct.AdjunctManager.rootURL]", "taint", "ai-generated"] # the class never accesses the URL, but the field is public

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.kohsuke.stapler.framework.io", "LargeText", True, "LargeText", "(File,Charset,boolean,boolean)", "", "Argument[0]", "read-file", "ai-generated"]

View File

@@ -0,0 +1,7 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.kohsuke.stapler", "HttpResponses", True, "redirectTo", "(String)", "", "Argument[0]", "url-redirect", "ai-generated"]
- ["org.kohsuke.stapler", "HttpResponses", True, "staticResource", "(URL)", "", "Argument[0]", "open-url", "ai-generated"]

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.openjdk.jmh.runner.options", "ChainedOptionsBuilder", True, "result", "(String)", "", "Argument[0]", "create-file", "ai-generated"]

View File

@@ -537,17 +537,13 @@ final class ClassInterfaceNode extends ElementNode {
or
childIndex >= 0 and
result.(ElementNode).getElement() =
rank[childIndex](Element e, string file, int line, int column, string childStr, int argCount |
rank[childIndex](Element e, string file, int line, int column, string childStr, string sig |
e = this.getADeclaration() and
locationSortKeys(e, file, line, column) and
childStr = e.toString() and
(
if e instanceof Callable
then argCount = e.(Callable).getNumberOfParameters()
else argCount = 0
)
(if e instanceof Callable then sig = e.(Callable).getStringSignature() else sig = "")
|
e order by file, line, column, childStr, argCount
e order by file, line, column, childStr, sig
)
}
}

View File

@@ -13,29 +13,6 @@ test.kt:
# 45| 0: [TypeAccess] Test
# 45| 1: [Parameter] a
# 45| 0: [TypeAccess] int
# 45| 2: [Parameter] c
# 45| 0: [TypeAccess] double
# 45| 3: [Parameter] e
# 45| 0: [TypeAccess] boolean
# 45| 5: [BlockStmt] { ... }
# 45| 0: [ReturnStmt] return ...
# 45| 0: [MethodAccess] testExtensionFunction$default(...)
# 45| -1: [TypeAccess] TestKt
# 0| 0: [ExtensionReceiverAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 45| 3: [ExtensionMethod] testExtensionFunction
# 45| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 45| 0: [Parameter] <this>
# 45| 0: [TypeAccess] Test
# 45| 1: [Parameter] a
# 45| 0: [TypeAccess] int
# 45| 2: [Parameter] b
# 45| 0: [TypeAccess] String
# 45| 3: [Parameter] c
@@ -54,7 +31,7 @@ test.kt:
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 23
# 1| 7: [NullLiteral] null
# 45| 4: [ExtensionMethod] testExtensionFunction
# 45| 3: [ExtensionMethod] testExtensionFunction
#-----| 1: (Annotations)
# 44| 1: [Annotation] JvmOverloads
# 45| 3: [TypeAccess] int
@@ -74,6 +51,29 @@ test.kt:
# 45| 5: [BlockStmt] { ... }
# 45| 0: [ReturnStmt] return ...
# 45| 0: [VarAccess] a
# 45| 4: [ExtensionMethod] testExtensionFunction
# 45| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 45| 0: [Parameter] <this>
# 45| 0: [TypeAccess] Test
# 45| 1: [Parameter] a
# 45| 0: [TypeAccess] int
# 45| 2: [Parameter] c
# 45| 0: [TypeAccess] double
# 45| 3: [Parameter] e
# 45| 0: [TypeAccess] boolean
# 45| 5: [BlockStmt] { ... }
# 45| 0: [ReturnStmt] return ...
# 45| 0: [MethodAccess] testExtensionFunction$default(...)
# 45| -1: [TypeAccess] TestKt
# 0| 0: [ExtensionReceiverAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 45| 5: [ExtensionMethod] testExtensionFunction$default
# 45| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -134,26 +134,6 @@ test.kt:
#-----| 4: (Parameters)
# 6| 0: [Parameter] a
# 6| 0: [TypeAccess] int
# 6| 1: [Parameter] c
# 6| 0: [TypeAccess] double
# 6| 2: [Parameter] e
# 6| 0: [TypeAccess] boolean
# 6| 5: [BlockStmt] { ... }
# 6| 0: [ReturnStmt] return ...
# 6| 0: [MethodAccess] testStaticFunction$default(...)
# 6| -1: [TypeAccess] Test
# 0| 0: [VarAccess] a
# 1| 1: [NullLiteral] null
# 0| 2: [VarAccess] c
# 1| 3: [FloatLiteral] 0.0
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 21
# 1| 6: [NullLiteral] null
# 6| 3: [Method] testStaticFunction
# 6| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 6| 0: [Parameter] a
# 6| 0: [TypeAccess] int
# 6| 1: [Parameter] b
# 6| 0: [TypeAccess] String
# 6| 2: [Parameter] c
@@ -171,7 +151,7 @@ test.kt:
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 23
# 1| 6: [NullLiteral] null
# 6| 4: [Method] testStaticFunction
# 6| 3: [Method] testStaticFunction
#-----| 1: (Annotations)
# 5| 1: [Annotation] JvmOverloads
# 5| 2: [Annotation] JvmStatic
@@ -190,6 +170,26 @@ test.kt:
# 6| 5: [BlockStmt] { ... }
# 6| 0: [ReturnStmt] return ...
# 6| 0: [VarAccess] a
# 6| 4: [Method] testStaticFunction
# 6| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 6| 0: [Parameter] a
# 6| 0: [TypeAccess] int
# 6| 1: [Parameter] c
# 6| 0: [TypeAccess] double
# 6| 2: [Parameter] e
# 6| 0: [TypeAccess] boolean
# 6| 5: [BlockStmt] { ... }
# 6| 0: [ReturnStmt] return ...
# 6| 0: [MethodAccess] testStaticFunction$default(...)
# 6| -1: [TypeAccess] Test
# 0| 0: [VarAccess] a
# 1| 1: [NullLiteral] null
# 0| 2: [VarAccess] c
# 1| 3: [FloatLiteral] 0.0
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 21
# 1| 6: [NullLiteral] null
# 6| 5: [Method] testStaticFunction$default
# 6| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -242,27 +242,6 @@ test.kt:
#-----| 4: (Parameters)
# 9| 0: [Parameter] a
# 9| 0: [TypeAccess] int
# 9| 1: [Parameter] c
# 9| 0: [TypeAccess] double
# 9| 2: [Parameter] e
# 9| 0: [TypeAccess] boolean
# 9| 5: [BlockStmt] { ... }
# 9| 0: [ReturnStmt] return ...
# 9| 0: [MethodAccess] testMemberFunction$default(...)
# 9| -1: [TypeAccess] Test
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 9| 7: [Method] testMemberFunction
# 9| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 9| 0: [Parameter] a
# 9| 0: [TypeAccess] int
# 9| 1: [Parameter] b
# 9| 0: [TypeAccess] String
# 9| 2: [Parameter] c
@@ -281,7 +260,7 @@ test.kt:
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 23
# 1| 7: [NullLiteral] null
# 9| 8: [Method] testMemberFunction
# 9| 7: [Method] testMemberFunction
#-----| 1: (Annotations)
# 8| 1: [Annotation] JvmOverloads
# 9| 3: [TypeAccess] int
@@ -299,6 +278,27 @@ test.kt:
# 9| 5: [BlockStmt] { ... }
# 9| 0: [ReturnStmt] return ...
# 9| 0: [VarAccess] a
# 9| 8: [Method] testMemberFunction
# 9| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 9| 0: [Parameter] a
# 9| 0: [TypeAccess] int
# 9| 1: [Parameter] c
# 9| 0: [TypeAccess] double
# 9| 2: [Parameter] e
# 9| 0: [TypeAccess] boolean
# 9| 5: [BlockStmt] { ... }
# 9| 0: [ReturnStmt] return ...
# 9| 0: [MethodAccess] testMemberFunction$default(...)
# 9| -1: [TypeAccess] Test
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 9| 9: [Method] testMemberFunction$default
# 9| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -355,31 +355,6 @@ test.kt:
# 12| 0: [TypeAccess] Test2
# 12| 1: [Parameter] a
# 12| 0: [TypeAccess] int
# 12| 2: [Parameter] c
# 12| 0: [TypeAccess] double
# 12| 3: [Parameter] e
# 12| 0: [TypeAccess] boolean
# 12| 5: [BlockStmt] { ... }
# 12| 0: [ReturnStmt] return ...
# 12| 0: [MethodAccess] testMemberExtensionFunction$default(...)
# 12| -1: [TypeAccess] Test
# 0| 0: [ThisAccess] Test.this
# 0| 0: [TypeAccess] Test
# 0| 1: [ExtensionReceiverAccess] this
# 0| 2: [VarAccess] a
# 1| 3: [NullLiteral] null
# 0| 4: [VarAccess] c
# 1| 5: [FloatLiteral] 0.0
# 0| 6: [VarAccess] e
# 1| 7: [IntegerLiteral] 21
# 1| 8: [NullLiteral] null
# 12| 11: [ExtensionMethod] testMemberExtensionFunction
# 12| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 12| 0: [Parameter] <this>
# 12| 0: [TypeAccess] Test2
# 12| 1: [Parameter] a
# 12| 0: [TypeAccess] int
# 12| 2: [Parameter] b
# 12| 0: [TypeAccess] String
# 12| 3: [Parameter] c
@@ -400,7 +375,7 @@ test.kt:
# 0| 6: [VarAccess] e
# 1| 7: [IntegerLiteral] 23
# 1| 8: [NullLiteral] null
# 12| 12: [ExtensionMethod] testMemberExtensionFunction
# 12| 11: [ExtensionMethod] testMemberExtensionFunction
#-----| 1: (Annotations)
# 11| 1: [Annotation] JvmOverloads
# 12| 3: [TypeAccess] int
@@ -420,6 +395,31 @@ test.kt:
# 12| 5: [BlockStmt] { ... }
# 12| 0: [ReturnStmt] return ...
# 12| 0: [VarAccess] a
# 12| 12: [ExtensionMethod] testMemberExtensionFunction
# 12| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 12| 0: [Parameter] <this>
# 12| 0: [TypeAccess] Test2
# 12| 1: [Parameter] a
# 12| 0: [TypeAccess] int
# 12| 2: [Parameter] c
# 12| 0: [TypeAccess] double
# 12| 3: [Parameter] e
# 12| 0: [TypeAccess] boolean
# 12| 5: [BlockStmt] { ... }
# 12| 0: [ReturnStmt] return ...
# 12| 0: [MethodAccess] testMemberExtensionFunction$default(...)
# 12| -1: [TypeAccess] Test
# 0| 0: [ThisAccess] Test.this
# 0| 0: [TypeAccess] Test
# 0| 1: [ExtensionReceiverAccess] this
# 0| 2: [VarAccess] a
# 1| 3: [NullLiteral] null
# 0| 4: [VarAccess] c
# 1| 5: [FloatLiteral] 0.0
# 0| 6: [VarAccess] e
# 1| 7: [IntegerLiteral] 21
# 1| 8: [NullLiteral] null
# 12| 13: [ExtensionMethod] testMemberExtensionFunction$default
# 12| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -477,23 +477,6 @@ test.kt:
#-----| 4: (Parameters)
# 16| 0: [Parameter] a
# 16| 0: [TypeAccess] int
# 16| 1: [Parameter] c
# 16| 0: [TypeAccess] double
# 16| 2: [Parameter] e
# 16| 0: [TypeAccess] boolean
# 16| 5: [BlockStmt] { ... }
# 16| 0: [ThisConstructorInvocationStmt] this(...)
# 0| 0: [VarAccess] a
# 1| 1: [NullLiteral] null
# 0| 2: [VarAccess] c
# 1| 3: [FloatLiteral] 0.0
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 21
# 1| 6: [NullLiteral] null
# 16| 2: [Constructor] Test2
#-----| 4: (Parameters)
# 16| 0: [Parameter] a
# 16| 0: [TypeAccess] int
# 16| 1: [Parameter] b
# 16| 0: [TypeAccess] String
# 16| 2: [Parameter] c
@@ -509,7 +492,7 @@ test.kt:
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 23
# 1| 6: [NullLiteral] null
# 16| 3: [Constructor] Test2
# 16| 2: [Constructor] Test2
#-----| 1: (Annotations)
# 16| 1: [Annotation] JvmOverloads
#-----| 4: (Parameters)
@@ -526,7 +509,7 @@ test.kt:
# 16| 5: [BlockStmt] { ... }
# 16| 0: [SuperConstructorInvocationStmt] super(...)
# 16| 1: [BlockStmt] { ... }
# 16| 4: [Constructor] Test2
# 16| 3: [Constructor] Test2
#-----| 4: (Parameters)
# 16| 0: [Parameter] p0
# 16| 0: [TypeAccess] int
@@ -570,6 +553,23 @@ test.kt:
# 16| 2: [VarAccess] p2
# 16| 3: [VarAccess] p3
# 16| 4: [VarAccess] p4
# 16| 4: [Constructor] Test2
#-----| 4: (Parameters)
# 16| 0: [Parameter] a
# 16| 0: [TypeAccess] int
# 16| 1: [Parameter] c
# 16| 0: [TypeAccess] double
# 16| 2: [Parameter] e
# 16| 0: [TypeAccess] boolean
# 16| 5: [BlockStmt] { ... }
# 16| 0: [ThisConstructorInvocationStmt] this(...)
# 0| 0: [VarAccess] a
# 1| 1: [NullLiteral] null
# 0| 2: [VarAccess] c
# 1| 3: [FloatLiteral] 0.0
# 0| 4: [VarAccess] e
# 1| 5: [IntegerLiteral] 21
# 1| 6: [NullLiteral] null
# 18| 5: [Class] Companion
# 18| 1: [Constructor] Companion
# 18| 5: [BlockStmt] { ... }
@@ -580,27 +580,6 @@ test.kt:
#-----| 4: (Parameters)
# 21| 0: [Parameter] a
# 21| 0: [TypeAccess] int
# 21| 1: [Parameter] c
# 21| 0: [TypeAccess] double
# 21| 2: [Parameter] e
# 21| 0: [TypeAccess] boolean
# 21| 5: [BlockStmt] { ... }
# 21| 0: [ReturnStmt] return ...
# 21| 0: [MethodAccess] testCompanionFunction$default(...)
# 21| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 21| 3: [Method] testCompanionFunction
# 21| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 21| 0: [Parameter] a
# 21| 0: [TypeAccess] int
# 21| 1: [Parameter] b
# 21| 0: [TypeAccess] String
# 21| 2: [Parameter] c
@@ -619,7 +598,7 @@ test.kt:
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 23
# 1| 7: [NullLiteral] null
# 21| 4: [Method] testCompanionFunction
# 21| 3: [Method] testCompanionFunction
#-----| 1: (Annotations)
# 20| 1: [Annotation] JvmOverloads
# 21| 3: [TypeAccess] int
@@ -637,6 +616,27 @@ test.kt:
# 21| 5: [BlockStmt] { ... }
# 21| 0: [ReturnStmt] return ...
# 21| 0: [VarAccess] a
# 21| 4: [Method] testCompanionFunction
# 21| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 21| 0: [Parameter] a
# 21| 0: [TypeAccess] int
# 21| 1: [Parameter] c
# 21| 0: [TypeAccess] double
# 21| 2: [Parameter] e
# 21| 0: [TypeAccess] boolean
# 21| 5: [BlockStmt] { ... }
# 21| 0: [ReturnStmt] return ...
# 21| 0: [MethodAccess] testCompanionFunction$default(...)
# 21| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 21| 5: [Method] testCompanionFunction$default
# 21| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -691,27 +691,6 @@ test.kt:
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] c
# 24| 0: [TypeAccess] double
# 24| 2: [Parameter] e
# 24| 0: [TypeAccess] boolean
# 24| 5: [BlockStmt] { ... }
# 24| 0: [ReturnStmt] return ...
# 24| 0: [MethodAccess] testStaticCompanionFunction$default(...)
# 24| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 24| 7: [Method] testStaticCompanionFunction
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] b
# 24| 0: [TypeAccess] String
# 24| 2: [Parameter] c
@@ -730,7 +709,7 @@ test.kt:
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 23
# 1| 7: [NullLiteral] null
# 24| 8: [Method] testStaticCompanionFunction
# 24| 7: [Method] testStaticCompanionFunction
#-----| 1: (Annotations)
# 23| 1: [Annotation] JvmOverloads
# 23| 2: [Annotation] JvmStatic
@@ -749,6 +728,27 @@ test.kt:
# 24| 5: [BlockStmt] { ... }
# 24| 0: [ReturnStmt] return ...
# 24| 0: [VarAccess] a
# 24| 8: [Method] testStaticCompanionFunction
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] c
# 24| 0: [TypeAccess] double
# 24| 2: [Parameter] e
# 24| 0: [TypeAccess] boolean
# 24| 5: [BlockStmt] { ... }
# 24| 0: [ReturnStmt] return ...
# 24| 0: [MethodAccess] testStaticCompanionFunction$default(...)
# 24| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 24| 9: [Method] testStaticCompanionFunction$default
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -803,27 +803,6 @@ test.kt:
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] c
# 24| 0: [TypeAccess] double
# 24| 2: [Parameter] e
# 24| 0: [TypeAccess] boolean
# 24| 5: [BlockStmt] { ... }
# 24| 0: [ReturnStmt] return ...
# 24| 0: [MethodAccess] testStaticCompanionFunction$default(...)
# 24| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 24| 7: [Method] testStaticCompanionFunction
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] b
# 24| 0: [TypeAccess] String
# 24| 2: [Parameter] c
@@ -842,7 +821,7 @@ test.kt:
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 23
# 1| 7: [NullLiteral] null
# 24| 8: [Method] testStaticCompanionFunction
# 24| 7: [Method] testStaticCompanionFunction
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
@@ -865,6 +844,27 @@ test.kt:
# 24| 2: [VarAccess] c
# 24| 3: [VarAccess] d
# 24| 4: [VarAccess] e
# 24| 8: [Method] testStaticCompanionFunction
# 24| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 24| 0: [Parameter] a
# 24| 0: [TypeAccess] int
# 24| 1: [Parameter] c
# 24| 0: [TypeAccess] double
# 24| 2: [Parameter] e
# 24| 0: [TypeAccess] boolean
# 24| 5: [BlockStmt] { ... }
# 24| 0: [ReturnStmt] return ...
# 24| 0: [MethodAccess] testStaticCompanionFunction$default(...)
# 24| -1: [TypeAccess] Companion
# 0| 0: [ThisAccess] this
# 0| 1: [VarAccess] a
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] c
# 1| 4: [FloatLiteral] 0.0
# 0| 5: [VarAccess] e
# 1| 6: [IntegerLiteral] 21
# 1| 7: [NullLiteral] null
# 30| 4: [Class,GenericType,ParameterizedType] GenericTest
#-----| -2: (Generic Parameters)
# 30| 0: [TypeVariable] T
@@ -884,37 +884,6 @@ test.kt:
# 1| 5: [NullLiteral] null
# 30| 2: [Constructor] GenericTest
#-----| 4: (Parameters)
# 30| 0: [Parameter] a
# 30| 0: [TypeAccess] int
# 30| 1: [Parameter] b
# 30| 0: [TypeAccess] T
# 30| 2: [Parameter] d
# 30| 0: [TypeAccess] T
# 30| 5: [BlockStmt] { ... }
# 30| 0: [ThisConstructorInvocationStmt] this(...)
# 0| 0: [VarAccess] a
# 0| 1: [VarAccess] b
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] d
# 1| 4: [IntegerLiteral] 11
# 1| 5: [NullLiteral] null
# 30| 3: [Constructor] GenericTest
#-----| 1: (Annotations)
# 30| 1: [Annotation] JvmOverloads
#-----| 4: (Parameters)
# 30| 0: [Parameter] a
# 30| 0: [TypeAccess] int
# 30| 1: [Parameter] b
# 30| 0: [TypeAccess] T
# 30| 2: [Parameter] c
# 30| 0: [TypeAccess] String
# 30| 3: [Parameter] d
# 30| 0: [TypeAccess] T
# 30| 5: [BlockStmt] { ... }
# 30| 0: [SuperConstructorInvocationStmt] super(...)
# 30| 1: [BlockStmt] { ... }
# 30| 4: [Constructor] GenericTest
#-----| 4: (Parameters)
# 30| 0: [Parameter] p0
# 30| 0: [TypeAccess] int
# 30| 1: [Parameter] p1
@@ -953,6 +922,37 @@ test.kt:
# 30| 1: [VarAccess] p1
# 30| 2: [VarAccess] p2
# 30| 3: [VarAccess] p3
# 30| 3: [Constructor] GenericTest
#-----| 1: (Annotations)
# 30| 1: [Annotation] JvmOverloads
#-----| 4: (Parameters)
# 30| 0: [Parameter] a
# 30| 0: [TypeAccess] int
# 30| 1: [Parameter] b
# 30| 0: [TypeAccess] T
# 30| 2: [Parameter] c
# 30| 0: [TypeAccess] String
# 30| 3: [Parameter] d
# 30| 0: [TypeAccess] T
# 30| 5: [BlockStmt] { ... }
# 30| 0: [SuperConstructorInvocationStmt] super(...)
# 30| 1: [BlockStmt] { ... }
# 30| 4: [Constructor] GenericTest
#-----| 4: (Parameters)
# 30| 0: [Parameter] a
# 30| 0: [TypeAccess] int
# 30| 1: [Parameter] b
# 30| 0: [TypeAccess] T
# 30| 2: [Parameter] d
# 30| 0: [TypeAccess] T
# 30| 5: [BlockStmt] { ... }
# 30| 0: [ThisConstructorInvocationStmt] this(...)
# 0| 0: [VarAccess] a
# 0| 1: [VarAccess] b
# 1| 2: [NullLiteral] null
# 0| 3: [VarAccess] d
# 1| 4: [IntegerLiteral] 11
# 1| 5: [NullLiteral] null
# 33| 5: [Method] testMemberFunction
# 33| 3: [TypeAccess] int
#-----| 4: (Parameters)
@@ -972,6 +972,22 @@ test.kt:
# 1| 5: [IntegerLiteral] 10
# 1| 6: [NullLiteral] null
# 33| 6: [Method] testMemberFunction
#-----| 1: (Annotations)
# 32| 1: [Annotation] JvmOverloads
# 33| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 33| 0: [Parameter] a
# 33| 0: [TypeAccess] int
# 33| 1: [Parameter] b
# 33| 0: [TypeAccess] T
# 33| 2: [Parameter] c
# 33| 0: [TypeAccess] String
# 33| 3: [Parameter] d
# 33| 0: [TypeAccess] T
# 33| 5: [BlockStmt] { ... }
# 33| 0: [ReturnStmt] return ...
# 33| 0: [VarAccess] a
# 33| 7: [Method] testMemberFunction
# 33| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 33| 0: [Parameter] a
@@ -991,22 +1007,6 @@ test.kt:
# 0| 4: [VarAccess] d
# 1| 5: [IntegerLiteral] 11
# 1| 6: [NullLiteral] null
# 33| 7: [Method] testMemberFunction
#-----| 1: (Annotations)
# 32| 1: [Annotation] JvmOverloads
# 33| 3: [TypeAccess] int
#-----| 4: (Parameters)
# 33| 0: [Parameter] a
# 33| 0: [TypeAccess] int
# 33| 1: [Parameter] b
# 33| 0: [TypeAccess] T
# 33| 2: [Parameter] c
# 33| 0: [TypeAccess] String
# 33| 3: [Parameter] d
# 33| 0: [TypeAccess] T
# 33| 5: [BlockStmt] { ... }
# 33| 0: [ReturnStmt] return ...
# 33| 0: [VarAccess] a
# 33| 8: [Method] testMemberFunction$default
# 33| 3: [TypeAccess] int
#-----| 4: (Parameters)

View File

@@ -0,0 +1,26 @@
package generatedtest;
import org.apache.tools.zip.ZipEntry;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "org.apache.tools.zip;ZipEntry;true;ZipEntry;(String);;Argument[0];Argument[-1];taint;ai-generated"
ZipEntry out = null;
String in = (String) source();
out = new ZipEntry(in);
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-ant-1.10.13

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -26,6 +26,20 @@ public class Test {
out = new TarArchiveEntry(in, false);
sink(out); // $ hasTaintFlow
}
{
// "org.apache.commons.compress.archivers.tar;TarArchiveEntry;true;TarArchiveEntry;(String,byte);;Argument[0];Argument[-1];taint;ai-generated"
TarArchiveEntry out = null;
String in = (String) source();
out = new TarArchiveEntry(in, (byte) 0);
sink(out); // $ hasTaintFlow
}
{
// "org.apache.commons.compress.archivers.tar;TarArchiveEntry;true;setLinkName;(String);;Argument[0];Argument[-1];taint;ai-generated"
TarArchiveEntry out = null;
String in = (String) source();
out.setLinkName(in);
sink(out); // $ hasTaintFlow
}
}

View File

@@ -0,0 +1,28 @@
package generatedtest;
import hudson.remoting.URLDeserializationHelper;
import java.net.URL;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() {
return null;
}
void sink(Object o) {
}
public void test() throws Exception {
{
// "hudson.remoting;URLDeserializationHelper;true;wrapIfRequired;(URL);;Argument[0];ReturnValue;taint;ai-generated"
URL out = null;
URL in = (URL) source();
out = URLDeserializationHelper.wrapIfRequired(in);
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/jenkins

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -0,0 +1,792 @@
package generatedtest;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FilterInputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.net.URI;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.file.Path;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object getThrowable_messageDefault(Object container) {
return null;
}
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "java.io;BufferedInputStream;false;BufferedInputStream;;;Argument[0];Argument[-1];taint;manual"
BufferedInputStream out = null;
InputStream in = (InputStream) source();
out = new BufferedInputStream(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;BufferedInputStream;false;BufferedInputStream;;;Argument[0];Argument[-1];taint;manual"
BufferedInputStream out = null;
InputStream in = (InputStream) source();
out = new BufferedInputStream(in, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;BufferedReader;false;BufferedReader;;;Argument[0];Argument[-1];taint;manual"
BufferedReader out = null;
Reader in = (Reader) source();
out = new BufferedReader(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;BufferedReader;false;BufferedReader;;;Argument[0];Argument[-1];taint;manual"
BufferedReader out = null;
Reader in = (Reader) source();
out = new BufferedReader(in, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;BufferedReader;true;readLine;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
BufferedReader in = (BufferedReader) source();
out = in.readLine();
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayInputStream;false;ByteArrayInputStream;;;Argument[0];Argument[-1];taint;manual"
ByteArrayInputStream out = null;
byte[] in = (byte[]) source();
out = new ByteArrayInputStream(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayInputStream;false;ByteArrayInputStream;;;Argument[0];Argument[-1];taint;manual"
ByteArrayInputStream out = null;
byte[] in = (byte[]) source();
out = new ByteArrayInputStream(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;toByteArray;;;Argument[-1];ReturnValue;taint;manual"
byte[] out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
out = in.toByteArray();
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
out = in.toString((Charset) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
out = in.toString((String) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
out = in.toString();
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
out = in.toString(0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ByteArrayOutputStream;false;writeTo;;;Argument[-1];Argument[0];taint;manual"
OutputStream out = null;
ByteArrayOutputStream in = (ByteArrayOutputStream) source();
in.writeTo(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;CharArrayReader;false;CharArrayReader;;;Argument[0];Argument[-1];taint;manual"
CharArrayReader out = null;
char[] in = (char[]) source();
out = new CharArrayReader(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;CharArrayReader;false;CharArrayReader;;;Argument[0];Argument[-1];taint;manual"
CharArrayReader out = null;
char[] in = (char[]) source();
out = new CharArrayReader(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;CharArrayWriter;true;toCharArray;;;Argument[-1];ReturnValue;taint;manual"
char[] out = null;
CharArrayWriter in = (CharArrayWriter) source();
out = in.toCharArray();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInput in = (DataInput) source();
in.readFully(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInput in = (DataInput) source();
in.readFully(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInputStream in = (DataInputStream) source();
in.readFully(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInputStream in = (DataInputStream) source();
in.readFully(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInputStream in = (ObjectInputStream) source();
in.readFully(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readFully;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInputStream in = (ObjectInputStream) source();
in.readFully(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readLine;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
DataInput in = (DataInput) source();
out = in.readLine();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readLine;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
DataInputStream in = (DataInputStream) source();
out = in.readLine();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readLine;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
ObjectInputStream in = (ObjectInputStream) source();
out = in.readLine();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readUTF;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
DataInput in = (DataInput) source();
out = in.readUTF();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readUTF;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
DataInputStream in = (DataInputStream) source();
out = in.readUTF();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInput;true;readUTF;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
ObjectInputStream in = (ObjectInputStream) source();
out = in.readUTF();
sink(out); // $ hasTaintFlow
}
{
// "java.io;DataInputStream;false;DataInputStream;;;Argument[0];Argument[-1];taint;manual"
DataInputStream out = null;
InputStream in = (InputStream) source();
out = new DataInputStream(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[0];Argument[-1];taint;manual"
File out = null;
File in = (File) source();
out = new File(in, (String) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[0];Argument[-1];taint;manual"
File out = null;
String in = (String) source();
out = new File(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[0];Argument[-1];taint;manual"
File out = null;
String in = (String) source();
out = new File(in, (String) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[0];Argument[-1];taint;manual"
File out = null;
URI in = (URI) source();
out = new File(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[1];Argument[-1];taint;manual"
File out = null;
String in = (String) source();
out = new File((File) null, in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;false;File;;;Argument[1];Argument[-1];taint;manual"
File out = null;
String in = (String) source();
out = new File((String) null, in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;getAbsoluteFile;;;Argument[-1];ReturnValue;taint;manual"
File out = null;
File in = (File) source();
out = in.getAbsoluteFile();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;getAbsolutePath;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
File in = (File) source();
out = in.getAbsolutePath();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;getCanonicalFile;;;Argument[-1];ReturnValue;taint;manual"
File out = null;
File in = (File) source();
out = in.getCanonicalFile();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;getCanonicalPath;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
File in = (File) source();
out = in.getCanonicalPath();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;getName;();;Argument[-1];ReturnValue;taint;manual"
String out = null;
File in = (File) source();
out = in.getName();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;toPath;;;Argument[-1];ReturnValue;taint;manual"
Path out = null;
File in = (File) source();
out = in.toPath();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
File in = (File) source();
out = in.toString();
sink(out); // $ hasTaintFlow
}
{
// "java.io;File;true;toURI;;;Argument[-1];ReturnValue;taint;manual"
URI out = null;
File in = (File) source();
out = in.toURI();
sink(out); // $ hasTaintFlow
}
{
// "java.io;FilterOutputStream;true;FilterOutputStream;(OutputStream);;Argument[0];Argument[-1];taint;manual"
FilterOutputStream out = null;
OutputStream in = (OutputStream) source();
out = new FilterOutputStream(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;IOException;false;IOException;(String);;Argument[0];Argument[-1].SyntheticField[java.lang.Throwable.message];value;manual"
IOException out = null;
String in = (String) source();
out = new IOException(in);
sink(getThrowable_messageDefault(out)); // $ hasValueFlow
}
{
// "java.io;InputStream;true;read;(byte[]);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInputStream in = (DataInputStream) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[]);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
FilterInputStream in = (FilterInputStream) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[]);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
InputStream in = (InputStream) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
BufferedInputStream in = (BufferedInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ByteArrayInputStream in = (ByteArrayInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
DataInputStream in = (DataInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
FilterInputStream in = (FilterInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
InputStream in = (InputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;read;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInputStream in = (ObjectInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;readAllBytes;;;Argument[-1];ReturnValue;taint;manual"
byte[] out = null;
ByteArrayInputStream in = (ByteArrayInputStream) source();
out = in.readAllBytes();
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;readAllBytes;;;Argument[-1];ReturnValue;taint;manual"
byte[] out = null;
InputStream in = (InputStream) source();
out = in.readAllBytes();
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;readNBytes;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ByteArrayInputStream in = (ByteArrayInputStream) source();
in.readNBytes(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;readNBytes;(byte[],int,int);;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
InputStream in = (InputStream) source();
in.readNBytes(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;readNBytes;(int);;Argument[-1];ReturnValue;taint;manual"
byte[] out = null;
InputStream in = (InputStream) source();
out = in.readNBytes(0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;transferTo;(OutputStream);;Argument[-1];Argument[0];taint;manual"
OutputStream out = null;
ByteArrayInputStream in = (ByteArrayInputStream) source();
in.transferTo(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStream;true;transferTo;(OutputStream);;Argument[-1];Argument[0];taint;manual"
OutputStream out = null;
InputStream in = (InputStream) source();
in.transferTo(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint;manual"
InputStreamReader out = null;
InputStream in = (InputStream) source();
out = new InputStreamReader(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint;manual"
InputStreamReader out = null;
InputStream in = (InputStream) source();
out = new InputStreamReader(in, (Charset) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint;manual"
InputStreamReader out = null;
InputStream in = (InputStream) source();
out = new InputStreamReader(in, (CharsetDecoder) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;InputStreamReader;false;InputStreamReader;;;Argument[0];Argument[-1];taint;manual"
InputStreamReader out = null;
InputStream in = (InputStream) source();
out = new InputStreamReader(in, (String) null);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ObjectInput;true;read;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInput in = (ObjectInput) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ObjectInput;true;read;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInput in = (ObjectInput) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ObjectInput;true;read;;;Argument[-1];Argument[0];taint;manual"
byte[] out = null;
ObjectInputStream in = (ObjectInputStream) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;ObjectInputStream;false;ObjectInputStream;;;Argument[0];Argument[-1];taint;manual"
ObjectInputStream out = null;
InputStream in = (InputStream) source();
out = new ObjectInputStream(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[]);;Argument[0];Argument[-1];taint;manual"
FilterOutputStream out = null;
byte[] in = (byte[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[]);;Argument[0];Argument[-1];taint;manual"
ObjectOutputStream out = null;
byte[] in = (byte[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[]);;Argument[0];Argument[-1];taint;manual"
OutputStream out = null;
byte[] in = (byte[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[]);;Argument[0];Argument[-1];taint;manual"
PrintStream out = null;
byte[] in = (byte[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint;manual"
ByteArrayOutputStream out = null;
byte[] in = (byte[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint;manual"
FilterOutputStream out = null;
byte[] in = (byte[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint;manual"
ObjectOutputStream out = null;
byte[] in = (byte[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint;manual"
OutputStream out = null;
byte[] in = (byte[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint;manual"
PrintStream out = null;
byte[] in = (byte[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint;manual"
ByteArrayOutputStream out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint;manual"
FilterOutputStream out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint;manual"
ObjectOutputStream out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint;manual"
OutputStream out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;OutputStream;true;write;(int);;Argument[0];Argument[-1];taint;manual"
PrintStream out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
CharBuffer out = null;
CharArrayReader in = (CharArrayReader) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
CharBuffer out = null;
InputStreamReader in = (InputStreamReader) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
CharBuffer out = null;
Reader in = (Reader) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
BufferedReader in = (BufferedReader) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
CharArrayReader in = (CharArrayReader) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
InputStreamReader in = (InputStreamReader) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
Reader in = (Reader) source();
in.read(out);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
Reader in = (Reader) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Reader;true;read;;;Argument[-1];Argument[0];taint;manual"
char[] out = null;
StringReader in = (StringReader) source();
in.read(out, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;StringReader;false;StringReader;;;Argument[0];Argument[-1];taint;manual"
StringReader out = null;
String in = (String) source();
out = new StringReader(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
CharArrayWriter out = null;
String in = (String) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
CharArrayWriter out = null;
char[] in = (char[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
CharArrayWriter out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
PrintWriter out = null;
String in = (String) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
PrintWriter out = null;
String in = (String) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
PrintWriter out = null;
char[] in = (char[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
PrintWriter out = null;
char[] in = (char[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
PrintWriter out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
Writer out = null;
String in = (String) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
Writer out = null;
String in = (String) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
Writer out = null;
char[] in = (char[]) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
Writer out = null;
char[] in = (char[]) source();
out.write(in, 0, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.io;Writer;true;write;;;Argument[0];Argument[-1];taint;manual"
Writer out = null;
int in = (int) source();
out.write(in);
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1,6 @@
extensions:
- addsTo:
pack: codeql/java-tests
extensible: summaryModel
data:
- ["generatedtest", "Test", False, "getThrowable_messageDefault", "(Object)", "", "Argument[0].SyntheticField[java.lang.Throwable.message]", "ReturnValue", "value", "manual"]

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -1,5 +1,7 @@
package generatedtest;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URL;
import java.net.URLDecoder;
@@ -16,6 +18,27 @@ public class Test {
public void test() throws Exception {
{
// "java.net;InetAddress;true;getByName;(String);;Argument[0];ReturnValue;taint;ai-generated"
InetAddress out = null;
String in = (String) source();
out = InetAddress.getByName(in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;InetSocketAddress;true;InetSocketAddress;(String,int);;Argument[0];Argument[-1];taint;ai-generated"
InetSocketAddress out = null;
String in = (String) source();
out = new InetSocketAddress(in, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.net;InetSocketAddress;true;createUnresolved;(String,int);;Argument[0];ReturnValue;taint;ai-generated"
InetSocketAddress out = null;
String in = (String) source();
out = InetSocketAddress.createUnresolved(in, 0);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URI;false;URI;(String);;Argument[0];Argument[-1];taint;manual"
URI out = null;
@@ -30,6 +53,22 @@ public class Test {
out = URI.create(in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URI;false;resolve;(String);;Argument[0];ReturnValue;taint;ai-generated"
URI out = null;
String in = (String) source();
URI instance = null;
out = instance.resolve(in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URI;false;resolve;(URI);;Argument[0];ReturnValue;taint;ai-generated"
URI out = null;
URI in = (URI) source();
URI instance = null;
out = instance.resolve(in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URI;false;toASCIIString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
@@ -58,6 +97,20 @@ public class Test {
out = new URL(in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URL;false;URL;(URL,String);;Argument[0];Argument[-1];taint;ai-generated"
URL out = null;
URL in = (URL) source();
out = new URL(in, null);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URL;false;URL;(URL,String);;Argument[1];Argument[-1];taint;ai-generated"
URL out = null;
String in = (String) source();
out = new URL(null, in);
sink(out); // $ hasTaintFlow
}
{
// "java.net;URL;false;toExternalForm;;;Argument[-1];ReturnValue;taint;manual"
String out = null;

View File

@@ -0,0 +1,124 @@
package generatedtest;
import java.io.File;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.Path;
import java.nio.file.Paths;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "java.nio.file;FileSystem;true;getPath;;;Argument[0];ReturnValue;taint;manual"
Path out = null;
String in = (String) source();
FileSystem instance = null;
out = instance.getPath(in, (String[]) null);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;false;toFile;;;Argument[-1];ReturnValue;taint;manual"
File out = null;
Path in = (Path) source();
out = in.toFile();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;getParent;;;Argument[-1];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
out = in.getParent();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;normalize;;;Argument[-1];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
out = in.normalize();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
Path instance = null;
out = instance.resolve(in);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
out = in.resolve((Path) null);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
out = in.resolve((String) null);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint;manual"
Path out = null;
String in = (String) source();
Path instance = null;
out = instance.resolve(in);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;toAbsolutePath;;;Argument[-1];ReturnValue;taint;manual"
Path out = null;
Path in = (Path) source();
out = in.toAbsolutePath();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;toString;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
Path in = (Path) source();
out = in.toString();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Path;true;toUri;;;Argument[-1];ReturnValue;taint;manual"
URI out = null;
Path in = (Path) source();
out = in.toUri();
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Paths;true;get;;;Argument[0];ReturnValue;taint;manual"
Path out = null;
String in = (String) source();
out = Paths.get(in, (String[]) null);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Paths;true;get;;;Argument[0];ReturnValue;taint;manual"
Path out = null;
URI in = (URI) source();
out = Paths.get(in);
sink(out); // $ hasTaintFlow
}
{
// "java.nio.file;Paths;true;get;;;Argument[1].ArrayElement;ReturnValue;taint;manual"
Path out = null;
String[] in = (String[]) new String[] {(String) source()};
out = Paths.get((String) null, in);
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -0,0 +1,28 @@
package generatedtest;
import io.netty.resolver.SimpleNameResolver;
import io.netty.util.concurrent.Future;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "io.netty.resolver;SimpleNameResolver;false;resolve;(String);;Argument[0];ReturnValue;taint;ai-generated"
Future out = null;
String in = (String) source();
SimpleNameResolver instance = null;
out = instance.resolve(in);
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/netty-4.1.x

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -0,0 +1,26 @@
package generatedtest;
import org.kohsuke.stapler.framework.adjunct.AdjunctManager;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() {
return null;
}
void sink(Object o) {}
public void test() throws Exception {
{
// "org.kohsuke.stapler.framework.adjunct;AdjunctManager;true;AdjunctManager;(ServletContext,ClassLoader,String,long);;Argument[2];Argument[-1].Field[org.kohsuke.stapler.framework.adjunct.AdjunctManager.rootURL];taint;ai-generated"
AdjunctManager out = null;
String in = (String) source();
out = new AdjunctManager(null, null, in, 0L);
sink(out.rootURL); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/stapler-1.263:${testdir}/../../../stubs/javax-servlet-2.5:${testdir}/../../../stubs/apache-commons-jelly-1.0.1:${testdir}/../../../stubs/apache-commons-fileupload-1.4:${testdir}/../../../stubs/saxon-xqj-9.x:${testdir}/../../../stubs/apache-commons-beanutils:${testdir}/../../../stubs/dom4j-2.1.1:${testdir}/../../../stubs/apache-commons-lang:${testdir}/../../../stubs/jaxen-1.2.0

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -14,22 +14,108 @@ edges
| Test.java:95:14:95:34 | getHostName(...) : String | Test.java:99:12:99:33 | new URI(...) |
| Test.java:95:14:95:34 | getHostName(...) : String | Test.java:100:12:100:45 | new URI(...) |
| Test.java:95:14:95:34 | getHostName(...) : String | Test.java:101:12:101:54 | new URI(...) |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:17:61:17:72 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:19:41:19:52 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:25:38:25:49 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:27:36:27:47 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:29:31:29:42 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:31:33:31:44 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:33:50:33:61 | source(...) : String |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:35:54:35:65 | source(...) : String |
| mad/Test.java:17:61:17:72 | source(...) : String | mad/Test.java:17:52:17:72 | (...)... |
| mad/Test.java:19:41:19:52 | source(...) : String | mad/Test.java:19:32:19:52 | (...)... |
| mad/Test.java:25:38:25:49 | source(...) : String | mad/Test.java:25:31:25:49 | (...)... |
| mad/Test.java:27:36:27:47 | source(...) : String | mad/Test.java:27:29:27:47 | (...)... |
| mad/Test.java:29:31:29:42 | source(...) : String | mad/Test.java:29:24:29:42 | (...)... |
| mad/Test.java:31:33:31:44 | source(...) : String | mad/Test.java:31:24:31:44 | (...)... |
| mad/Test.java:33:50:33:61 | source(...) : String | mad/Test.java:33:41:33:61 | (...)... |
| mad/Test.java:35:54:35:65 | source(...) : String | mad/Test.java:35:45:35:65 | (...)... |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:33:61:33:68 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:35:41:35:48 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:37:56:37:63 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:39:46:39:53 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:41:38:41:45 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:43:36:43:43 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:45:31:45:38 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:47:33:47:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:49:27:49:34 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:50:27:50:34 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:51:34:51:41 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:53:40:53:47 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:54:48:54:55 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:55:47:55:54 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:57:40:57:47 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:59:38:59:45 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:61:33:61:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:63:33:63:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:65:41:65:48 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:67:42:67:49 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:69:37:69:44 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:71:29:71:36 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:73:37:73:44 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:75:28:75:35 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:77:33:77:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:79:40:79:47 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:81:40:81:47 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:82:40:82:47 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:84:38:84:45 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:86:28:86:35 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:87:28:87:35 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:88:28:88:35 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:90:34:90:41 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:91:34:91:41 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:93:33:93:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:95:42:95:49 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:97:50:97:57 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:99:54:99:61 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:104:37:104:44 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:106:74:106:81 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:108:68:108:75 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:110:68:110:75 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:112:30:112:37 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:117:30:117:37 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:122:33:122:40 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:124:27:124:34 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:126:28:126:35 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:128:29:128:36 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:133:27:133:34 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:135:26:135:33 | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:140:29:140:36 | source(...) : String |
| mad/Test.java:33:61:33:68 | source(...) : String | mad/Test.java:33:52:33:68 | (...)... |
| mad/Test.java:35:41:35:48 | source(...) : String | mad/Test.java:35:32:35:48 | (...)... |
| mad/Test.java:37:56:37:63 | source(...) : String | mad/Test.java:37:47:37:63 | (...)... |
| mad/Test.java:39:46:39:53 | source(...) : String | mad/Test.java:39:39:39:53 | (...)... |
| mad/Test.java:41:38:41:45 | source(...) : String | mad/Test.java:41:31:41:45 | (...)... |
| mad/Test.java:43:36:43:43 | source(...) : String | mad/Test.java:43:29:43:43 | (...)... |
| mad/Test.java:45:31:45:38 | source(...) : String | mad/Test.java:45:24:45:38 | (...)... |
| mad/Test.java:47:33:47:40 | source(...) : String | mad/Test.java:47:24:47:40 | (...)... |
| mad/Test.java:49:27:49:34 | source(...) : String | mad/Test.java:49:20:49:34 | (...)... |
| mad/Test.java:50:27:50:34 | source(...) : String | mad/Test.java:50:20:50:34 | (...)... |
| mad/Test.java:51:34:51:41 | source(...) : String | mad/Test.java:51:20:51:41 | (...)... |
| mad/Test.java:53:40:53:47 | source(...) : String | mad/Test.java:53:33:53:47 | (...)... |
| mad/Test.java:54:48:54:55 | source(...) : String | mad/Test.java:54:33:54:55 | (...)... |
| mad/Test.java:55:47:55:54 | source(...) : String | mad/Test.java:55:40:55:54 | (...)... |
| mad/Test.java:57:40:57:47 | source(...) : String | mad/Test.java:57:33:57:47 | (...)... |
| mad/Test.java:59:38:59:45 | source(...) : String | mad/Test.java:59:31:59:45 | (...)... |
| mad/Test.java:61:33:61:40 | source(...) : String | mad/Test.java:61:26:61:40 | (...)... |
| mad/Test.java:63:33:63:40 | source(...) : String | mad/Test.java:63:26:63:40 | (...)... |
| mad/Test.java:65:41:65:48 | source(...) : String | mad/Test.java:65:34:65:48 | (...)... |
| mad/Test.java:67:42:67:49 | source(...) : String | mad/Test.java:67:35:67:49 | (...)... |
| mad/Test.java:69:37:69:44 | source(...) : String | mad/Test.java:69:30:69:44 | (...)... |
| mad/Test.java:71:29:71:36 | source(...) : String | mad/Test.java:71:22:71:36 | (...)... |
| mad/Test.java:73:37:73:44 | source(...) : String | mad/Test.java:73:30:73:44 | (...)... |
| mad/Test.java:75:28:75:35 | source(...) : String | mad/Test.java:75:21:75:35 | (...)... |
| mad/Test.java:77:33:77:40 | source(...) : String | mad/Test.java:77:26:77:40 | (...)... |
| mad/Test.java:79:40:79:47 | source(...) : String | mad/Test.java:79:33:79:47 | (...)... |
| mad/Test.java:81:40:81:47 | source(...) : String | mad/Test.java:81:33:81:47 | (...)... |
| mad/Test.java:82:40:82:47 | source(...) : String | mad/Test.java:82:33:82:47 | (...)... |
| mad/Test.java:84:38:84:45 | source(...) : String | mad/Test.java:84:31:84:45 | (...)... |
| mad/Test.java:86:28:86:35 | source(...) : String | mad/Test.java:86:21:86:35 | (...)... |
| mad/Test.java:87:28:87:35 | source(...) : String | mad/Test.java:87:21:87:35 | (...)... |
| mad/Test.java:88:28:88:35 | source(...) : String | mad/Test.java:88:21:88:35 | (...)... |
| mad/Test.java:90:34:90:41 | source(...) : String | mad/Test.java:90:27:90:41 | (...)... |
| mad/Test.java:91:34:91:41 | source(...) : String | mad/Test.java:91:27:91:41 | (...)... |
| mad/Test.java:93:33:93:40 | source(...) : String | mad/Test.java:93:26:93:40 | (...)... |
| mad/Test.java:95:42:95:49 | source(...) : String | mad/Test.java:95:35:95:49 | (...)... |
| mad/Test.java:97:50:97:57 | source(...) : String | mad/Test.java:97:41:97:57 | (...)... |
| mad/Test.java:99:54:99:61 | source(...) : String | mad/Test.java:99:45:99:61 | (...)... |
| mad/Test.java:104:37:104:44 | source(...) : String | mad/Test.java:104:30:104:44 | (...)... |
| mad/Test.java:106:74:106:81 | source(...) : String | mad/Test.java:106:40:106:81 | (...)... |
| mad/Test.java:108:68:108:75 | source(...) : String | mad/Test.java:108:34:108:75 | (...)... |
| mad/Test.java:110:68:110:75 | source(...) : String | mad/Test.java:110:34:110:75 | (...)... |
| mad/Test.java:112:30:112:37 | source(...) : String | mad/Test.java:112:23:112:37 | (...)... |
| mad/Test.java:117:30:117:37 | source(...) : String | mad/Test.java:117:23:117:37 | (...)... |
| mad/Test.java:122:33:122:40 | source(...) : String | mad/Test.java:122:23:122:40 | (...)... |
| mad/Test.java:124:27:124:34 | source(...) : String | mad/Test.java:124:20:124:34 | (...)... |
| mad/Test.java:126:28:126:35 | source(...) : String | mad/Test.java:126:21:126:35 | (...)... |
| mad/Test.java:128:29:128:36 | source(...) : String | mad/Test.java:128:22:128:36 | (...)... |
| mad/Test.java:133:27:133:34 | source(...) : String | mad/Test.java:133:20:133:34 | (...)... |
| mad/Test.java:135:26:135:33 | source(...) : String | mad/Test.java:135:19:135:33 | (...)... |
| mad/Test.java:140:29:140:36 | source(...) : String | mad/Test.java:140:20:140:36 | (...)... |
nodes
| Test.java:19:18:19:38 | getHostName(...) : String | semmle.label | getHostName(...) : String |
| Test.java:24:20:24:23 | temp | semmle.label | temp |
@@ -50,23 +136,109 @@ nodes
| Test.java:99:12:99:33 | new URI(...) | semmle.label | new URI(...) |
| Test.java:100:12:100:45 | new URI(...) | semmle.label | new URI(...) |
| Test.java:101:12:101:54 | new URI(...) | semmle.label | new URI(...) |
| mad/Test.java:12:16:12:36 | getHostName(...) : String | semmle.label | getHostName(...) : String |
| mad/Test.java:17:52:17:72 | (...)... | semmle.label | (...)... |
| mad/Test.java:17:61:17:72 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:19:32:19:52 | (...)... | semmle.label | (...)... |
| mad/Test.java:19:41:19:52 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:25:31:25:49 | (...)... | semmle.label | (...)... |
| mad/Test.java:25:38:25:49 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:27:29:27:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:27:36:27:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:29:24:29:42 | (...)... | semmle.label | (...)... |
| mad/Test.java:29:31:29:42 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:31:24:31:44 | (...)... | semmle.label | (...)... |
| mad/Test.java:31:33:31:44 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:33:41:33:61 | (...)... | semmle.label | (...)... |
| mad/Test.java:33:50:33:61 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:35:45:35:65 | (...)... | semmle.label | (...)... |
| mad/Test.java:35:54:35:65 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:28:16:28:36 | getHostName(...) : String | semmle.label | getHostName(...) : String |
| mad/Test.java:33:52:33:68 | (...)... | semmle.label | (...)... |
| mad/Test.java:33:61:33:68 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:35:32:35:48 | (...)... | semmle.label | (...)... |
| mad/Test.java:35:41:35:48 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:37:47:37:63 | (...)... | semmle.label | (...)... |
| mad/Test.java:37:56:37:63 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:39:39:39:53 | (...)... | semmle.label | (...)... |
| mad/Test.java:39:46:39:53 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:41:31:41:45 | (...)... | semmle.label | (...)... |
| mad/Test.java:41:38:41:45 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:43:29:43:43 | (...)... | semmle.label | (...)... |
| mad/Test.java:43:36:43:43 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:45:24:45:38 | (...)... | semmle.label | (...)... |
| mad/Test.java:45:31:45:38 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:47:24:47:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:47:33:47:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:49:20:49:34 | (...)... | semmle.label | (...)... |
| mad/Test.java:49:27:49:34 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:50:20:50:34 | (...)... | semmle.label | (...)... |
| mad/Test.java:50:27:50:34 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:51:20:51:41 | (...)... | semmle.label | (...)... |
| mad/Test.java:51:34:51:41 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:53:33:53:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:53:40:53:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:54:33:54:55 | (...)... | semmle.label | (...)... |
| mad/Test.java:54:48:54:55 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:55:40:55:54 | (...)... | semmle.label | (...)... |
| mad/Test.java:55:47:55:54 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:57:33:57:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:57:40:57:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:59:31:59:45 | (...)... | semmle.label | (...)... |
| mad/Test.java:59:38:59:45 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:61:26:61:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:61:33:61:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:63:26:63:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:63:33:63:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:65:34:65:48 | (...)... | semmle.label | (...)... |
| mad/Test.java:65:41:65:48 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:67:35:67:49 | (...)... | semmle.label | (...)... |
| mad/Test.java:67:42:67:49 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:69:30:69:44 | (...)... | semmle.label | (...)... |
| mad/Test.java:69:37:69:44 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:71:22:71:36 | (...)... | semmle.label | (...)... |
| mad/Test.java:71:29:71:36 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:73:30:73:44 | (...)... | semmle.label | (...)... |
| mad/Test.java:73:37:73:44 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:75:21:75:35 | (...)... | semmle.label | (...)... |
| mad/Test.java:75:28:75:35 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:77:26:77:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:77:33:77:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:79:33:79:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:79:40:79:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:81:33:81:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:81:40:81:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:82:33:82:47 | (...)... | semmle.label | (...)... |
| mad/Test.java:82:40:82:47 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:84:31:84:45 | (...)... | semmle.label | (...)... |
| mad/Test.java:84:38:84:45 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:86:21:86:35 | (...)... | semmle.label | (...)... |
| mad/Test.java:86:28:86:35 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:87:21:87:35 | (...)... | semmle.label | (...)... |
| mad/Test.java:87:28:87:35 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:88:21:88:35 | (...)... | semmle.label | (...)... |
| mad/Test.java:88:28:88:35 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:90:27:90:41 | (...)... | semmle.label | (...)... |
| mad/Test.java:90:34:90:41 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:91:27:91:41 | (...)... | semmle.label | (...)... |
| mad/Test.java:91:34:91:41 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:93:26:93:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:93:33:93:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:95:35:95:49 | (...)... | semmle.label | (...)... |
| mad/Test.java:95:42:95:49 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:97:41:97:57 | (...)... | semmle.label | (...)... |
| mad/Test.java:97:50:97:57 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:99:45:99:61 | (...)... | semmle.label | (...)... |
| mad/Test.java:99:54:99:61 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:104:30:104:44 | (...)... | semmle.label | (...)... |
| mad/Test.java:104:37:104:44 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:106:40:106:81 | (...)... | semmle.label | (...)... |
| mad/Test.java:106:74:106:81 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:108:34:108:75 | (...)... | semmle.label | (...)... |
| mad/Test.java:108:68:108:75 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:110:34:110:75 | (...)... | semmle.label | (...)... |
| mad/Test.java:110:68:110:75 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:112:23:112:37 | (...)... | semmle.label | (...)... |
| mad/Test.java:112:30:112:37 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:117:23:117:37 | (...)... | semmle.label | (...)... |
| mad/Test.java:117:30:117:37 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:122:23:122:40 | (...)... | semmle.label | (...)... |
| mad/Test.java:122:33:122:40 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:124:20:124:34 | (...)... | semmle.label | (...)... |
| mad/Test.java:124:27:124:34 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:126:21:126:35 | (...)... | semmle.label | (...)... |
| mad/Test.java:126:28:126:35 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:128:22:128:36 | (...)... | semmle.label | (...)... |
| mad/Test.java:128:29:128:36 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:133:20:133:34 | (...)... | semmle.label | (...)... |
| mad/Test.java:133:27:133:34 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:135:19:135:33 | (...)... | semmle.label | (...)... |
| mad/Test.java:135:26:135:33 | source(...) : String | semmle.label | source(...) : String |
| mad/Test.java:140:20:140:36 | (...)... | semmle.label | (...)... |
| mad/Test.java:140:29:140:36 | source(...) : String | semmle.label | source(...) : String |
subpaths
#select
| Test.java:24:11:24:24 | new File(...) | Test.java:19:18:19:38 | getHostName(...) : String | Test.java:24:20:24:23 | temp | This path depends on a $@. | Test.java:19:18:19:38 | getHostName(...) | user-provided value |
@@ -80,11 +252,54 @@ subpaths
| Test.java:99:3:99:34 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:99:12:99:33 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value |
| Test.java:100:3:100:46 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:100:12:100:45 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value |
| Test.java:101:3:101:55 | new File(...) | Test.java:95:14:95:34 | getHostName(...) : String | Test.java:101:12:101:54 | new URI(...) | This path depends on a $@. | Test.java:95:14:95:34 | getHostName(...) | user-provided value |
| mad/Test.java:17:52:17:72 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:17:52:17:72 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:19:32:19:52 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:19:32:19:52 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:25:31:25:49 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:25:31:25:49 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:27:29:27:47 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:27:29:27:47 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:29:24:29:42 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:29:24:29:42 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:31:9:31:45 | new FileReader(...) | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:31:24:31:44 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:33:41:33:61 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:33:41:33:61 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:35:45:35:65 | (...)... | mad/Test.java:12:16:12:36 | getHostName(...) : String | mad/Test.java:35:45:35:65 | (...)... | This path depends on a $@. | mad/Test.java:12:16:12:36 | getHostName(...) | user-provided value |
| mad/Test.java:33:52:33:68 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:33:52:33:68 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:35:32:35:48 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:35:32:35:48 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:37:47:37:63 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:37:47:37:63 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:39:39:39:53 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:39:39:39:53 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:41:31:41:45 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:41:31:41:45 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:43:29:43:43 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:43:29:43:43 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:45:24:45:38 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:45:24:45:38 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:47:9:47:41 | new FileReader(...) | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:47:24:47:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:49:20:49:34 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:49:20:49:34 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:50:20:50:34 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:50:20:50:34 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:51:20:51:41 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:51:20:51:41 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:53:33:53:47 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:53:33:53:47 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:54:33:54:55 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:54:33:54:55 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:55:40:55:54 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:55:40:55:54 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:57:33:57:47 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:57:33:57:47 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:59:31:59:45 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:59:31:59:45 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:61:26:61:40 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:61:26:61:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:63:26:63:40 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:63:26:63:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:65:34:65:48 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:65:34:65:48 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:67:35:67:49 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:67:35:67:49 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:69:30:69:44 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:69:30:69:44 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:71:22:71:36 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:71:22:71:36 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:73:30:73:44 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:73:30:73:44 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:75:21:75:35 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:75:21:75:35 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:77:26:77:40 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:77:26:77:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:79:33:79:47 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:79:33:79:47 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:81:33:81:47 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:81:33:81:47 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:82:33:82:47 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:82:33:82:47 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:84:31:84:45 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:84:31:84:45 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:86:21:86:35 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:86:21:86:35 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:87:21:87:35 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:87:21:87:35 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:88:21:88:35 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:88:21:88:35 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:90:27:90:41 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:90:27:90:41 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:91:27:91:41 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:91:27:91:41 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:93:26:93:40 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:93:26:93:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:95:35:95:49 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:95:35:95:49 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:97:41:97:57 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:97:41:97:57 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:99:45:99:61 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:99:45:99:61 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:104:30:104:44 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:104:30:104:44 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:106:40:106:81 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:106:40:106:81 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:108:34:108:75 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:108:34:108:75 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:110:34:110:75 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:110:34:110:75 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:112:23:112:37 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:112:23:112:37 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:117:23:117:37 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:117:23:117:37 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:122:23:122:40 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:122:23:122:40 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:124:20:124:34 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:124:20:124:34 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:126:21:126:35 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:126:21:126:35 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:128:22:128:36 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:128:22:128:36 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:133:20:133:34 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:133:20:133:34 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:135:19:135:33 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:135:19:135:33 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |
| mad/Test.java:140:20:140:36 | (...)... | mad/Test.java:28:16:28:36 | getHostName(...) : String | mad/Test.java:140:20:140:36 | (...)... | This path depends on a $@. | mad/Test.java:28:16:28:36 | getHostName(...) | user-provided value |

View File

@@ -2,36 +2,141 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.io.FileUtils;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.Copy;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.types.FileSet;
import org.codehaus.cargo.container.installer.ZipURLInstaller;
import org.kohsuke.stapler.framework.io.LargeText;
import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
public class Test {
public Object source(InetAddress address) {
private InetAddress address;
public Object source() {
return address.getHostName();
}
void test(InetAddress address) throws IOException {
void test() throws IOException {
// "java.lang;Module;true;getResourceAsStream;(String);;Argument[0];read-file;ai-generated"
getClass().getModule().getResourceAsStream((String) source(null));
getClass().getModule().getResourceAsStream((String) source());
// "java.lang;Class;false;getResource;(String);;Argument[0];read-file;ai-generated"
getClass().getResource((String) source(null));
getClass().getResource((String) source());
// "java.lang;ClassLoader;true;getSystemResourceAsStream;(String);;Argument[0];read-file;ai-generated"
ClassLoader.getSystemResource((String) source(null));
ClassLoader.getSystemResourceAsStream((String) source());
// "java.io;File;true;createTempFile;(String,String,File);;Argument[2];create-file;ai-generated"
File.createTempFile(";", (String) source(null));
File.createTempFile(";", ";", (File) source());
// "java.io;File;true;renameTo;(File);;Argument[0];create-file;ai-generated"
new File("").renameTo((File) source(null));
new File("").renameTo((File) source());
// "java.io;FileInputStream;true;FileInputStream;(File);;Argument[0];read-file;ai-generated"
new FileInputStream((File) source(null));
new FileInputStream((File) source());
// "java.io;FileReader;true;FileReader;(File);;Argument[0];read-file;ai-generated"
new FileReader((File) source(null));
new FileReader((File) source());
// "java.io;FileReader;true;FileReader;(String);;Argument[0];read-file;ai-generated"
new FileReader((String) source(null));
new FileReader((String) source());
// "java.nio.file;Files;false;copy;;;Argument[0];read-file;manual"
Files.copy((Path) source(), (Path) null);
Files.copy((Path) source(), (OutputStream) null);
Files.copy((InputStream) source(), null);
// "java.nio.file;Files;false;copy;;;Argument[1];create-file;manual"
Files.copy((Path) null, (Path) source());
Files.copy((Path) null, (OutputStream) source());
Files.copy((InputStream) null, (Path) source());
// "java.nio.file;Files;false;createDirectories;;;Argument[0];create-file;manual"
Files.createDirectories((Path) source());
// "java.nio.file;Files;false;createDirectory;;;Argument[0];create-file;manual"
Files.createDirectory((Path) source());
// "java.nio.file;Files;false;createFile;;;Argument[0];create-file;manual"
Files.createFile((Path) source());
// "java.nio.file;Files;false;createLink;;;Argument[0];create-file;manual"
Files.createLink((Path) source(), null);
// "java.nio.file;Files;false;createSymbolicLink;;;Argument[0];create-file;manual"
Files.createSymbolicLink((Path) source(), null);
// "java.nio.file;Files;false;createTempDirectory;(Path,String,FileAttribute[]);;Argument[0];create-file;manual"
Files.createTempDirectory((Path) source(), null);
// "java.nio.file;Files;false;createTempFile;(Path,String,String,FileAttribute[]);;Argument[0];create-file;manual"
Files.createTempFile((Path) source(), null, null);
// "java.nio.file;Files;false;delete;(Path);;Argument[0];delete-file;ai-generated"
Files.delete((Path) source());
// "java.nio.file;Files;false;deleteIfExists;(Path);;Argument[0];delete-file;ai-generated"
Files.deleteIfExists((Path) source());
// "java.nio.file;Files;false;lines;(Path,Charset);;Argument[0];read-file;ai-generated"
Files.lines((Path) source(), null);
// "java.nio.file;Files;false;move;;;Argument[1];create-file;manual"
Files.move(null, (Path) source());
// "java.nio.file;Files;false;newBufferedReader;(Path,Charset);;Argument[0];read-file;ai-generated"
Files.newBufferedReader((Path) source(), null);
// "java.nio.file;Files;false;newBufferedWriter;;;Argument[0];create-file;manual"
Files.newBufferedWriter((Path) source());
Files.newBufferedWriter((Path) source(), (Charset) null);
// "java.nio.file;Files;false;newOutputStream;;;Argument[0];create-file;manual"
Files.newOutputStream((Path) source());
// "java.nio.file;Files;false;write;;;Argument[0];create-file;manual"
Files.write((Path) source(), (byte[]) null);
Files.write((Path) source(), (Iterable<CharSequence>) null);
Files.write((Path) source(), (Iterable<CharSequence>) null, (Charset) null);
// "java.nio.file;Files;false;writeString;;;Argument[0];create-file;manual"
Files.writeString((Path) source(), (CharSequence) null);
Files.writeString((Path) source(), (CharSequence) null, (Charset) null);
// "javax.xml.transform.stream;StreamResult";true;"StreamResult;(File);;Argument[0];create-file;ai-generated"
new StreamResult((File) source());
// "org.apache.commons.io;FileUtils;true;openInputStream;(File);;Argument[0];read-file;ai-generated"
FileUtils.openInputStream((File) source());
// "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[1];create-file;ai-generated"
new ZipURLInstaller((URL) null, (String) source(null), "");
new ZipURLInstaller((URL) null, (String) source(), "");
// "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[2];create-file;ai-generated"
new ZipURLInstaller((URL) null, "", (String) source(null));
new ZipURLInstaller((URL) null, "", (String) source());
}
void test(AntClassLoader acl) {
// "org.apache.tools.ant;AntClassLoader;true;addPathComponent;(File);;Argument[0];read-file;ai-generated"
acl.addPathComponent((File) source());
// "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(ClassLoader,Project,Path,boolean);;Argument[2];read-file;ai-generated"
new AntClassLoader(null, null, (org.apache.tools.ant.types.Path) source(), false);
// "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path,boolean);;Argument[1];read-file;ai-generated"
new AntClassLoader(null, (org.apache.tools.ant.types.Path) source(), false);
// "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path);;Argument[1];read-file;ai-generated"
new AntClassLoader(null, (org.apache.tools.ant.types.Path) source());
// "org.kohsuke.stapler.framework.io;LargeText;true;LargeText;(File,Charset,boolean,boolean);;Argument[0];read-file;ai-generated"
new LargeText((File) source(), null, false, false);
}
void test(DirectoryScanner ds) {
// "org.apache.tools.ant;DirectoryScanner;true;setBasedir;(File);;Argument[0];read-file;ai-generated"
ds.setBasedir((File) source());
}
void test(Copy cp) {
// "org.apache.tools.ant.taskdefs;Copy;true;addFileset;(FileSet);;Argument[0];read-file;ai-generated"
cp.addFileset((FileSet) source());
// "org.apache.tools.ant.taskdefs;Copy;true;setFile;(File);;Argument[0];read-file;ai-generated"
cp.setFile((File) source());
// "org.apache.tools.ant.taskdefs;Copy;true;setTodir;(File);;Argument[0];create-file;ai-generated"
cp.setTodir((File) source());
// "org.apache.tools.ant.taskdefs;Copy;true;setTofile;(File);;Argument[0];create-file;ai-generated"
cp.setTofile((File) source());
}
void test(Expand ex) {
// "org.apache.tools.ant.taskdefs;Expand;true;setDest;(File);;Argument[0];create-file;ai-generated"
ex.setDest((File) source());
// "org.apache.tools.ant.taskdefs;Expand;true;setSrc;(File);;Argument[0];read-file;ai-generated"
ex.setSrc((File) source());
}
void test(ChainedOptionsBuilder cob) {
// "org.openjdk.jmh.runner.options;ChainedOptionsBuilder;true;result;(String);;Argument[0];create-file;ai-generated"
cob.result((String) source());
}
}

View File

@@ -1 +1 @@
// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/apache-commons-io-2.6:${testdir}/../../../../../stubs/cargo
// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/apache-commons-io-2.6:${testdir}/../../../../../stubs/cargo:${testdir}/../../../../../stubs/apache-ant-1.10.13:${testdir}/../../../../../stubs/stapler-1.263:${testdir}/../../../../../stubs/javax-servlet-2.5:${testdir}/../../../../../stubs/apache-commons-jelly-1.0.1:${testdir}/../../../../../stubs/apache-commons-fileupload-1.4:${testdir}/../../../../../stubs/saxon-xqj-9.x:${testdir}/../../../../../stubs/apache-commons-beanutils:${testdir}/../../../../../stubs/dom4j-2.1.1:${testdir}/../../../../../stubs/apache-commons-lang:${testdir}/../../../../../stubs/jaxen-1.2.0:${testdir}/../../../../../stubs/jmh-1.3.6

View File

@@ -4,7 +4,10 @@ edges
| HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL | HttpsUrlsTest.java:28:50:28:50 | u |
| HttpsUrlsTest.java:24:21:24:56 | ... + ... : String | HttpsUrlsTest.java:24:13:24:57 | new URL(...) : URL |
| HttpsUrlsTest.java:36:23:36:28 | "http" : String | HttpsUrlsTest.java:41:50:41:50 | u |
| HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:51:64:51:98 | ... + ... : String |
| HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:55:50:55:50 | u |
| HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | HttpsUrlsTest.java:55:50:55:50 | u |
| HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL |
| HttpsUrlsTest.java:87:23:87:28 | "http" : String | HttpsUrlsTest.java:92:50:92:50 | u |
nodes
| HttpsUrlsTest.java:23:23:23:31 | "http://" : String | semmle.label | "http://" : String |
@@ -14,6 +17,8 @@ nodes
| HttpsUrlsTest.java:36:23:36:28 | "http" : String | semmle.label | "http" : String |
| HttpsUrlsTest.java:41:50:41:50 | u | semmle.label | u |
| HttpsUrlsTest.java:49:23:49:31 | "http://" : String | semmle.label | "http://" : String |
| HttpsUrlsTest.java:51:13:51:99 | new URL(...) : URL | semmle.label | new URL(...) : URL |
| HttpsUrlsTest.java:51:64:51:98 | ... + ... : String | semmle.label | ... + ... : String |
| HttpsUrlsTest.java:55:50:55:50 | u | semmle.label | u |
| HttpsUrlsTest.java:87:23:87:28 | "http" : String | semmle.label | "http" : String |
| HttpsUrlsTest.java:92:50:92:50 | u | semmle.label | u |

View File

@@ -4,6 +4,8 @@ edges
| UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... |
| UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:14 | input : String |
| UrlRedirect.java:46:10:46:14 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String |
| mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String |
| mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... |
nodes
| UrlRedirect.java:23:25:23:54 | getParameter(...) | semmle.label | getParameter(...) |
| UrlRedirect.java:32:25:32:67 | weakCleanup(...) | semmle.label | weakCleanup(...) |
@@ -15,6 +17,9 @@ nodes
| UrlRedirect.java:45:28:45:39 | input : String | semmle.label | input : String |
| UrlRedirect.java:46:10:46:14 | input : String | semmle.label | input : String |
| UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | semmle.label | replaceAll(...) : String |
| mad/Test.java:9:16:9:41 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| mad/Test.java:14:22:14:38 | (...)... | semmle.label | (...)... |
| mad/Test.java:14:31:14:38 | source(...) : String | semmle.label | source(...) : String |
subpaths
| UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) |
#select
@@ -23,3 +28,4 @@ subpaths
| UrlRedirect.java:36:25:36:89 | ... + ... | UrlRedirect.java:36:58:36:89 | getParameter(...) : String | UrlRedirect.java:36:25:36:89 | ... + ... | Untrusted URL redirection depends on a $@. | UrlRedirect.java:36:58:36:89 | getParameter(...) | user-provided value |
| UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:39:34:39:63 | getParameter(...) | user-provided value |
| UrlRedirect.java:42:43:42:72 | getParameter(...) | UrlRedirect.java:42:43:42:72 | getParameter(...) | UrlRedirect.java:42:43:42:72 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:42:43:42:72 | getParameter(...) | user-provided value |
| mad/Test.java:14:22:14:38 | (...)... | mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:22:14:38 | (...)... | Untrusted URL redirection depends on a $@. | mad/Test.java:9:16:9:41 | getParameter(...) | user-provided value |

View File

@@ -0,0 +1,16 @@
import javax.servlet.http.HttpServletRequest;
import org.kohsuke.stapler.HttpResponses;
public class Test {
private static HttpServletRequest request;
public static Object source() {
return request.getParameter(null);
}
public void test(HttpResponses r) {
// "org.kohsuke.stapler;HttpResponses;true;redirectTo;(String);;Argument[0];open-url;ai-generated"
r.redirectTo((String) source());
}
}

View File

@@ -1 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/stapler-1.263:${testdir}/../../../../../stubs/javax-servlet-2.5:${testdir}/../../../../../stubs/apache-commons-jelly-1.0.1:${testdir}/../../../../../stubs/apache-commons-fileupload-1.4:${testdir}/../../../../../stubs/saxon-xqj-9.x:${testdir}/../../../../../stubs/apache-commons-beanutils:${testdir}/../../../../../stubs/dom4j-2.1.1:${testdir}/../../../../../stubs/apache-commons-lang:${testdir}/../../../../../stubs/jaxen-1.2.0

View File

@@ -1,22 +1,77 @@
import java.net.DatagramSocket;
import java.net.Proxy;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
import java.net.URLClassLoader;
import javax.servlet.http.HttpServletRequest;
import javafx.scene.web.WebEngine;
import org.apache.commons.jelly.JellyContext;
import org.codehaus.cargo.container.installer.ZipURLInstaller;
import org.kohsuke.stapler.HttpResponses;
public class Test {
public static Object source(HttpServletRequest request) {
private static HttpServletRequest request;
public static Object source() {
return request.getParameter(null);
}
public void test(DatagramSocket socket) throws Exception {
// "java.net;DatagramSocket;true;connect;(SocketAddress);;Argument[0];open-url;ai-generated"
socket.connect((SocketAddress) source()); // $ SSRF
}
public void test(URL url) throws Exception {
// "java.net;URL;false;openConnection;(Proxy);:Argument[-1]:open-url;manual"
((URL) source()).openConnection(); // $ SSRF
// "java.net;URL;false;openConnection;(Proxy);:Argument[0]:open-url;ai-generated"
url.openConnection((Proxy) source()); // $ SSRF
// "java.net;URL;false;openStream;;:Argument[-1]:open-url;manual"
((URL) source()).openStream(); // $ SSRF
}
public void test(URLClassLoader cl) throws Exception {
// "java.net;URLClassLoader;false;URLClassLoader;(String,URL[],ClassLoader);;Argument[1];open-url;manual"
new URLClassLoader("", (URL[]) source(), null); // $ SSRF
// "java.net;URLClassLoader;false;URLClassLoader;(String,URL[],ClassLoader,URLStreamHandlerFactory);;Argument[1];open-url;manual"
new URLClassLoader("", (URL[]) source(), null, null); // $ SSRF
// "java.net;URLClassLoader;false;URLClassLoader;(URL[]);;Argument[0];open-url;manual"
new URLClassLoader((URL[]) source()); // $ SSRF
// "java.net;URLClassLoader;false;URLClassLoader;(URL[],ClassLoader);;Argument[0];open-url;manual"
new URLClassLoader((URL[]) source(), null); // $ SSRF
// "java.net;URLClassLoader;false;URLClassLoader;(URL[],ClassLoader,URLStreamHandlerFactory);;Argument[0];open-url;manual"
new URLClassLoader((URL[]) source(), null, null); // $ SSRF
// "java.net;URLClassLoader;false;newInstance;;;Argument[0];open-url;manual"
URLClassLoader.newInstance((URL[]) source()); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL,URL);;Argument[1];open-url;ai-generated"
new JellyContext(null, (URL) source(), null); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL,URL);;Argument[2];open-url;ai-generated"
new JellyContext(null, null, (URL) source()); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL);;Argument[1];open-url;ai-generated"
new JellyContext((JellyContext) null, (URL) source()); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL,URL);;Argument[0];open-url;ai-generated"
new JellyContext((URL) source(), null); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL,URL);;Argument[1];open-url;ai-generated"
new JellyContext((URL) null, (URL) source()); // $ SSRF
// "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL);;Argument[0];open-url;ai-generated"
new JellyContext((URL) source()); // $ SSRF
}
public void test(WebEngine webEngine) {
// "javafx.scene.web;WebEngine;false;load;(String);;Argument[0];open-url;ai-generated"
webEngine.load((String) source(null)); // $ SSRF
webEngine.load((String) source()); // $ SSRF
}
public void test() {
public void test(ZipURLInstaller zui) {
// "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[0];open-url:ai-generated"
new ZipURLInstaller((URL) source(null), "", ""); // $ SSRF
new ZipURLInstaller((URL) source(), "", ""); // $ SSRF
}
public void test(HttpResponses r) {
// "org.kohsuke.stapler;HttpResponses;true;staticResource;(URL);;Argument[0];open-url;ai-generated"
r.staticResource((URL) source()); // $ SSRF
}
}

View File

@@ -1,2 +1 @@
//semmle-extractor-options: --javac-args -source 11 -target 11 -cp ${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/javax-ws-rs-api-2.1.1:${testdir}/../../../stubs/javax-ws-rs-api-3.0.0:${testdir}/../../../stubs/apache-http-4.4.13/:${testdir}/../../../stubs/servlet-api-2.4/:${testdir}/../../../stubs/projectreactor-3.4.3/:${testdir}/../../../stubs/postgresql-42.3.3/:${testdir}/../../../stubs/HikariCP-3.4.5/:${testdir}/../../../stubs/spring-jdbc-5.3.8/:${testdir}/../../../stubs/jdbi3-core-3.27.2/:${testdir}/../../../stubs/cargo:${testdir}/../../../stubs/javafx-web
//semmle-extractor-options: --javac-args -source 11 -target 11 -cp ${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/javax-ws-rs-api-2.1.1:${testdir}/../../../stubs/javax-ws-rs-api-3.0.0:${testdir}/../../../stubs/apache-http-4.4.13/:${testdir}/../../../stubs/projectreactor-3.4.3/:${testdir}/../../../stubs/postgresql-42.3.3/:${testdir}/../../../stubs/HikariCP-3.4.5/:${testdir}/../../../stubs/spring-jdbc-5.3.8/:${testdir}/../../../stubs/jdbi3-core-3.27.2/:${testdir}/../../../stubs/cargo:${testdir}/../../../stubs/javafx-web:${testdir}/../../../stubs/apache-commons-jelly-1.0.1:${testdir}/../../../stubs/dom4j-2.1.1:${testdir}/../../../stubs/jaxen-1.2.0:${testdir}/../../../stubs/stapler-1.263:${testdir}/../../../stubs/javax-servlet-2.5:${testdir}/../../../stubs/apache-commons-fileupload-1.4:${testdir}/../../../stubs/saxon-xqj-9.x:${testdir}/../../../stubs/apache-commons-beanutils:${testdir}/../../../stubs/apache-commons-lang

View File

@@ -0,0 +1,70 @@
// Generated automatically from org.apache.tools.ant.AntClassLoader for testing purposes
package org.apache.tools.ant;
import java.io.Closeable;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.jar.Manifest;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.SubBuildListener;
import org.apache.tools.ant.types.Path;
public class AntClassLoader extends ClassLoader implements Closeable, SubBuildListener
{
protected Class<? extends Object> defineClassFromData(File p0, byte[] p1, String p2){ return null; }
protected Class<? extends Object> loadClass(String p0, boolean p1){ return null; }
protected Enumeration<URL> findResources(String p0){ return null; }
protected Enumeration<URL> findResources(String p0, boolean p1){ return null; }
protected URL findResource(String p0){ return null; }
protected URL getResourceURL(File p0, String p1){ return null; }
protected boolean isInPath(File p0){ return false; }
protected void addPathFile(File p0){}
protected void definePackage(File p0, String p1){}
protected void definePackage(File p0, String p1, Manifest p2){}
protected void log(String p0, int p1){}
public AntClassLoader(){}
public AntClassLoader(ClassLoader p0, Project p1, Path p2){}
public AntClassLoader(ClassLoader p0, Project p1, Path p2, boolean p3){}
public AntClassLoader(ClassLoader p0, boolean p1){}
public AntClassLoader(Project p0, Path p1){}
public AntClassLoader(Project p0, Path p1, boolean p2){}
public Class<? extends Object> findClass(String p0){ return null; }
public Class<? extends Object> forceLoadClass(String p0){ return null; }
public Class<? extends Object> forceLoadSystemClass(String p0){ return null; }
public ClassLoader getConfiguredParent(){ return null; }
public Enumeration<URL> getNamedResources(String p0){ return null; }
public Enumeration<URL> getResources(String p0){ return null; }
public InputStream getResourceAsStream(String p0){ return null; }
public String getClasspath(){ return null; }
public String toString(){ return null; }
public URL getResource(String p0){ return null; }
public static AntClassLoader newAntClassLoader(ClassLoader p0, Project p1, Path p2, boolean p3){ return null; }
public static void initializeClass(Class<? extends Object> p0){}
public void addJavaLibraries(){}
public void addLoaderPackageRoot(String p0){}
public void addPathComponent(File p0){}
public void addPathElement(String p0){}
public void addSystemPackageRoot(String p0){}
public void buildFinished(BuildEvent p0){}
public void buildStarted(BuildEvent p0){}
public void cleanup(){}
public void close(){}
public void messageLogged(BuildEvent p0){}
public void resetThreadContextLoader(){}
public void setClassPath(Path p0){}
public void setIsolated(boolean p0){}
public void setParent(ClassLoader p0){}
public void setParentFirst(boolean p0){}
public void setProject(Project p0){}
public void setThreadContextLoader(){}
public void subBuildFinished(BuildEvent p0){}
public void subBuildStarted(BuildEvent p0){}
public void targetFinished(BuildEvent p0){}
public void targetStarted(BuildEvent p0){}
public void taskFinished(BuildEvent p0){}
public void taskStarted(BuildEvent p0){}
}

View File

@@ -0,0 +1,54 @@
// Generated automatically from org.apache.tools.ant.BuildEvent for testing purposes
package org.apache.tools.ant;
import java.util.EventObject;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
public class BuildEvent extends EventObject {
protected BuildEvent() {
super(null);
}
public BuildEvent(Project p0) {
super(null);
}
public BuildEvent(Target p0) {
super(null);
}
public BuildEvent(Task p0) {
super(null);
}
public Project getProject() {
return null;
}
public String getMessage() {
return null;
}
public Target getTarget() {
return null;
}
public Task getTask() {
return null;
}
public Throwable getException() {
return null;
}
public int getPriority() {
return 0;
}
public void setException(Throwable p0) {}
public void setMessage(String p0, int p1) {}
}

View File

@@ -0,0 +1,22 @@
// Generated automatically from org.apache.tools.ant.BuildException for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.Location;
public class BuildException extends RuntimeException
{
public BuildException(){}
public BuildException(String p0){}
public BuildException(String p0, Location p1){}
public BuildException(String p0, Object... p1){}
public BuildException(String p0, Throwable p1){}
public BuildException(String p0, Throwable p1, Location p2){}
public BuildException(Throwable p0){}
public BuildException(Throwable p0, Location p1){}
public Location getLocation(){ return null; }
public String toString(){ return null; }
public Throwable getException(){ return null; }
public static BuildException of(Throwable p0){ return null; }
public void setLocation(Location p0){}
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from org.apache.tools.ant.BuildListener for testing purposes
package org.apache.tools.ant;
import java.util.EventListener;
import org.apache.tools.ant.BuildEvent;
public interface BuildListener extends EventListener
{
void buildFinished(BuildEvent p0);
void buildStarted(BuildEvent p0);
void messageLogged(BuildEvent p0);
void targetFinished(BuildEvent p0);
void targetStarted(BuildEvent p0);
void taskFinished(BuildEvent p0);
void taskStarted(BuildEvent p0);
}

View File

@@ -0,0 +1,80 @@
// Generated automatically from org.apache.tools.ant.DirectoryScanner for testing purposes
package org.apache.tools.ant;
import java.io.File;
import java.util.Vector;
import org.apache.tools.ant.FileScanner;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceFactory;
import org.apache.tools.ant.types.selectors.FileSelector;
import org.apache.tools.ant.types.selectors.SelectorScanner;
public class DirectoryScanner implements FileScanner, ResourceFactory, SelectorScanner
{
protected File basedir = null;
protected FileSelector[] selectors = null;
protected String[] excludes = null;
protected String[] includes = null;
protected Vector<String> dirsDeselected = null;
protected Vector<String> dirsExcluded = null;
protected Vector<String> dirsIncluded = null;
protected Vector<String> dirsNotIncluded = null;
protected Vector<String> filesDeselected = null;
protected Vector<String> filesExcluded = null;
protected Vector<String> filesIncluded = null;
protected Vector<String> filesNotIncluded = null;
protected boolean couldHoldIncluded(String p0){ return false; }
protected boolean errorOnMissingDir = false;
protected boolean everythingIncluded = false;
protected boolean haveSlowResults = false;
protected boolean isCaseSensitive = false;
protected boolean isExcluded(String p0){ return false; }
protected boolean isIncluded(String p0){ return false; }
protected boolean isSelected(String p0, File p1){ return false; }
protected static String[] DEFAULTEXCLUDES = null;
protected static boolean match(String p0, String p1, boolean p2){ return false; }
protected static boolean matchPath(String p0, String p1){ return false; }
protected static boolean matchPath(String p0, String p1, boolean p2){ return false; }
protected static boolean matchPatternStart(String p0, String p1){ return false; }
protected static boolean matchPatternStart(String p0, String p1, boolean p2){ return false; }
protected void clearResults(){}
protected void scandir(File p0, String p1, boolean p2){}
protected void slowScan(){}
public DirectoryScanner(){}
public File getBasedir(){ return null; }
public Resource getResource(String p0){ return null; }
public String[] getDeselectedDirectories(){ return null; }
public String[] getDeselectedFiles(){ return null; }
public String[] getExcludedDirectories(){ return null; }
public String[] getExcludedFiles(){ return null; }
public String[] getIncludedDirectories(){ return null; }
public String[] getIncludedFiles(){ return null; }
public String[] getNotFollowedSymlinks(){ return null; }
public String[] getNotIncludedDirectories(){ return null; }
public String[] getNotIncludedFiles(){ return null; }
public boolean isCaseSensitive(){ return false; }
public boolean isEverythingIncluded(){ return false; }
public boolean isFollowSymlinks(){ return false; }
public int getIncludedDirsCount(){ return 0; }
public int getIncludedFilesCount(){ return 0; }
public static String DOES_NOT_EXIST_POSTFIX = null;
public static String[] getDefaultExcludes(){ return null; }
public static boolean addDefaultExclude(String p0){ return false; }
public static boolean match(String p0, String p1){ return false; }
public static boolean removeDefaultExclude(String p0){ return false; }
public static int MAX_LEVELS_OF_SYMLINKS = 0;
public static void resetDefaultExcludes(){}
public void addDefaultExcludes(){}
public void addExcludes(String[] p0){}
public void scan(){}
public void setBasedir(File p0){}
public void setBasedir(String p0){}
public void setCaseSensitive(boolean p0){}
public void setErrorOnMissingDir(boolean p0){}
public void setExcludes(String[] p0){}
public void setFollowSymlinks(boolean p0){}
public void setIncludes(String[] p0){}
public void setMaxLevelsOfSymlinks(int p0){}
public void setSelectors(FileSelector[] p0){}
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.tools.ant.Executor for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.Project;
public interface Executor
{
Executor getSubProjectExecutor();
void executeTargets(Project p0, String[] p1);
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from org.apache.tools.ant.FileScanner for testing purposes
package org.apache.tools.ant;
import java.io.File;
public interface FileScanner
{
File getBasedir();
String[] getExcludedDirectories();
String[] getExcludedFiles();
String[] getIncludedDirectories();
String[] getIncludedFiles();
String[] getNotIncludedDirectories();
String[] getNotIncludedFiles();
void addDefaultExcludes();
void scan();
void setBasedir(File p0);
void setBasedir(String p0);
void setCaseSensitive(boolean p0);
void setExcludes(String[] p0);
void setIncludes(String[] p0);
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from org.apache.tools.ant.Location for testing purposes
package org.apache.tools.ant;
import java.io.Serializable;
import org.xml.sax.Locator;
public class Location implements Serializable
{
protected Location() {}
public Location(Locator p0){}
public Location(String p0){}
public Location(String p0, int p1, int p2){}
public String getFileName(){ return null; }
public String toString(){ return null; }
public boolean equals(Object p0){ return false; }
public int getColumnNumber(){ return 0; }
public int getLineNumber(){ return 0; }
public int hashCode(){ return 0; }
public static Location UNKNOWN_LOCATION = null;
}

View File

@@ -0,0 +1,157 @@
// Generated automatically from org.apache.tools.ant.Project for testing purposes
package org.apache.tools.ant;
import java.io.File;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.Executor;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.input.InputHandler;
import org.apache.tools.ant.types.FilterSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceFactory;
public class Project implements ResourceFactory
{
protected void fireMessageLogged(Project p0, String p1, Throwable p2, int p3){}
protected void fireMessageLogged(Project p0, String p1, int p2){}
protected void fireMessageLogged(Target p0, String p1, Throwable p2, int p3){}
protected void fireMessageLogged(Target p0, String p1, int p2){}
protected void fireMessageLogged(Task p0, String p1, Throwable p2, int p3){}
protected void fireMessageLogged(Task p0, String p1, int p2){}
protected void fireTargetFinished(Target p0, Throwable p1){}
protected void fireTargetStarted(Target p0){}
protected void fireTaskFinished(Task p0, Throwable p1){}
protected void fireTaskStarted(Task p0){}
public <T> T getReference(String p0){ return null; }
public AntClassLoader createClassLoader(ClassLoader p0, Path p1){ return null; }
public AntClassLoader createClassLoader(Path p0){ return null; }
public ClassLoader getCoreLoader(){ return null; }
public Executor getExecutor(){ return null; }
public File getBaseDir(){ return null; }
public File resolveFile(String p0){ return null; }
public File resolveFile(String p0, File p1){ return null; }
public FilterSet getGlobalFilterSet(){ return null; }
public Hashtable<String, Class<? extends Object>> getDataTypeDefinitions(){ return null; }
public Hashtable<String, Class<? extends Object>> getTaskDefinitions(){ return null; }
public Hashtable<String, Object> getInheritedProperties(){ return null; }
public Hashtable<String, Object> getProperties(){ return null; }
public Hashtable<String, Object> getReferences(){ return null; }
public Hashtable<String, Object> getUserProperties(){ return null; }
public Hashtable<String, String> getFilters(){ return null; }
public Hashtable<String, Target> getTargets(){ return null; }
public InputHandler getInputHandler(){ return null; }
public InputStream getDefaultInputStream(){ return null; }
public Map<String, Class<? extends Object>> getCopyOfDataTypeDefinitions(){ return null; }
public Map<String, Class<? extends Object>> getCopyOfTaskDefinitions(){ return null; }
public Map<String, Object> getCopyOfReferences(){ return null; }
public Map<String, Target> getCopyOfTargets(){ return null; }
public Object createDataType(String p0){ return null; }
public Project createSubProject(){ return null; }
public Project(){}
public Resource getResource(String p0){ return null; }
public Set<String> getPropertyNames(){ return null; }
public String getDefaultTarget(){ return null; }
public String getDescription(){ return null; }
public String getElementName(Object p0){ return null; }
public String getName(){ return null; }
public String getProperty(String p0){ return null; }
public String getUserProperty(String p0){ return null; }
public String replaceProperties(String p0){ return null; }
public Task createTask(String p0){ return null; }
public Task getThreadTask(Thread p0){ return null; }
public Vector<BuildListener> getBuildListeners(){ return null; }
public boolean hasReference(String p0){ return false; }
public boolean isKeepGoingMode(){ return false; }
public final Vector<Target> topoSort(String p0, Hashtable<String, Target> p1){ return null; }
public final Vector<Target> topoSort(String p0, Hashtable<String, Target> p1, boolean p2){ return null; }
public final Vector<Target> topoSort(String[] p0, Hashtable<String, Target> p1, boolean p2){ return null; }
public final void setProjectReference(Object p0){}
public int defaultInput(byte[] p0, int p1, int p2){ return 0; }
public int demuxInput(byte[] p0, int p1, int p2){ return 0; }
public static Project getProject(Object p0){ return null; }
public static String JAVA_1_0 = null;
public static String JAVA_1_1 = null;
public static String JAVA_1_2 = null;
public static String JAVA_1_3 = null;
public static String JAVA_1_4 = null;
public static String TOKEN_END = null;
public static String TOKEN_START = null;
public static String getJavaVersion(){ return null; }
public static String translatePath(String p0){ return null; }
public static boolean toBoolean(String p0){ return false; }
public static int MSG_DEBUG = 0;
public static int MSG_ERR = 0;
public static int MSG_INFO = 0;
public static int MSG_VERBOSE = 0;
public static int MSG_WARN = 0;
public void addBuildListener(BuildListener p0){}
public void addDataTypeDefinition(String p0, Class<? extends Object> p1){}
public void addFilter(String p0, String p1){}
public void addIdReference(String p0, Object p1){}
public void addOrReplaceTarget(String p0, Target p1){}
public void addOrReplaceTarget(Target p0){}
public void addReference(String p0, Object p1){}
public void addTarget(String p0, Target p1){}
public void addTarget(Target p0){}
public void addTaskDefinition(String p0, Class<? extends Object> p1){}
public void checkTaskClass(Class<? extends Object> p0){}
public void copyFile(File p0, File p1){}
public void copyFile(File p0, File p1, boolean p2){}
public void copyFile(File p0, File p1, boolean p2, boolean p3){}
public void copyFile(File p0, File p1, boolean p2, boolean p3, boolean p4){}
public void copyFile(String p0, String p1){}
public void copyFile(String p0, String p1, boolean p2){}
public void copyFile(String p0, String p1, boolean p2, boolean p3){}
public void copyFile(String p0, String p1, boolean p2, boolean p3, boolean p4){}
public void copyInheritedProperties(Project p0){}
public void copyUserProperties(Project p0){}
public void demuxFlush(String p0, boolean p1){}
public void demuxOutput(String p0, boolean p1){}
public void executeSortedTargets(Vector<Target> p0){}
public void executeTarget(String p0){}
public void executeTargets(Vector<String> p0){}
public void fireBuildFinished(Throwable p0){}
public void fireBuildStarted(){}
public void fireSubBuildFinished(Throwable p0){}
public void fireSubBuildStarted(){}
public void inheritIDReferences(Project p0){}
public void init(){}
public void initProperties(){}
public void initSubProject(Project p0){}
public void log(String p0){}
public void log(String p0, Throwable p1, int p2){}
public void log(String p0, int p1){}
public void log(Target p0, String p1, Throwable p2, int p3){}
public void log(Target p0, String p1, int p2){}
public void log(Task p0, String p1, Throwable p2, int p3){}
public void log(Task p0, String p1, int p2){}
public void registerThreadTask(Thread p0, Task p1){}
public void removeBuildListener(BuildListener p0){}
public void setBaseDir(File p0){}
public void setBasedir(String p0){}
public void setCoreLoader(ClassLoader p0){}
public void setDefault(String p0){}
public void setDefaultInputStream(InputStream p0){}
public void setDefaultTarget(String p0){}
public void setDescription(String p0){}
public void setExecutor(Executor p0){}
public void setFileLastModified(File p0, long p1){}
public void setInheritedProperty(String p0, String p1){}
public void setInputHandler(InputHandler p0){}
public void setJavaVersionProperty(){}
public void setKeepGoingMode(boolean p0){}
public void setName(String p0){}
public void setNewProperty(String p0, String p1){}
public void setProperty(String p0, String p1){}
public void setSystemProperties(){}
public void setUserProperty(String p0, String p1){}
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from org.apache.tools.ant.ProjectComponent for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.Location;
import org.apache.tools.ant.Project;
abstract public class ProjectComponent implements Cloneable
{
protected Location location = null;
protected Project project = null;
protected String description = null;
public Location getLocation(){ return null; }
public Object clone(){ return null; }
public Project getProject(){ return null; }
public ProjectComponent(){}
public String getDescription(){ return null; }
public void log(String p0){}
public void log(String p0, int p1){}
public void setDescription(String p0){}
public void setLocation(Location p0){}
public void setProject(Project p0){}
}

View File

@@ -0,0 +1,39 @@
// Generated automatically from org.apache.tools.ant.RuntimeConfigurable for testing purposes
package org.apache.tools.ant;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Hashtable;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.UnknownElement;
import org.xml.sax.AttributeList;
public class RuntimeConfigurable implements Serializable
{
protected RuntimeConfigurable() {}
public AttributeList getAttributes(){ return null; }
public Enumeration<RuntimeConfigurable> getChildren(){ return null; }
public Hashtable<String, Object> getAttributeMap(){ return null; }
public Object getProxy(){ return null; }
public RuntimeConfigurable(Object p0, String p1){}
public String getElementTag(){ return null; }
public String getId(){ return null; }
public String getPolyType(){ return null; }
public StringBuffer getText(){ return null; }
public boolean isEnabled(UnknownElement p0){ return false; }
public void addChild(RuntimeConfigurable p0){}
public void addText(String p0){}
public void addText(char[] p0, int p1, int p2){}
public void applyPreSet(RuntimeConfigurable p0){}
public void maybeConfigure(Project p0){}
public void maybeConfigure(Project p0, boolean p1){}
public void reconfigure(Project p0){}
public void removeAttribute(String p0){}
public void setAttribute(String p0, Object p1){}
public void setAttribute(String p0, String p1){}
public void setAttributes(AttributeList p0){}
public void setElementTag(String p0){}
public void setPolyType(String p0){}
public void setProxy(Object p0){}
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from org.apache.tools.ant.SubBuildListener for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildListener;
public interface SubBuildListener extends BuildListener
{
void subBuildFinished(BuildEvent p0);
void subBuildStarted(BuildEvent p0);
}

View File

@@ -0,0 +1,43 @@
// Generated automatically from org.apache.tools.ant.Target for testing purposes
package org.apache.tools.ant;
import java.util.Enumeration;
import java.util.List;
import org.apache.tools.ant.Location;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.taskdefs.condition.Condition;
public class Target implements TaskContainer
{
public Enumeration<String> getDependencies(){ return null; }
public Location getLocation(){ return null; }
public Project getProject(){ return null; }
public String getDescription(){ return null; }
public String getIf(){ return null; }
public String getName(){ return null; }
public String getUnless(){ return null; }
public String toString(){ return null; }
public Target(){}
public Target(Target p0){}
public Task[] getTasks(){ return null; }
public boolean dependsOn(String p0){ return false; }
public final void performTasks(){}
public static List<String> parseDepends(String p0, String p1, String p2){ return null; }
public void addDataType(RuntimeConfigurable p0){}
public void addDependency(String p0){}
public void addTask(Task p0){}
public void execute(){}
public void setDepends(String p0){}
public void setDescription(String p0){}
public void setIf(Condition p0){}
public void setIf(String p0){}
public void setLocation(Location p0){}
public void setName(String p0){}
public void setProject(Project p0){}
public void setUnless(Condition p0){}
public void setUnless(String p0){}
}

View File

@@ -0,0 +1,41 @@
// Generated automatically from org.apache.tools.ant.Task for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.Target;
abstract public class Task extends ProjectComponent
{
protected RuntimeConfigurable getWrapper(){ return null; }
protected RuntimeConfigurable wrapper = null;
protected String taskName = null;
protected String taskType = null;
protected Target target = null;
protected final boolean isInvalid(){ return false; }
protected int handleInput(byte[] p0, int p1, int p2){ return 0; }
protected void handleErrorFlush(String p0){}
protected void handleErrorOutput(String p0){}
protected void handleFlush(String p0){}
protected void handleOutput(String p0){}
public RuntimeConfigurable getRuntimeConfigurableWrapper(){ return null; }
public String getTaskName(){ return null; }
public String getTaskType(){ return null; }
public Target getOwningTarget(){ return null; }
public Task(){}
public final void bindToOwner(Task p0){}
public final void perform(){}
public void execute(){}
public void init(){}
public void log(String p0){}
public void log(String p0, Throwable p1, int p2){}
public void log(String p0, int p1){}
public void log(Throwable p0, int p1){}
public void maybeConfigure(){}
public void reconfigure(){}
public void setOwningTarget(Target p0){}
public void setRuntimeConfigurableWrapper(RuntimeConfigurable p0){}
public void setTaskName(String p0){}
public void setTaskType(String p0){}
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from org.apache.tools.ant.TaskContainer for testing purposes
package org.apache.tools.ant;
import org.apache.tools.ant.Task;
public interface TaskContainer
{
void addTask(Task p0);
}

View File

@@ -0,0 +1,43 @@
// Generated automatically from org.apache.tools.ant.UnknownElement for testing purposes
package org.apache.tools.ant;
import java.util.List;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.Task;
public class UnknownElement extends Task
{
protected UnknownElement() {}
protected BuildException getNotFoundException(String p0, String p1){ return null; }
protected Object makeObject(UnknownElement p0, RuntimeConfigurable p1){ return null; }
protected String getComponentName(){ return null; }
protected Task makeTask(UnknownElement p0, RuntimeConfigurable p1){ return null; }
protected int handleInput(byte[] p0, int p1, int p2){ return 0; }
protected void handleChildren(Object p0, RuntimeConfigurable p1){}
protected void handleErrorFlush(String p0){}
protected void handleErrorOutput(String p0){}
protected void handleFlush(String p0){}
protected void handleOutput(String p0){}
public List<UnknownElement> getChildren(){ return null; }
public Object getRealThing(){ return null; }
public RuntimeConfigurable getWrapper(){ return null; }
public String getNamespace(){ return null; }
public String getQName(){ return null; }
public String getTag(){ return null; }
public String getTaskName(){ return null; }
public Task getTask(){ return null; }
public UnknownElement copy(Project p0){ return null; }
public UnknownElement(String p0){}
public boolean similar(Object p0){ return false; }
public void addChild(UnknownElement p0){}
public void applyPreSet(UnknownElement p0){}
public void configure(Object p0){}
public void execute(){}
public void maybeConfigure(){}
public void setNamespace(String p0){}
public void setQName(String p0){}
public void setRealThing(Object p0){}
}

View File

@@ -0,0 +1,45 @@
// Generated automatically from org.apache.tools.ant.filters.BaseFilterReader for testing purposes
package org.apache.tools.ant.filters;
import java.io.FilterReader;
import java.io.Reader;
import org.apache.tools.ant.Project;
abstract public class BaseFilterReader extends FilterReader {
protected final Project getProject() {
return null;
}
protected final String readFully() {
return null;
}
protected final String readLine() {
return null;
}
protected final boolean getInitialized() {
return false;
}
protected final void setInitialized(boolean p0) {}
public BaseFilterReader() {
super(null);
}
public BaseFilterReader(Reader p0) {
super(null);
}
public final int read(char[] p0, int p1, int p2) {
return 0;
}
public final long skip(long p0) {
return 0;
}
public final void setProject(Project p0) {}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from org.apache.tools.ant.filters.BaseParamFilterReader for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseFilterReader;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Parameterizable;
abstract public class BaseParamFilterReader extends BaseFilterReader implements Parameterizable
{
protected final Parameter[] getParameters(){ return null; }
public BaseParamFilterReader(){}
public BaseParamFilterReader(Reader p0){}
public final void setParameters(Parameter... p0){}
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from org.apache.tools.ant.filters.ChainableReader for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
public interface ChainableReader
{
Reader chain(Reader p0);
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from org.apache.tools.ant.filters.ClassConstants for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class ClassConstants extends BaseFilterReader implements ChainableReader
{
public ClassConstants(){}
public ClassConstants(Reader p0){}
public Reader chain(Reader p0){ return null; }
public int read(){ return 0; }
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from org.apache.tools.ant.filters.EscapeUnicode for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class EscapeUnicode extends BaseParamFilterReader implements ChainableReader
{
public EscapeUnicode(){}
public EscapeUnicode(Reader p0){}
public final Reader chain(Reader p0){ return null; }
public final int read(){ return 0; }
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from org.apache.tools.ant.filters.ExpandProperties for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
import org.apache.tools.ant.types.PropertySet;
public class ExpandProperties extends BaseFilterReader implements ChainableReader
{
public ExpandProperties(){}
public ExpandProperties(Reader p0){}
public Reader chain(Reader p0){ return null; }
public int read(){ return 0; }
public void add(PropertySet p0){}
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from org.apache.tools.ant.filters.HeadFilter for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class HeadFilter extends BaseParamFilterReader implements ChainableReader
{
public HeadFilter(){}
public HeadFilter(Reader p0){}
public Reader chain(Reader p0){ return null; }
public int read(){ return 0; }
public void setLines(long p0){}
public void setSkip(long p0){}
}

View File

@@ -0,0 +1,26 @@
// Generated automatically from org.apache.tools.ant.filters.LineContains for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class LineContains extends BaseParamFilterReader implements ChainableReader
{
public LineContains(){}
public LineContains(Reader p0){}
public Reader chain(Reader p0){ return null; }
public boolean isMatchAny(){ return false; }
public boolean isNegated(){ return false; }
public int read(){ return 0; }
public void addConfiguredContains(LineContains.Contains p0){}
public void setMatchAny(boolean p0){}
public void setNegate(boolean p0){}
static public class Contains
{
public Contains(){}
public final String getValue(){ return null; }
public final void setValue(String p0){}
}
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from org.apache.tools.ant.filters.LineContainsRegExp for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
import org.apache.tools.ant.types.RegularExpression;
public class LineContainsRegExp extends BaseParamFilterReader implements ChainableReader
{
public LineContainsRegExp(){}
public LineContainsRegExp(Reader p0){}
public Reader chain(Reader p0){ return null; }
public boolean isNegated(){ return false; }
public int read(){ return 0; }
public void addConfiguredRegexp(RegularExpression p0){}
public void setCaseSensitive(boolean p0){}
public void setNegate(boolean p0){}
public void setRegexp(String p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from org.apache.tools.ant.filters.PrefixLines for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class PrefixLines extends BaseParamFilterReader implements ChainableReader
{
public PrefixLines(){}
public PrefixLines(Reader p0){}
public Reader chain(Reader p0){ return null; }
public int read(){ return 0; }
public void setPrefix(String p0){}
}

View File

@@ -0,0 +1,28 @@
// Generated automatically from org.apache.tools.ant.filters.ReplaceTokens for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
import org.apache.tools.ant.types.Resource;
public class ReplaceTokens extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public ReplaceTokens(){}
public ReplaceTokens(Reader p0){}
public int read(){ return 0; }
public void addConfiguredToken(ReplaceTokens.Token p0){}
public void setBeginToken(String p0){}
public void setEndToken(String p0){}
public void setPropertiesResource(Resource p0){}
static public class Token
{
public Token(){}
public final String getKey(){ return null; }
public final String getValue(){ return null; }
public final void setKey(String p0){}
public final void setValue(String p0){}
}
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from org.apache.tools.ant.filters.StripJavaComments for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class StripJavaComments extends BaseFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public StripJavaComments(){}
public StripJavaComments(Reader p0){}
public int read(){ return 0; }
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from org.apache.tools.ant.filters.StripLineBreaks for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class StripLineBreaks extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public StripLineBreaks(){}
public StripLineBreaks(Reader p0){}
public int read(){ return 0; }
public void setLineBreaks(String p0){}
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from org.apache.tools.ant.filters.StripLineComments for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class StripLineComments extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public StripLineComments(){}
public StripLineComments(Reader p0){}
public int read(){ return 0; }
public void addConfiguredComment(StripLineComments.Comment p0){}
static public class Comment
{
public Comment(){}
public final String getValue(){ return null; }
public final void setValue(String p0){}
public void addText(String p0){}
}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from org.apache.tools.ant.filters.SuffixLines for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class SuffixLines extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public SuffixLines(){}
public SuffixLines(Reader p0){}
public int read(){ return 0; }
public void setSuffix(String p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from org.apache.tools.ant.filters.TabsToSpaces for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class TabsToSpaces extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public TabsToSpaces(){}
public TabsToSpaces(Reader p0){}
public int read(){ return 0; }
public void setTablength(int p0){}
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from org.apache.tools.ant.filters.TailFilter for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.filters.BaseParamFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
public class TailFilter extends BaseParamFilterReader implements ChainableReader
{
public Reader chain(Reader p0){ return null; }
public TailFilter(){}
public TailFilter(Reader p0){}
public int read(){ return 0; }
public void setLines(long p0){}
public void setSkip(long p0){}
}

View File

@@ -0,0 +1,97 @@
// Generated automatically from org.apache.tools.ant.filters.TokenFilter for testing purposes
package org.apache.tools.ant.filters;
import java.io.Reader;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.filters.BaseFilterReader;
import org.apache.tools.ant.filters.ChainableReader;
import org.apache.tools.ant.util.LineTokenizer;
import org.apache.tools.ant.util.Tokenizer;
public class TokenFilter extends BaseFilterReader implements ChainableReader
{
abstract static public class ChainableReaderFilter extends ProjectComponent implements ChainableReader, TokenFilter.Filter
{
public ChainableReaderFilter(){}
public Reader chain(Reader p0){ return null; }
public void setByLine(boolean p0){}
}
public TokenFilter(){}
public TokenFilter(Reader p0){}
public final Reader chain(Reader p0){ return null; }
public int read(){ return 0; }
public static String resolveBackSlash(String p0){ return null; }
public static int convertRegexOptions(String p0){ return 0; }
public void add(TokenFilter.Filter p0){}
public void add(Tokenizer p0){}
public void addContainsRegex(TokenFilter.ContainsRegex p0){}
public void addContainsString(TokenFilter.ContainsString p0){}
public void addDeleteCharacters(TokenFilter.DeleteCharacters p0){}
public void addFileTokenizer(TokenFilter.FileTokenizer p0){}
public void addIgnoreBlank(TokenFilter.IgnoreBlank p0){}
public void addLineTokenizer(LineTokenizer p0){}
public void addReplaceRegex(TokenFilter.ReplaceRegex p0){}
public void addReplaceString(TokenFilter.ReplaceString p0){}
public void addStringTokenizer(TokenFilter.StringTokenizer p0){}
public void addTrim(TokenFilter.Trim p0){}
public void setDelimOutput(String p0){}
static public class ContainsRegex extends TokenFilter.ChainableReaderFilter
{
public ContainsRegex(){}
public String filter(String p0){ return null; }
public void setFlags(String p0){}
public void setPattern(String p0){}
public void setReplace(String p0){}
}
static public class ContainsString extends ProjectComponent implements TokenFilter.Filter
{
public ContainsString(){}
public String filter(String p0){ return null; }
public void setContains(String p0){}
}
static public class DeleteCharacters extends ProjectComponent implements ChainableReader, TokenFilter.Filter
{
public DeleteCharacters(){}
public Reader chain(Reader p0){ return null; }
public String filter(String p0){ return null; }
public void setChars(String p0){}
}
static public class FileTokenizer extends org.apache.tools.ant.util.FileTokenizer
{
public FileTokenizer(){}
}
static public class IgnoreBlank extends TokenFilter.ChainableReaderFilter
{
public IgnoreBlank(){}
public String filter(String p0){ return null; }
}
static public class ReplaceRegex extends TokenFilter.ChainableReaderFilter
{
public ReplaceRegex(){}
public String filter(String p0){ return null; }
public void setFlags(String p0){}
public void setPattern(String p0){}
public void setReplace(String p0){}
}
static public class ReplaceString extends TokenFilter.ChainableReaderFilter
{
public ReplaceString(){}
public String filter(String p0){ return null; }
public void setFrom(String p0){}
public void setTo(String p0){}
}
static public class StringTokenizer extends org.apache.tools.ant.util.StringTokenizer
{
public StringTokenizer(){}
}
static public class Trim extends TokenFilter.ChainableReaderFilter
{
public String filter(String p0){ return null; }
public Trim(){}
}
static public interface Filter
{
String filter(String p0);
}
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from org.apache.tools.ant.input.InputHandler for testing purposes
package org.apache.tools.ant.input;
import org.apache.tools.ant.input.InputRequest;
public interface InputHandler
{
void handleInput(InputRequest p0);
}

Some files were not shown because too many files have changed in this diff Show More