diff --git a/.bazelrc b/.bazelrc index a304a7b0e1a..214258e775a 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,3 +1,9 @@ -build --repo_env=CC=clang --repo_env=CXX=clang++ --cxxopt="-std=c++17" +common --enable_platform_specific_config + +build --repo_env=CC=clang --repo_env=CXX=clang++ + +build:linux --cxxopt=-std=c++20 +build:macos --cxxopt=-std=c++20 --cpu=darwin_x86_64 +build:windows --cxxopt=/std:c++20 --cxxopt=/Zc:preprocessor try-import %workspace%/local.bazelrc diff --git a/.github/workflows/check-implicit-this.yml b/.github/workflows/check-implicit-this.yml new file mode 100644 index 00000000000..8711d7955bc --- /dev/null +++ b/.github/workflows/check-implicit-this.yml @@ -0,0 +1,29 @@ +name: "Check implicit this warnings" + +on: + workflow_dispatch: + pull_request: + paths: + - "**qlpack.yml" + branches: + - main + - "rc/*" + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Check that implicit this warnings is enabled for all packs + shell: bash + run: | + EXIT_CODE=0 + packs="$(find . -iname 'qlpack.yml')" + for pack_file in ${packs}; do + option="$(yq '.warnOnImplicitThis' ${pack_file})" + if [ "${option}" != "true" ]; then + echo "::error file=${pack_file}::warnOnImplicitThis property must be set to 'true' for pack ${pack_file}" + EXIT_CODE=1 + fi + done + exit "${EXIT_CODE}" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bb25a64ebfb..1a2ed103df6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,9 +5,9 @@ repos: rev: v3.2.0 hooks: - id: trailing-whitespace - exclude: /test/.*$(? { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 9b4e0e6a4f9..b380748fb3c 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -205,6 +205,8 @@ predicate clearsContent(Node n, Content c) { */ predicate expectsContent(Node n, ContentSet c) { none() } +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { none() } + /** Gets the type of `n` used for type pruning. */ Type getNodeType(Node n) { suppressUnusedNode(n) and @@ -233,6 +235,12 @@ class CastNode extends Node { CastNode() { none() } // stub implementation } +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { none() } + class DataFlowCallable = Function; class DataFlowExpr = Expr; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index ddf98ac0f2f..410543e0fc9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -460,7 +460,6 @@ module Impl { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index cc8d0cdbe94..a9260c5feb3 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -193,86 +193,89 @@ private class SingleUseOperandNode0 extends OperandNode0, TSingleUseOperandNode0 SingleUseOperandNode0() { this = TSingleUseOperandNode0(op) } } -/** - * INTERNAL: Do not use. - * - * A node that represents the indirect value of an operand in the IR - * after `index` number of loads. - * - * Note: Unlike `RawIndirectOperand`, a value of type `IndirectOperand` may - * be an `OperandNode`. - */ -class IndirectOperand extends Node { - Operand operand; - int indirectionIndex; - - IndirectOperand() { - this.(RawIndirectOperand).getOperand() = operand and - this.(RawIndirectOperand).getIndirectionIndex() = indirectionIndex - or - nodeHasOperand(this, Ssa::getIRRepresentationOfIndirectOperand(operand, indirectionIndex), - indirectionIndex - 1) +private module IndirectOperands { + /** + * INTERNAL: Do not use. + * + * A node that represents the indirect value of an operand in the IR + * after `index` number of loads. + * + * Note: Unlike `RawIndirectOperand`, a value of type `IndirectOperand` may + * be an `OperandNode`. + */ + abstract class IndirectOperand extends Node { + /** Gets the underlying operand and the underlying indirection index. */ + abstract predicate hasOperandAndIndirectionIndex(Operand operand, int indirectionIndex); } - /** Gets the underlying operand. */ - Operand getOperand() { result = operand } + private class IndirectOperandFromRaw extends IndirectOperand instanceof RawIndirectOperand { + override predicate hasOperandAndIndirectionIndex(Operand operand, int indirectionIndex) { + operand = RawIndirectOperand.super.getOperand() and + indirectionIndex = RawIndirectOperand.super.getIndirectionIndex() + } + } - /** Gets the underlying indirection index. */ - int getIndirectionIndex() { result = indirectionIndex } + private class IndirectOperandFromIRRepr extends IndirectOperand { + Operand operand; + int indirectionIndex; - /** - * Holds if this `IndirectOperand` is represented directly in the IR instead of - * a `RawIndirectionOperand` with operand `op` and indirection index `index`. - */ - predicate isIRRepresentationOf(Operand op, int index) { - this instanceof OperandNode and - ( - op = operand and - index = indirectionIndex - ) + IndirectOperandFromIRRepr() { + exists(Operand repr | + repr = Ssa::getIRRepresentationOfIndirectOperand(operand, indirectionIndex) and + nodeHasOperand(this, repr, indirectionIndex - 1) + ) + } + + override predicate hasOperandAndIndirectionIndex(Operand op, int index) { + op = operand and index = indirectionIndex + } } } -/** - * INTERNAL: Do not use. - * - * A node that represents the indirect value of an instruction in the IR - * after `index` number of loads. - * - * Note: Unlike `RawIndirectInstruction`, a value of type `IndirectInstruction` may - * be an `InstructionNode`. - */ -class IndirectInstruction extends Node { - Instruction instr; - int indirectionIndex; +import IndirectOperands - IndirectInstruction() { - this.(RawIndirectInstruction).getInstruction() = instr and - this.(RawIndirectInstruction).getIndirectionIndex() = indirectionIndex - or - nodeHasInstruction(this, Ssa::getIRRepresentationOfIndirectInstruction(instr, indirectionIndex), - indirectionIndex - 1) +private module IndirectInstructions { + /** + * INTERNAL: Do not use. + * + * A node that represents the indirect value of an instruction in the IR + * after `index` number of loads. + * + * Note: Unlike `RawIndirectInstruction`, a value of type `IndirectInstruction` may + * be an `InstructionNode`. + */ + abstract class IndirectInstruction extends Node { + /** Gets the underlying operand and the underlying indirection index. */ + abstract predicate hasInstructionAndIndirectionIndex(Instruction instr, int index); } - /** Gets the underlying instruction. */ - Instruction getInstruction() { result = instr } + private class IndirectInstructionFromRaw extends IndirectInstruction instanceof RawIndirectInstruction + { + override predicate hasInstructionAndIndirectionIndex(Instruction instr, int index) { + instr = RawIndirectInstruction.super.getInstruction() and + index = RawIndirectInstruction.super.getIndirectionIndex() + } + } - /** Gets the underlying indirection index. */ - int getIndirectionIndex() { result = indirectionIndex } + private class IndirectInstructionFromIRRepr extends IndirectInstruction { + Instruction instr; + int indirectionIndex; - /** - * Holds if this `IndirectInstruction` is represented directly in the IR instead of - * a `RawIndirectionInstruction` with instruction `i` and indirection index `index`. - */ - predicate isIRRepresentationOf(Instruction i, int index) { - this instanceof InstructionNode and - ( - i = instr and - index = indirectionIndex - ) + IndirectInstructionFromIRRepr() { + exists(Instruction repr | + repr = Ssa::getIRRepresentationOfIndirectInstruction(instr, indirectionIndex) and + nodeHasInstruction(this, repr, indirectionIndex - 1) + ) + } + + override predicate hasInstructionAndIndirectionIndex(Instruction i, int index) { + i = instr and index = indirectionIndex + } } } +import IndirectInstructions + /** Gets the callable in which this node occurs. */ DataFlowCallable nodeGetEnclosingCallable(Node n) { result = n.getEnclosingCallable() } @@ -318,9 +321,11 @@ private class PrimaryArgumentNode extends ArgumentNode, OperandNode { private class SideEffectArgumentNode extends ArgumentNode, SideEffectOperandNode { override predicate argumentOf(DataFlowCall dfCall, ArgumentPosition pos) { - this.getCallInstruction() = dfCall and - pos.(IndirectionPosition).getArgumentIndex() = this.getArgumentIndex() and - pos.(IndirectionPosition).getIndirectionIndex() = super.getIndirectionIndex() + exists(int indirectionIndex | + pos = TIndirectionPosition(argumentIndex, pragma[only_bind_into](indirectionIndex)) and + this.getCallInstruction() = dfCall and + super.hasAddressOperandAndIndirectionIndex(_, pragma[only_bind_into](indirectionIndex)) + ) } } @@ -648,13 +653,16 @@ predicate jumpStep(Node n1, Node n2) { * Holds if data can flow from `node1` to `node2` via an assignment to `f`. * Thus, `node2` references an object with a field `f` that contains the * value of `node1`. + * + * The boolean `certain` is true if the destination address does not involve + * any pointer arithmetic, and false otherwise. */ -predicate storeStep(Node node1, Content c, PostFieldUpdateNode node2) { +predicate storeStepImpl(Node node1, Content c, PostFieldUpdateNode node2, boolean certain) { exists(int indirectionIndex1, int numberOfLoads, StoreInstruction store | nodeHasInstruction(node1, store, pragma[only_bind_into](indirectionIndex1)) and node2.getIndirectionIndex() = 1 and numberOfLoadsFromOperand(node2.getFieldAddress(), store.getDestinationAddressOperand(), - numberOfLoads) + numberOfLoads, certain) | exists(FieldContent fc | fc = c | fc.getField() = node2.getUpdatedField() and @@ -668,21 +676,34 @@ predicate storeStep(Node node1, Content c, PostFieldUpdateNode node2) { ) } +/** + * Holds if data can flow from `node1` to `node2` via an assignment to `f`. + * Thus, `node2` references an object with a field `f` that contains the + * value of `node1`. + */ +predicate storeStep(Node node1, Content c, PostFieldUpdateNode node2) { + storeStepImpl(node1, c, node2, _) +} + /** * Holds if `operandFrom` flows to `operandTo` using a sequence of conversion-like * operations and exactly `n` `LoadInstruction` operations. */ -private predicate numberOfLoadsFromOperandRec(Operand operandFrom, Operand operandTo, int ind) { +private predicate numberOfLoadsFromOperandRec( + Operand operandFrom, Operand operandTo, int ind, boolean certain +) { exists(Instruction load | Ssa::isDereference(load, operandFrom) | - operandTo = operandFrom and ind = 0 + operandTo = operandFrom and ind = 0 and certain = true or - numberOfLoadsFromOperand(load.getAUse(), operandTo, ind - 1) + numberOfLoadsFromOperand(load.getAUse(), operandTo, ind - 1, certain) ) or - exists(Operand op, Instruction instr | + exists(Operand op, Instruction instr, boolean isPointerArith, boolean certain0 | instr = op.getDef() and - conversionFlow(operandFrom, instr, _, _) and - numberOfLoadsFromOperand(op, operandTo, ind) + conversionFlow(operandFrom, instr, isPointerArith, _) and + numberOfLoadsFromOperand(op, operandTo, ind, certain0) + | + if isPointerArith = true then certain = false else certain = certain0 ) } @@ -690,13 +711,16 @@ private predicate numberOfLoadsFromOperandRec(Operand operandFrom, Operand opera * Holds if `operandFrom` flows to `operandTo` using a sequence of conversion-like * operations and exactly `n` `LoadInstruction` operations. */ -private predicate numberOfLoadsFromOperand(Operand operandFrom, Operand operandTo, int n) { - numberOfLoadsFromOperandRec(operandFrom, operandTo, n) +private predicate numberOfLoadsFromOperand( + Operand operandFrom, Operand operandTo, int n, boolean certain +) { + numberOfLoadsFromOperandRec(operandFrom, operandTo, n, certain) or not Ssa::isDereference(_, operandFrom) and not conversionFlow(operandFrom, _, _, _) and operandFrom = operandTo and - n = 0 + n = 0 and + certain = true } // Needed to join on both an operand and an index at the same time. @@ -726,7 +750,7 @@ predicate readStep(Node node1, Content c, Node node2) { // The `1` here matches the `node2.getIndirectionIndex() = 1` conjunct // in `storeStep`. nodeHasOperand(node1, fa1.getObjectAddressOperand(), 1) and - numberOfLoadsFromOperand(fa1, operand, numberOfLoads) + numberOfLoadsFromOperand(fa1, operand, numberOfLoads, _) | exists(FieldContent fc | fc = c | fc.getField() = fa1.getField() and @@ -744,7 +768,33 @@ predicate readStep(Node node1, Content c, Node node2) { * Holds if values stored inside content `c` are cleared at node `n`. */ predicate clearsContent(Node n, Content c) { - none() // stub implementation + n = + any(PostUpdateNode pun, Content d | d.impliesClearOf(c) and storeStepImpl(_, d, pun, true) | pun) + .getPreUpdateNode() and + ( + // The crement operations and pointer addition and subtraction self-assign. We do not + // want to clear the contents if it is indirectly pointed at by any of these operations, + // as part of the contents might still be accessible afterwards. If there is no such + // indirection clearing the contents is safe. + not exists(Operand op, Cpp::Operation p | + n.(IndirectOperand).hasOperandAndIndirectionIndex(op, _) and + ( + p instanceof Cpp::AssignPointerAddExpr or + p instanceof Cpp::AssignPointerSubExpr or + p instanceof Cpp::CrementOperation + ) + | + p.getAnOperand() = op.getUse().getAst() + ) + or + forex(PostUpdateNode pun, Content d | + pragma[only_bind_into](d).impliesClearOf(pragma[only_bind_into](c)) and + storeStepImpl(_, d, pun, true) and + pun.getPreUpdateNode() = n + | + c.getIndirectionIndex() = d.getIndirectionIndex() + ) + ) } /** @@ -753,6 +803,8 @@ predicate clearsContent(Node n, Content c) { */ predicate expectsContent(Node n, ContentSet c) { none() } +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { none() } + /** Gets the type of `n` used for type pruning. */ DataFlowType getNodeType(Node n) { suppressUnusedNode(n) and @@ -781,6 +833,12 @@ class CastNode extends Node { CastNode() { none() } // stub implementation } +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { none() } + /** * A function that may contain code or a variable that may contain itself. When * flow crosses from one _enclosing callable_ to another, the interprocedural @@ -798,7 +856,73 @@ class DataFlowCall extends CallInstruction { Function getEnclosingCallable() { result = this.getEnclosingFunction() } } -predicate isUnreachableInCall(Node n, DataFlowCall call) { none() } // stub implementation +module IsUnreachableInCall { + private import semmle.code.cpp.ir.ValueNumbering + private import semmle.code.cpp.controlflow.IRGuards as G + + private class ConstantIntegralTypeArgumentNode extends PrimaryArgumentNode { + int value; + + ConstantIntegralTypeArgumentNode() { + value = op.getDef().(IntegerConstantInstruction).getValue().toInt() + } + + int getValue() { result = value } + } + + pragma[nomagic] + private predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { + any(G::IRGuardCondition guard).ensuresEq(left, right, k, block, areEqual) + } + + pragma[nomagic] + private predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { + any(G::IRGuardCondition guard).ensuresLt(left, right, k, block, areEqual) + } + + predicate isUnreachableInCall(Node n, DataFlowCall call) { + exists( + DirectParameterNode paramNode, ConstantIntegralTypeArgumentNode arg, + IntegerConstantInstruction constant, int k, Operand left, Operand right, IRBlock block + | + // arg flows into `paramNode` + DataFlowImplCommon::viableParamArg(call, paramNode, arg) and + left = constant.getAUse() and + right = valueNumber(paramNode.getInstruction()).getAUse() and + block = n.getBasicBlock() + | + // and there's a guard condition which ensures that the result of `left == right + k` is `areEqual` + exists(boolean areEqual | + ensuresEq(pragma[only_bind_into](left), pragma[only_bind_into](right), + pragma[only_bind_into](k), pragma[only_bind_into](block), areEqual) + | + // this block ensures that left = right + k, but it holds that `left != right + k` + areEqual = true and + constant.getValue().toInt() != arg.getValue() + k + or + // this block ensures that or `left != right + k`, but it holds that `left = right + k` + areEqual = false and + constant.getValue().toInt() = arg.getValue() + k + ) + or + // or there's a guard condition which ensures that the result of `left < right + k` is `isLessThan` + exists(boolean isLessThan | + ensuresLt(pragma[only_bind_into](left), pragma[only_bind_into](right), + pragma[only_bind_into](k), pragma[only_bind_into](block), isLessThan) + | + isLessThan = true and + // this block ensures that `left < right + k`, but it holds that `left >= right + k` + constant.getValue().toInt() >= arg.getValue() + k + or + // this block ensures that `left >= right + k`, but it holds that `left < right + k` + isLessThan = false and + constant.getValue().toInt() < arg.getValue() + k + ) + ) + } +} + +import IsUnreachableInCall int accessPathLimit() { result = 5 } @@ -837,7 +961,7 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves * One example would be to allow flow like `p.foo = p.bar;`, which is disallowed * by default as a heuristic. */ -predicate allowParameterReturnInSelf(ParameterNode p) { none() } +predicate allowParameterReturnInSelf(ParameterNode p) { p instanceof IndirectParameterNode } private predicate fieldHasApproxName(Field f, string s) { s = f.getName().charAt(0) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 9a3fd679f23..209d0246832 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -274,7 +274,7 @@ class Node extends TIRDataFlowNode { * represents the value of `**x` going into `f`. */ Expr asIndirectArgument(int index) { - this.(SideEffectOperandNode).getIndirectionIndex() = index and + this.(SideEffectOperandNode).hasAddressOperandAndIndirectionIndex(_, index) and result = this.(SideEffectOperandNode).getArgument() } @@ -317,7 +317,7 @@ class Node extends TIRDataFlowNode { index = 0 and result = this.(ExplicitParameterNode).getParameter() or - this.(IndirectParameterNode).getIndirectionIndex() = index and + this.(IndirectParameterNode).hasInstructionAndIndirectionIndex(_, index) and result = this.(IndirectParameterNode).getParameter() } @@ -577,15 +577,20 @@ class SsaPhiNode extends Node, TSsaPhiNode { * * A node representing a value after leaving a function. */ -class SideEffectOperandNode extends Node, IndirectOperand { +class SideEffectOperandNode extends Node instanceof IndirectOperand { CallInstruction call; int argumentIndex; - SideEffectOperandNode() { operand = call.getArgumentOperand(argumentIndex) } + SideEffectOperandNode() { + IndirectOperand.super.hasOperandAndIndirectionIndex(call.getArgumentOperand(argumentIndex), _) + } CallInstruction getCallInstruction() { result = call } - Operand getAddressOperand() { result = operand } + /** Gets the underlying operand and the underlying indirection index. */ + predicate hasAddressOperandAndIndirectionIndex(Operand operand, int indirectionIndex) { + IndirectOperand.super.hasOperandAndIndirectionIndex(operand, indirectionIndex) + } int getArgumentIndex() { result = argumentIndex } @@ -665,10 +670,10 @@ class InitialGlobalValue extends Node, TInitialGlobalValue { * * A node representing an indirection of a parameter. */ -class IndirectParameterNode extends Node, IndirectInstruction { +class IndirectParameterNode extends Node instanceof IndirectInstruction { InitializeParameterInstruction init; - IndirectParameterNode() { this.getInstruction() = init } + IndirectParameterNode() { IndirectInstruction.super.hasInstructionAndIndirectionIndex(init, _) } int getArgumentIndex() { init.hasIndex(result) } @@ -677,7 +682,12 @@ class IndirectParameterNode extends Node, IndirectInstruction { override Declaration getEnclosingCallable() { result = this.getFunction() } - override Declaration getFunction() { result = this.getInstruction().getEnclosingFunction() } + override Declaration getFunction() { result = init.getEnclosingFunction() } + + /** Gets the underlying operand and the underlying indirection index. */ + predicate hasInstructionAndIndirectionIndex(Instruction instr, int index) { + IndirectInstruction.super.hasInstructionAndIndirectionIndex(instr, index) + } override Location getLocationImpl() { result = this.getParameter().getLocation() } @@ -699,7 +709,8 @@ class IndirectReturnNode extends Node { IndirectReturnNode() { this instanceof FinalParameterNode or - this.(IndirectOperand).getOperand() = any(ReturnValueInstruction ret).getReturnAddressOperand() + this.(IndirectOperand) + .hasOperandAndIndirectionIndex(any(ReturnValueInstruction ret).getReturnAddressOperand(), _) } override Declaration getEnclosingCallable() { result = this.getFunction() } @@ -722,7 +733,7 @@ class IndirectReturnNode extends Node { int getIndirectionIndex() { result = this.(FinalParameterNode).getIndirectionIndex() or - result = this.(IndirectOperand).getIndirectionIndex() + this.(IndirectOperand).hasOperandAndIndirectionIndex(_, result) } } @@ -1106,7 +1117,8 @@ predicate exprNodeShouldBeInstruction(Node node, Expr e) { /** Holds if `node` should be an `IndirectInstruction` that maps `node.asIndirectExpr()` to `e`. */ predicate indirectExprNodeShouldBeIndirectInstruction(IndirectInstruction node, Expr e) { exists(Instruction instr | - instr = node.getInstruction() and not indirectExprNodeShouldBeIndirectOperand(_, e) + node.hasInstructionAndIndirectionIndex(instr, _) and + not indirectExprNodeShouldBeIndirectOperand(_, e) | e = instr.(VariableAddressInstruction).getAst().(Expr).getFullyConverted() or @@ -1307,8 +1319,8 @@ pragma[noinline] private predicate indirectParameterNodeHasArgumentIndexAndIndex( IndirectParameterNode node, int argumentIndex, int indirectionIndex ) { - node.getArgumentIndex() = argumentIndex and - node.getIndirectionIndex() = indirectionIndex + node.hasInstructionAndIndirectionIndex(_, indirectionIndex) and + node.getArgumentIndex() = argumentIndex } /** A synthetic parameter to model the pointed-to object of a pointer parameter. */ @@ -1479,18 +1491,14 @@ VariableNode variableNode(Variable v) { */ Node uninitializedNode(LocalVariable v) { none() } -pragma[noinline] predicate hasOperandAndIndex(IndirectOperand indirectOperand, Operand operand, int indirectionIndex) { - indirectOperand.getOperand() = operand and - indirectOperand.getIndirectionIndex() = indirectionIndex + indirectOperand.hasOperandAndIndirectionIndex(operand, indirectionIndex) } -pragma[noinline] predicate hasInstructionAndIndex( IndirectInstruction indirectInstr, Instruction instr, int indirectionIndex ) { - indirectInstr.getInstruction() = instr and - indirectInstr.getIndirectionIndex() = indirectionIndex + indirectInstr.hasInstructionAndIndirectionIndex(instr, indirectionIndex) } cached @@ -1656,8 +1664,7 @@ module ExprFlowCached { private predicate isIndirectBaseOfArrayAccess(IndirectOperand n, Expr e) { exists(LoadInstruction load, PointerArithmeticInstruction pai | pai = load.getSourceAddress() and - pai.getLeftOperand() = n.getOperand() and - n.getIndirectionIndex() = 1 and + n.hasOperandAndIndirectionIndex(pai.getLeftOperand(), 1) and e = load.getConvertedResultExpression() ) } @@ -1825,6 +1832,20 @@ class Content extends TContent { predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0 } + + /** Gets the indirection index of this `Content`. */ + abstract int getIndirectionIndex(); + + /** + * INTERNAL: Do not use. + * + * Holds if a write to this `Content` implies that `c` is + * also cleared. + * + * For example, a write to a field `f` implies that any content of + * the form `*f` is also cleared. + */ + abstract predicate impliesClearOf(Content c); } /** A reference through a non-union instance field. */ @@ -1842,10 +1863,21 @@ class FieldContent extends Content, TFieldContent { Field getField() { result = f } + /** Gets the indirection index of this `FieldContent`. */ pragma[inline] - int getIndirectionIndex() { + override int getIndirectionIndex() { pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex) } + + override predicate impliesClearOf(Content c) { + exists(FieldContent fc | + fc = c and + fc.getField() = f and + // If `this` is `f` then `c` is cleared if it's of the + // form `*f`, `**f`, etc. + fc.getIndirectionIndex() >= indirectionIndex + ) + } } /** A reference through an instance field of a union. */ @@ -1870,9 +1902,21 @@ class UnionContent extends Content, TUnionContent { /** Gets the indirection index of this `UnionContent`. */ pragma[inline] - int getIndirectionIndex() { + override int getIndirectionIndex() { pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex) } + + override predicate impliesClearOf(Content c) { + exists(UnionContent uc | + uc = c and + uc.getUnion() = u and + // If `this` is `u` then `c` is cleared if it's of the + // form `*u`, `**u`, etc. (and we ignore `bytes` because + // we know the entire union is overwritten because it's a + // union). + uc.getIndirectionIndex() >= indirectionIndex + ) + } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRFieldFlowSteps.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRFieldFlowSteps.qll index f0286c00cbc..c0976f8c3e9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRFieldFlowSteps.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRFieldFlowSteps.qll @@ -13,7 +13,7 @@ class FieldFlowPropertyProvider extends IRPropertyProvider { override string getOperandProperty(Operand operand, string key) { exists(PostFieldUpdateNode pfun, Content content | key = "store " + content.toString() and - operand = pfun.getPreUpdateNode().(IndirectOperand).getOperand() and + pfun.getPreUpdateNode().(IndirectOperand).hasOperandAndIndirectionIndex(operand, _) and result = strictconcat(string element, Node node | storeStep(node, content, pfun) and @@ -25,7 +25,7 @@ class FieldFlowPropertyProvider extends IRPropertyProvider { or exists(Node node2, Content content | key = "read " + content.toString() and - operand = node2.(IndirectOperand).getOperand() and + node2.(IndirectOperand).hasOperandAndIndirectionIndex(operand, _) and result = strictconcat(string element, Node node1 | readStep(node1, content, node2) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll index 5c6cdebf800..5cca78588f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/PrintIRUtilities.qll @@ -18,9 +18,12 @@ private string stars(int k) { } string starsForNode(Node node) { - result = stars(node.(IndirectInstruction).getIndirectionIndex()) - or - result = stars(node.(IndirectOperand).getIndirectionIndex()) + exists(int indirectionIndex | + node.(IndirectInstruction).hasInstructionAndIndirectionIndex(_, indirectionIndex) or + node.(IndirectOperand).hasOperandAndIndirectionIndex(_, indirectionIndex) + | + result = stars(indirectionIndex) + ) or not node instanceof IndirectInstruction and not node instanceof IndirectOperand and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll index cb06245c568..ee34b9932b4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll @@ -192,13 +192,13 @@ module ProductFlow { * Holds if data flow through `node` is prohibited through the first projection of the product * dataflow graph when the flow state is `state`. */ - predicate isBarrier1(DataFlow::Node node, FlowState1 state); + default predicate isBarrier1(DataFlow::Node node, FlowState1 state) { none() } /** * Holds if data flow through `node` is prohibited through the second projection of the product * dataflow graph when the flow state is `state`. */ - predicate isBarrier2(DataFlow::Node node, FlowState2 state); + default predicate isBarrier2(DataFlow::Node node, FlowState2 state) { none() } /** * Holds if data flow through `node` is prohibited through the first projection of the product @@ -237,9 +237,11 @@ module ProductFlow { * * This step is only applicable in `state1` and updates the flow state to `state2`. */ - predicate isAdditionalFlowStep1( + default predicate isAdditionalFlowStep1( DataFlow::Node node1, FlowState1 state1, DataFlow::Node node2, FlowState1 state2 - ); + ) { + none() + } /** * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps in @@ -253,9 +255,11 @@ module ProductFlow { * * This step is only applicable in `state1` and updates the flow state to `state2`. */ - predicate isAdditionalFlowStep2( + default predicate isAdditionalFlowStep2( DataFlow::Node node1, FlowState2 state1, DataFlow::Node node2, FlowState2 state2 - ); + ) { + none() + } /** * Holds if data flow into `node` is prohibited in the first projection of the product @@ -359,7 +363,6 @@ module ProductFlow { Config::isSinkPair(node1.getNode(), node1.getState(), node2.getNode(), node2.getState()) } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdReachableInterprocEntry(Flow1::PathNode node1, Flow2::PathNode node2) { isSourcePair(node1, node2) @@ -396,7 +399,6 @@ module ProductFlow { fwdIsSuccessorExit(pragma[only_bind_into](mid1), pragma[only_bind_into](mid2), succ1, succ2) } - pragma[assume_small_delta] private predicate fwdIsSuccessor( Flow1::PathNode pred1, Flow2::PathNode pred2, Flow1::PathNode succ1, Flow2::PathNode succ2 ) { @@ -406,7 +408,6 @@ module ProductFlow { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate revReachableInterprocEntry(Flow1::PathNode node1, Flow2::PathNode node2) { fwdReachableInterprocEntry(node1, node2) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 551653c3aca..0cd152e2473 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -364,7 +364,25 @@ abstract private class OperandBasedUse extends UseImpl { OperandBasedUse() { any() } final override predicate hasIndexInBlock(IRBlock block, int index) { - operand.getUse() = block.getInstruction(index) + // See the comment in `ssa0`'s `OperandBasedUse` for an explanation of this + // predicate's implementation. + exists(BaseSourceVariableInstruction base | base = this.getBase() | + if base.getAst() = any(Cpp::PostfixCrementOperation c).getOperand() + then + exists(Operand op, int indirectionIndex, int indirection | + indirectionIndex = this.getIndirectionIndex() and + indirection = this.getIndirection() and + op = + min(Operand cand, int i | + isUse(_, cand, base, indirection, indirectionIndex) and + block.getInstruction(i) = cand.getUse() + | + cand order by i + ) and + block.getInstruction(index) = op.getUse() + ) + else operand.getUse() = block.getInstruction(index) + ) } final Operand getOperand() { result = operand } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll index d8571b8b74a..33b33113d43 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll @@ -117,6 +117,16 @@ private int countIndirections(Type t) { else ( result = any(Indirection ind | ind.getType() = t).getNumberOfIndirections() or + // If there is an indirection for the type, but we cannot count the number of indirections + // it means we couldn't reach a non-indirection type by stripping off indirections. This + // can occur if an iterator specifies itself as the value type. In this case we default to + // 1 indirection fore the type. + exists(Indirection ind | + ind.getType() = t and + not exists(ind.getNumberOfIndirections()) and + result = 1 + ) + or not exists(Indirection ind | ind.getType() = t) and result = 0 ) @@ -263,7 +273,7 @@ private module IteratorIndirections { // Taint through `operator+=` and `operator-=` on iterators. call.getStaticCallTarget() instanceof Iterator::IteratorAssignArithmeticOperator and node2.(IndirectArgumentOutNode).getPreUpdateNode() = node1 and - node1.(IndirectOperand).getOperand() = call.getArgumentOperand(0) and + node1.(IndirectOperand).hasOperandAndIndirectionIndex(call.getArgumentOperand(0), _) and node1.getType().getUnspecifiedType() = this ) } @@ -578,7 +588,6 @@ private module Cached { ) } - pragma[assume_small_delta] private predicate convertsIntoArgumentRev(Instruction instr) { convertsIntoArgumentFwd(instr) and ( @@ -796,7 +805,7 @@ private module Cached { address.getDef() = instr and isDereference(load, address) and isUseImpl(address, _, indirectionIndex - 1) and - result = instr + result = load ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll index c3b8765a72a..028f5bad9da 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll @@ -160,7 +160,7 @@ predicate modeledTaintStep(DataFlow::Node nodeIn, DataFlow::Node nodeOut) { FunctionInput modelIn, FunctionOutput modelOut | indirectArgument = callInput(call, modelIn) and - indirectArgument.getAddressOperand() = nodeIn.asOperand() and + indirectArgument.hasAddressOperandAndIndirectionIndex(nodeIn.asOperand(), _) and call.getStaticCallTarget() = func and ( func.(DataFlowFunction).hasDataFlow(modelIn, modelOut) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll index aa6a43a2580..38f9bbeec8e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll @@ -122,7 +122,46 @@ abstract private class OperandBasedUse extends UseImpl { override string toString() { result = operand.toString() } final override predicate hasIndexInBlock(IRBlock block, int index) { - operand.getUse() = block.getInstruction(index) + // Ideally, this would just be implemented as: + // ``` + // operand.getUse() = block.getInstruction(index) + // ``` + // but because the IR generated for a snippet such as + // ``` + // int x = *p++; + // ``` + // looks like + // ``` + // r1(glval) = VariableAddress[x] : + // r2(glval) = VariableAddress[p] : + // r3(int *) = Load[p] : &:r2, m1 + // r4(int) = Constant[1] : + // r5(int *) = PointerAdd[4] : r3, r4 + // m3(int *) = Store[p] : &:r2, r5 + // r6(int *) = CopyValue : r3 + // r7(int) = Load[?] : &:r6, ~m2 + // m2(int) = Store[x] : &:r1, r7 + // ``` + // we need to ensure that the `r3` operand of the `CopyValue` instruction isn't seen as a fresh use + // of `p` that happens after the increment. So if the base instruction of this use comes from a + // post-fix crement operation we set the index of the SSA use that wraps the `r3` operand at the + // `CopyValue` instruction to be the same index as the `r3` operand at the `PointerAdd` instruction. + // This ensures that the SSA library doesn't create flow from the `PointerAdd` to `r6`. + exists(BaseSourceVariableInstruction base | base = this.getBase() | + if base.getAst() = any(Cpp::PostfixCrementOperation c).getOperand() + then + exists(Operand op | + op = + min(Operand cand, int i | + isUse(_, cand, base, _, _) and + block.getInstruction(i) = cand.getUse() + | + cand order by i + ) and + block.getInstruction(index) = op.getUse() + ) + else operand.getUse() = block.getInstruction(index) + ) } final override Cpp::Location getLocation() { result = operand.getLocation() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll index 85a28fbc677..ec003891774 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -176,7 +176,6 @@ private predicate binaryValueNumber0( ) } -pragma[assume_small_delta] private predicate binaryValueNumber( BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand @@ -202,7 +201,6 @@ private predicate pointerArithmeticValueNumber0( ) } -pragma[assume_small_delta] private predicate pointerArithmeticValueNumber( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand @@ -249,7 +247,6 @@ private predicate loadTotalOverlapValueNumber0( ) } -pragma[assume_small_delta] private predicate loadTotalOverlapValueNumber( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll index 85a28fbc677..ec003891774 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll @@ -176,7 +176,6 @@ private predicate binaryValueNumber0( ) } -pragma[assume_small_delta] private predicate binaryValueNumber( BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand @@ -202,7 +201,6 @@ private predicate pointerArithmeticValueNumber0( ) } -pragma[assume_small_delta] private predicate pointerArithmeticValueNumber( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand @@ -249,7 +247,6 @@ private predicate loadTotalOverlapValueNumber0( ) } -pragma[assume_small_delta] private predicate loadTotalOverlapValueNumber( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll index 85a28fbc677..ec003891774 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -176,7 +176,6 @@ private predicate binaryValueNumber0( ) } -pragma[assume_small_delta] private predicate binaryValueNumber( BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand @@ -202,7 +201,6 @@ private predicate pointerArithmeticValueNumber0( ) } -pragma[assume_small_delta] private predicate pointerArithmeticValueNumber( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand @@ -249,7 +247,6 @@ private predicate loadTotalOverlapValueNumber0( ) } -pragma[assume_small_delta] private predicate loadTotalOverlapValueNumber( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll index 10b160dee47..ea371de958a 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll @@ -108,7 +108,7 @@ class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, Sid // these may do only a partial copy of the input buffer to the output // buffer exists(this.getParamSize()) and - input.isParameter(this.getParamSrc()) and + input.isParameterDeref(this.getParamSrc()) and ( output.isParameterDeref(this.getParamDest()) or output.isReturnValueDeref() diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticSSA.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticSSA.qll index 29580c2c507..9bc55e4fa80 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticSSA.qll @@ -70,6 +70,27 @@ predicate semBackEdge(SemSsaPhiNode phi, SemSsaVariable inp, SemSsaReadPositionP // Conservatively assume that every edge is a back edge if we don't have dominance information. ( phi.getBasicBlock().bbDominates(edge.getOrigBlock()) or + irreducibleSccEdge(edge.getOrigBlock(), phi.getBasicBlock()) or not edge.getOrigBlock().hasDominanceInformation() ) } + +/** + * Holds if the edge from b1 to b2 is part of a multiple-entry cycle in an irreducible control flow + * graph. + * + * An ireducible control flow graph is one where the usual dominance-based back edge detection does + * not work, because there is a cycle with multiple entry points, meaning there are + * mutually-reachable basic blocks where neither dominates the other. For such a graph, we first + * remove all detectable back-edges using the normal condition that the predecessor block is + * dominated by the successor block, then mark all edges in a cycle in the resulting graph as back + * edges. + */ +private predicate irreducibleSccEdge(SemBasicBlock b1, SemBasicBlock b2) { + trimmedEdge(b1, b2) and trimmedEdge+(b2, b1) +} + +private predicate trimmedEdge(SemBasicBlock pred, SemBasicBlock succ) { + pred.getASuccessor() = succ and + not succ.bbDominates(pred) +} diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/RangeAnalysisStage.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/RangeAnalysisStage.qll index c07a3ea55a0..0576f5ff373 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/RangeAnalysisStage.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/RangeAnalysisStage.qll @@ -877,7 +877,6 @@ module RangeStage< ) } - pragma[assume_small_delta] pragma[nomagic] private predicate boundedPhiRankStep( SemSsaPhiNode phi, SemBound b, D::Delta delta, boolean upper, boolean fromBackEdge, diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 2f64242b90c..5b7104d2331 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* The `cpp/comparison-with-wider-type` query now correctly handles relational operations on signed operators. As a result the query may find more results. + ## 0.6.4 No user-facing changes. diff --git a/cpp/ql/src/Critical/UseAfterFree.ql b/cpp/ql/src/Critical/UseAfterFree.ql index 17e83780b71..a4d1ee7be2f 100644 --- a/cpp/ql/src/Critical/UseAfterFree.ql +++ b/cpp/ql/src/Critical/UseAfterFree.ql @@ -135,18 +135,24 @@ module ParameterSinks { } } -predicate isUse(DataFlow::Node n, Expr e) { - isUse0(n, e) - or - exists(CallInstruction call, int i, InitializeParameterInstruction init | - n.asOperand().getDef().getUnconvertedResultExpression() = e and - init = ParameterSinks::getAnAlwaysDereferencedParameter() and - call.getArgumentOperand(i) = n.asOperand() and - init.hasIndex(i) and - init.getEnclosingFunction() = call.getStaticCallTarget() - ) +module IsUse { + private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplCommon + + predicate isUse(DataFlow::Node n, Expr e) { + isUse0(n, e) + or + exists(CallInstruction call, InitializeParameterInstruction init | + n.asOperand().getDef().getUnconvertedResultExpression() = e and + pragma[only_bind_into](init) = ParameterSinks::getAnAlwaysDereferencedParameter() and + viableParamArg(call, DataFlow::instructionNode(init), n) and + pragma[only_bind_out](init.getEnclosingFunction()) = + pragma[only_bind_out](call.getStaticCallTarget()) + ) + } } +import IsUse + /** * `dealloc1` is a deallocation expression, `e` is an expression that dereferences a * pointer, and the `(dealloc1, e)` pair should be excluded by the `FlowFromFree` library. diff --git a/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql b/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql index a9af2d08f51..baba3a033db 100644 --- a/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql +++ b/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql @@ -5,7 +5,7 @@ * @kind path-problem * @problem.severity error * @security-severity 9.3 - * @precision low + * @precision medium * @id cpp/overrun-write * @tags reliability * security @@ -233,7 +233,8 @@ module StringSizeConfig implements ProductFlow::StateConfigSig { // we use `state2` to remember that there was an offset (in this case an offset of `1`) added // to the size of the allocation. This state is then checked in `isSinkPair`. exists(state1) and - hasSize(bufSource.asConvertedExpr(), sizeSource, state2) + hasSize(bufSource.asConvertedExpr(), sizeSource, state2) and + validState(sizeSource, state2) } predicate isSinkPair( @@ -247,20 +248,10 @@ module StringSizeConfig implements ProductFlow::StateConfigSig { ) } - predicate isBarrier1(DataFlow::Node node, FlowState1 state) { none() } - - predicate isBarrier2(DataFlow::Node node, FlowState2 state) { none() } - predicate isBarrierOut2(DataFlow::Node node) { node = any(DataFlow::SsaPhiNode phi).getAnInput(true) } - predicate isAdditionalFlowStep1( - DataFlow::Node node1, FlowState1 state1, DataFlow::Node node2, FlowState1 state2 - ) { - none() - } - predicate isAdditionalFlowStep2( DataFlow::Node node1, FlowState2 state1, DataFlow::Node node2, FlowState2 state2 ) { diff --git a/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql b/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql index 6636d100746..7d9ef88adea 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql @@ -45,13 +45,20 @@ Element friendlyLoc(Expr e) { not e instanceof Access and not e instanceof Call and result = e } +int getComparisonSizeAdjustment(Expr e) { + if e.getType().(IntegralType).isSigned() then result = 1 else result = 0 +} + from Loop l, RelationalOperation rel, VariableAccess small, Expr large where small = rel.getLesserOperand() and large = rel.getGreaterOperand() and rel = l.getCondition().getAChild*() and forall(Expr conv | conv = large.getConversion*() | - upperBound(conv).log2() > getComparisonSize(small) * 8 + // We adjust the comparison size in the case of a signed integer type. + // This is to exclude the sign bit from the comparison that determines if the small type's size is sufficient to hold + // the value of the larger type determined with range analysis. + upperBound(conv).log2() > (getComparisonSize(small) * 8 - getComparisonSizeAdjustment(small)) ) and // Ignore cases where the smaller type is int or larger // These are still bugs, but you should need a very large string or array to diff --git a/cpp/ql/src/change-notes/released/0.7.0.md b/cpp/ql/src/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..7fac3980802 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.7.0.md @@ -0,0 +1,5 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* The `cpp/comparison-with-wider-type` query now correctly handles relational operations on signed operators. As a result the query may find more results. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql index aa0358a99ad..42623d37328 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql @@ -14,7 +14,7 @@ import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.RangeAnalysi import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticExprSpecific import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.DataFlow -import FieldAddressToDerefFlow::PathGraph +import ArrayAddressToDerefFlow::PathGraph pragma[nomagic] Instruction getABoundIn(SemBound b, IRFunction func) { @@ -78,28 +78,45 @@ predicate isInvalidPointerDerefSink2(DataFlow::Node sink, Instruction i, string ) } -pragma[nomagic] -predicate arrayTypeHasSizes(ArrayType arr, int baseTypeSize, int arraySize) { - arr.getBaseType().getSize() = baseTypeSize and - arr.getArraySize() = arraySize +predicate arrayTypeCand(ArrayType arrayType) { + any(Variable v).getUnspecifiedType() = arrayType and + exists(arrayType.getByteSize()) } -predicate pointerArithOverflow0( - PointerArithmeticInstruction pai, Field f, int size, int bound, int delta -) { - not f.getNamespace() instanceof StdNamespace and - arrayTypeHasSizes(f.getUnspecifiedType(), pai.getElementSize(), size) and - semBounded(getSemanticExpr(pai.getRight()), any(SemZeroBound b), bound, true, _) and - delta = bound - size and - delta >= 0 and - size != 0 and - size != 1 +bindingset[baseTypeSize] +pragma[inline_late] +predicate arrayTypeHasSizes(ArrayType arr, int baseTypeSize, int size) { + arrayTypeCand(arr) and + arr.getByteSize() / baseTypeSize = size +} + +bindingset[pai] +pragma[inline_late] +predicate constantUpperBounded(PointerArithmeticInstruction pai, int delta) { + semBounded(getSemanticExpr(pai.getRight()), any(SemZeroBound b), delta, true, _) +} + +bindingset[pai, size] +predicate pointerArithOverflow0Impl(PointerArithmeticInstruction pai, int size, int delta) { + exists(int bound | + constantUpperBounded(pai, bound) and + delta = bound - size and + delta >= 0 and + size != 0 and + size != 1 + ) +} + +pragma[nomagic] +predicate pointerArithOverflow0(PointerArithmeticInstruction pai, int delta) { + exists(int size | + arrayTypeHasSizes(_, pai.getElementSize(), size) and + pointerArithOverflow0Impl(pai, size, delta) + ) } module PointerArithmeticToDerefConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - pointerArithOverflow0(source.asInstruction(), _, _, _, _) - } + predicate isSource(DataFlow::Node source) { pointerArithOverflow0(source.asInstruction(), _) } predicate isBarrierIn(DataFlow::Node node) { isSource(node) } @@ -110,25 +127,38 @@ module PointerArithmeticToDerefConfig implements DataFlow::ConfigSig { module PointerArithmeticToDerefFlow = DataFlow::Global; -predicate pointerArithOverflow( - PointerArithmeticInstruction pai, Field f, int size, int bound, int delta -) { - pointerArithOverflow0(pai, f, size, bound, delta) and +predicate pointerArithOverflow(PointerArithmeticInstruction pai, int delta) { + pointerArithOverflow0(pai, delta) and PointerArithmeticToDerefFlow::flow(DataFlow::instructionNode(pai), _) } -module FieldAddressToDerefConfig implements DataFlow::StateConfigSig { +bindingset[v] +predicate finalPointerArithOverflow(Variable v, PointerArithmeticInstruction pai, int delta) { + exists(int size | + arrayTypeHasSizes(pragma[only_bind_out](v.getUnspecifiedType()), pai.getElementSize(), size) and + pointerArithOverflow0Impl(pai, size, delta) + ) +} + +predicate isSourceImpl(DataFlow::Node source, Variable v) { + ( + source.asInstruction().(FieldAddressInstruction).getField() = v + or + source.asInstruction().(VariableAddressInstruction).getAstVariable() = v + ) and + arrayTypeCand(v.getUnspecifiedType()) +} + +module ArrayAddressToDerefConfig implements DataFlow::StateConfigSig { newtype FlowState = - additional TArray(Field f) { pointerArithOverflow(_, f, _, _, _) } or + additional TArray() or additional TOverflowArithmetic(PointerArithmeticInstruction pai) { - pointerArithOverflow(pai, _, _, _, _) + pointerArithOverflow(pai, _) } predicate isSource(DataFlow::Node source, FlowState state) { - exists(Field f | - source.asInstruction().(FieldAddressInstruction).getField() = f and - state = TArray(f) - ) + isSourceImpl(source, _) and + state = TArray() } predicate isSink(DataFlow::Node sink, FlowState state) { @@ -147,27 +177,27 @@ module FieldAddressToDerefConfig implements DataFlow::StateConfigSig { predicate isAdditionalFlowStep( DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 ) { - exists(PointerArithmeticInstruction pai, Field f | - state1 = TArray(f) and + exists(PointerArithmeticInstruction pai | + state1 = TArray() and state2 = TOverflowArithmetic(pai) and pai.getLeft() = node1.asInstruction() and node2.asInstruction() = pai and - pointerArithOverflow(pai, f, _, _, _) + pointerArithOverflow(pai, _) ) } } -module FieldAddressToDerefFlow = DataFlow::GlobalWithState; +module ArrayAddressToDerefFlow = DataFlow::GlobalWithState; from - Field f, FieldAddressToDerefFlow::PathNode source, PointerArithmeticInstruction pai, - FieldAddressToDerefFlow::PathNode sink, Instruction deref, string operation, int delta + Variable v, ArrayAddressToDerefFlow::PathNode source, PointerArithmeticInstruction pai, + ArrayAddressToDerefFlow::PathNode sink, Instruction deref, string operation, int delta where - FieldAddressToDerefFlow::flowPath(source, sink) and + ArrayAddressToDerefFlow::flowPath(pragma[only_bind_into](source), pragma[only_bind_into](sink)) and isInvalidPointerDerefSink2(sink.getNode(), deref, operation) and - source.getState() = FieldAddressToDerefConfig::TArray(f) and - sink.getState() = FieldAddressToDerefConfig::TOverflowArithmetic(pai) and - pointerArithOverflow(pai, f, _, _, delta) + pragma[only_bind_out](sink.getState()) = ArrayAddressToDerefConfig::TOverflowArithmetic(pai) and + isSourceImpl(source.getNode(), v) and + finalPointerArithOverflow(v, pai, delta) select pai, source, sink, "This pointer arithmetic may have an off-by-" + (delta + 1) + - " error allowing it to overrun $@ at this $@.", f, f.getName(), deref, operation + " error allowing it to overrun $@ at this $@.", v, v.getName(), deref, operation diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-193/InvalidPointerDeref.ql b/cpp/ql/src/experimental/Security/CWE/CWE-193/InvalidPointerDeref.ql index 478ab2cc92a..dbbbc5e787f 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-193/InvalidPointerDeref.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-193/InvalidPointerDeref.ql @@ -19,6 +19,8 @@ import cpp import semmle.code.cpp.ir.dataflow.internal.ProductFlow import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.RangeAnalysis import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticExprSpecific +import semmle.code.cpp.ir.ValueNumbering +import semmle.code.cpp.controlflow.IRGuards import semmle.code.cpp.ir.IR import codeql.util.Unit @@ -67,6 +69,86 @@ predicate hasSize(HeuristicAllocationExpr alloc, DataFlow::Node n, int state) { ) } +/** + * A module that encapsulates a barrier guard to remove false positives from flow like: + * ```cpp + * char *p = new char[size]; + * // ... + * unsigned n = size; + * // ... + * if(n < size) { + * use(*p[n]); + * } + * ``` + * In this case, the sink pair identified by the product flow library (without any additional barriers) + * would be `(p, n)` (where `n` is the `n` in `p[n]`), because there exists a pointer-arithmetic + * instruction `pai` such that: + * 1. The left-hand of `pai` flows from the allocation, and + * 2. The right-hand of `pai` is non-strictly upper bounded by `n` (where `n` is the `n` in `p[n]`) + * but because there's a strict comparison that compares `n` against the size of the allocation this + * snippet is fine. + */ +module Barrier2 { + private class FlowState2 = AllocToInvalidPointerConfig::FlowState2; + + private module BarrierConfig2 implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // The sources is the same as in the sources for the second + // projection in the `AllocToInvalidPointerConfig` module. + hasSize(_, source, _) + } + + additional predicate isSink( + DataFlow::Node left, DataFlow::Node right, IRGuardCondition g, FlowState2 state, + boolean testIsTrue + ) { + // The sink is any "large" side of a relational comparison. + g.comparesLt(left.asOperand(), right.asOperand(), state, true, testIsTrue) + } + + predicate isSink(DataFlow::Node sink) { isSink(_, sink, _, _, _) } + } + + private import DataFlow::Global + + private FlowState2 getAFlowStateForNode(DataFlow::Node node) { + exists(DataFlow::Node source | + flow(source, node) and + hasSize(_, source, result) + ) + } + + private predicate operandGuardChecks( + IRGuardCondition g, Operand left, Operand right, FlowState2 state, boolean edge + ) { + exists(DataFlow::Node nLeft, DataFlow::Node nRight, FlowState2 state0 | + nRight.asOperand() = right and + nLeft.asOperand() = left and + BarrierConfig2::isSink(nLeft, nRight, g, state0, edge) and + state = getAFlowStateForNode(nRight) and + state0 <= state + ) + } + + Instruction getABarrierInstruction(FlowState2 state) { + exists(IRGuardCondition g, ValueNumber value, Operand use, boolean edge | + use = value.getAUse() and + operandGuardChecks(pragma[only_bind_into](g), pragma[only_bind_into](use), _, + pragma[only_bind_into](state), pragma[only_bind_into](edge)) and + result = value.getAnInstruction() and + g.controls(result.getBlock(), edge) + ) + } + + DataFlow::Node getABarrierNode(FlowState2 state) { + result.asOperand() = getABarrierInstruction(state).getAUse() + } + + IRBlock getABarrierBlock(FlowState2 state) { + result.getAnInstruction() = getABarrierInstruction(state) + } +} + /** * A product-flow configuration for flow from an (allocation, size) pair to a * pointer-arithmetic operation that is non-strictly upper-bounded by `allocation + size`. @@ -111,33 +193,18 @@ module AllocToInvalidPointerConfig implements ProductFlow::StateConfigSig { exists(state1) and // We check that the delta computed by the range analysis matches the // state value that we set in `isSourcePair`. - exists(int delta | - isSinkImpl(_, sink1, sink2, delta) and - state2 = delta - ) + isSinkImpl(_, sink1, sink2, state2) } - predicate isBarrier1(DataFlow::Node node, FlowState1 state) { none() } - - predicate isBarrier2(DataFlow::Node node, FlowState2 state) { none() } + predicate isBarrier2(DataFlow::Node node, FlowState2 state) { + node = Barrier2::getABarrierNode(state) + } predicate isBarrierIn1(DataFlow::Node node) { isSourcePair(node, _, _, _) } predicate isBarrierOut2(DataFlow::Node node) { node = any(DataFlow::SsaPhiNode phi).getAnInput(true) } - - predicate isAdditionalFlowStep1( - DataFlow::Node node1, FlowState1 state1, DataFlow::Node node2, FlowState1 state2 - ) { - none() - } - - predicate isAdditionalFlowStep2( - DataFlow::Node node1, FlowState2 state1, DataFlow::Node node2, FlowState2 state2 - ) { - none() - } } module AllocToInvalidPointerFlow = ProductFlow::GlobalWithState; @@ -160,13 +227,40 @@ pragma[nomagic] predicate pointerAddInstructionHasBounds( PointerAddInstruction pai, DataFlow::Node sink1, DataFlow::Node sink2, int delta ) { - exists(Instruction right | + InterestingPointerAddInstruction::isInteresting(pragma[only_bind_into](pai)) and + exists(Instruction right, Instruction instr2 | pai.getRight() = right and pai.getLeft() = sink1.asInstruction() and - bounded1(right, sink2.asInstruction(), delta) + instr2 = sink2.asInstruction() and + bounded1(right, instr2, delta) and + not right = Barrier2::getABarrierInstruction(delta) and + not instr2 = Barrier2::getABarrierInstruction(delta) ) } +module InterestingPointerAddInstruction { + private module PointerAddInstructionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // The sources is the same as in the sources for the second + // projection in the `AllocToInvalidPointerConfig` module. + hasSize(source.asConvertedExpr(), _, _) + } + + predicate isSink(DataFlow::Node sink) { + sink.asInstruction() = any(PointerAddInstruction pai).getLeft() + } + } + + private import DataFlow::Global + + predicate isInteresting(PointerAddInstruction pai) { + exists(DataFlow::Node n | + n.asInstruction() = pai.getLeft() and + flowTo(n) + ) + } +} + /** * Holds if `pai` is non-strictly upper bounded by `sink2 + delta` and `sink1` is the * left operand of the pointer-arithmetic operation. @@ -204,11 +298,13 @@ Instruction getASuccessor(Instruction instr) { */ pragma[inline] predicate isInvalidPointerDerefSink(DataFlow::Node sink, Instruction i, string operation, int delta) { - exists(AddressOperand addr, Instruction s | + exists(AddressOperand addr, Instruction s, IRBlock b | s = sink.asInstruction() and - bounded1(addr.getDef(), s, delta) and + boundedImpl(addr.getDef(), s, delta) and delta >= 0 and - i.getAnOperand() = addr + i.getAnOperand() = addr and + b = i.getBlock() and + not b = InvalidPointerToDerefBarrier::getABarrierBlock(delta) | i instanceof StoreInstruction and operation = "write" @@ -218,6 +314,60 @@ predicate isInvalidPointerDerefSink(DataFlow::Node sink, Instruction i, string o ) } +module InvalidPointerToDerefBarrier { + private module BarrierConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // The sources is the same as in the sources for `InvalidPointerToDerefConfig`. + invalidPointerToDerefSource(_, source, _) + } + + additional predicate isSink( + DataFlow::Node left, DataFlow::Node right, IRGuardCondition g, int state, boolean testIsTrue + ) { + // The sink is any "large" side of a relational comparison. + g.comparesLt(left.asOperand(), right.asOperand(), state, true, testIsTrue) + } + + predicate isSink(DataFlow::Node sink) { isSink(_, sink, _, _, _) } + } + + private import DataFlow::Global + + private int getInvalidPointerToDerefSourceDelta(DataFlow::Node node) { + exists(DataFlow::Node source | + flow(source, node) and + invalidPointerToDerefSource(_, source, result) + ) + } + + private predicate operandGuardChecks( + IRGuardCondition g, Operand left, Operand right, int state, boolean edge + ) { + exists(DataFlow::Node nLeft, DataFlow::Node nRight, int state0 | + nRight.asOperand() = right and + nLeft.asOperand() = left and + BarrierConfig::isSink(nLeft, nRight, g, state0, edge) and + state = getInvalidPointerToDerefSourceDelta(nRight) and + state0 <= state + ) + } + + Instruction getABarrierInstruction(int state) { + exists(IRGuardCondition g, ValueNumber value, Operand use, boolean edge | + use = value.getAUse() and + operandGuardChecks(pragma[only_bind_into](g), pragma[only_bind_into](use), _, state, + pragma[only_bind_into](edge)) and + result = value.getAnInstruction() and + g.controls(result.getBlock(), edge) + ) + } + + DataFlow::Node getABarrierNode() { result.asOperand() = getABarrierInstruction(_).getAUse() } + + pragma[nomagic] + IRBlock getABarrierBlock(int state) { result.getAnInstruction() = getABarrierInstruction(state) } +} + /** * A configuration to track flow from a pointer-arithmetic operation found * by `AllocToInvalidPointerConfig` to a dereference of the pointer. @@ -230,6 +380,8 @@ module InvalidPointerToDerefConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { node = any(DataFlow::SsaPhiNode phi | not phi.isPhiRead()).getAnInput(true) + or + node = InvalidPointerToDerefBarrier::getABarrierNode() } } @@ -246,12 +398,21 @@ module InvalidPointerToDerefFlow = DataFlow::Global predicate invalidPointerToDerefSource( PointerArithmeticInstruction pai, DataFlow::Node source, int delta ) { - exists(AllocToInvalidPointerFlow::PathNode1 p, DataFlow::Node sink1 | - pragma[only_bind_out](p.getNode()) = sink1 and - AllocToInvalidPointerFlow::flowPath(_, _, pragma[only_bind_into](p), _) and - isSinkImpl(pai, sink1, _, _) and + exists( + AllocToInvalidPointerFlow::PathNode1 p1, AllocToInvalidPointerFlow::PathNode2 p2, + DataFlow::Node sink1, DataFlow::Node sink2, int delta0 + | + pragma[only_bind_out](p1.getNode()) = sink1 and + pragma[only_bind_out](p2.getNode()) = sink2 and + AllocToInvalidPointerFlow::flowPath(_, _, pragma[only_bind_into](p1), pragma[only_bind_into](p2)) and + // Note that `delta` is not necessarily equal to `delta0`: + // `delta0` is the constant offset added to the size of the allocation, and + // delta is the constant difference between the pointer-arithmetic instruction + // and the instruction computing the address for which we will search for a dereference. + isSinkImpl(pai, sink1, sink2, delta0) and bounded2(source.asInstruction(), pai, delta) and - delta >= 0 + delta >= 0 and + not source.getBasicBlock() = Barrier2::getABarrierBlock(delta0) ) } @@ -265,7 +426,7 @@ newtype TMergedPathNode = // pointer, but we want to raise an alert at the dereference. TPathNodeSink(Instruction i) { exists(DataFlow::Node n | - InvalidPointerToDerefFlow::flowTo(n) and + InvalidPointerToDerefFlow::flowTo(pragma[only_bind_into](n)) and isInvalidPointerDerefSink(n, i, _, _) and i = getASuccessor(n.asInstruction()) ) diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 9fe8de41610..b400a52bb10 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.6.4 +version: 0.7.0 groups: - cpp - queries diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected index 820c48447ff..dbd71611d81 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected @@ -4,8 +4,9 @@ edges | test.cpp:19:9:19:16 | mk_array indirection [p] | test.cpp:28:19:28:26 | call to mk_array [p] | | test.cpp:19:9:19:16 | mk_array indirection [p] | test.cpp:50:18:50:25 | call to mk_array [p] | | test.cpp:21:5:21:24 | ... = ... | test.cpp:21:9:21:9 | arr indirection [post update] [p] | -| test.cpp:21:9:21:9 | arr indirection [post update] [p] | test.cpp:19:9:19:16 | mk_array indirection [p] | +| test.cpp:21:9:21:9 | arr indirection [post update] [p] | test.cpp:22:5:22:7 | arr indirection [p] | | test.cpp:21:13:21:18 | call to malloc | test.cpp:21:5:21:24 | ... = ... | +| test.cpp:22:5:22:7 | arr indirection [p] | test.cpp:19:9:19:16 | mk_array indirection [p] | | test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:31:9:31:11 | arr indirection [p] | | test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:35:9:35:11 | arr indirection [p] | | test.cpp:31:9:31:11 | arr indirection [p] | test.cpp:31:13:31:13 | p indirection | @@ -20,9 +21,10 @@ edges | test.cpp:45:13:45:13 | p indirection | test.cpp:45:13:45:13 | p | | test.cpp:50:18:50:25 | call to mk_array [p] | test.cpp:39:27:39:29 | arr [p] | | test.cpp:55:5:55:24 | ... = ... | test.cpp:55:9:55:9 | arr indirection [post update] [p] | -| test.cpp:55:9:55:9 | arr indirection [post update] [p] | test.cpp:59:9:59:11 | arr indirection [p] | -| test.cpp:55:9:55:9 | arr indirection [post update] [p] | test.cpp:63:9:63:11 | arr indirection [p] | +| test.cpp:55:9:55:9 | arr indirection [post update] [p] | test.cpp:56:5:56:7 | arr indirection [p] | | test.cpp:55:13:55:18 | call to malloc | test.cpp:55:5:55:24 | ... = ... | +| test.cpp:56:5:56:7 | arr indirection [p] | test.cpp:59:9:59:11 | arr indirection [p] | +| test.cpp:56:5:56:7 | arr indirection [p] | test.cpp:63:9:63:11 | arr indirection [p] | | test.cpp:59:9:59:11 | arr indirection [p] | test.cpp:59:13:59:13 | p indirection | | test.cpp:59:13:59:13 | p indirection | test.cpp:59:13:59:13 | p | | test.cpp:63:9:63:11 | arr indirection [p] | test.cpp:63:13:63:13 | p indirection | @@ -30,8 +32,9 @@ edges | test.cpp:67:10:67:19 | mk_array_p indirection [p] | test.cpp:76:20:76:29 | call to mk_array_p indirection [p] | | test.cpp:67:10:67:19 | mk_array_p indirection [p] | test.cpp:98:18:98:27 | call to mk_array_p indirection [p] | | test.cpp:69:5:69:25 | ... = ... | test.cpp:69:10:69:10 | arr indirection [post update] [p] | -| test.cpp:69:10:69:10 | arr indirection [post update] [p] | test.cpp:67:10:67:19 | mk_array_p indirection [p] | +| test.cpp:69:10:69:10 | arr indirection [post update] [p] | test.cpp:70:5:70:7 | arr indirection [p] | | test.cpp:69:14:69:19 | call to malloc | test.cpp:69:5:69:25 | ... = ... | +| test.cpp:70:5:70:7 | arr indirection [p] | test.cpp:67:10:67:19 | mk_array_p indirection [p] | | test.cpp:76:20:76:29 | call to mk_array_p indirection [p] | test.cpp:79:9:79:11 | arr indirection [p] | | test.cpp:76:20:76:29 | call to mk_array_p indirection [p] | test.cpp:83:9:83:11 | arr indirection [p] | | test.cpp:79:9:79:11 | arr indirection [p] | test.cpp:79:14:79:14 | p indirection | @@ -53,6 +56,7 @@ nodes | test.cpp:21:5:21:24 | ... = ... | semmle.label | ... = ... | | test.cpp:21:9:21:9 | arr indirection [post update] [p] | semmle.label | arr indirection [post update] [p] | | test.cpp:21:13:21:18 | call to malloc | semmle.label | call to malloc | +| test.cpp:22:5:22:7 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:28:19:28:26 | call to mk_array [p] | semmle.label | call to mk_array [p] | | test.cpp:31:9:31:11 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:31:13:31:13 | p | semmle.label | p | @@ -71,6 +75,7 @@ nodes | test.cpp:55:5:55:24 | ... = ... | semmle.label | ... = ... | | test.cpp:55:9:55:9 | arr indirection [post update] [p] | semmle.label | arr indirection [post update] [p] | | test.cpp:55:13:55:18 | call to malloc | semmle.label | call to malloc | +| test.cpp:56:5:56:7 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:59:9:59:11 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:59:13:59:13 | p | semmle.label | p | | test.cpp:59:13:59:13 | p indirection | semmle.label | p indirection | @@ -81,6 +86,7 @@ nodes | test.cpp:69:5:69:25 | ... = ... | semmle.label | ... = ... | | test.cpp:69:10:69:10 | arr indirection [post update] [p] | semmle.label | arr indirection [post update] [p] | | test.cpp:69:14:69:19 | call to malloc | semmle.label | call to malloc | +| test.cpp:70:5:70:7 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:76:20:76:29 | call to mk_array_p indirection [p] | semmle.label | call to mk_array_p indirection [p] | | test.cpp:79:9:79:11 | arr indirection [p] | semmle.label | arr indirection [p] | | test.cpp:79:14:79:14 | p | semmle.label | p | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected index 7d3df8cb7cb..9c2cc36448e 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected @@ -1,38 +1,136 @@ edges +| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | | test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | | test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | +| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | | test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | +| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | | test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | | test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | +| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | | test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | | test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | +| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | | test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | +| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | +| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | | test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | | test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | | test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | | test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | +| test.cpp:85:34:85:36 | buf | test.cpp:87:5:87:31 | access to array | +| test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | +| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | +| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | +| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | +| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | +| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | +| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | +| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | +| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | +| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | +| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | +| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | +| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | +| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | +| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | +| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | +| test.cpp:146:26:146:26 | p indirection | test.cpp:148:6:148:9 | * ... | +| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | +| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | & ... indirection | +| test.cpp:158:17:158:18 | & ... indirection | test.cpp:146:26:146:26 | p indirection | +| test.cpp:218:23:218:28 | buffer | test.cpp:220:5:220:11 | access to array | +| test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | +| test.cpp:229:25:229:29 | array | test.cpp:231:5:231:10 | access to array | +| test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | +| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | +| test.cpp:278:14:278:14 | p | test.cpp:245:30:245:30 | p | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:277:35:277:35 | p | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:283:19:283:25 | buffer1 | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:277:35:277:35 | p | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | nodes +| test.cpp:34:5:34:24 | access to array | semmle.label | access to array | +| test.cpp:34:10:34:12 | buf | semmle.label | buf | | test.cpp:35:5:35:22 | access to array | semmle.label | access to array | | test.cpp:35:10:35:12 | buf | semmle.label | buf | | test.cpp:36:5:36:24 | access to array | semmle.label | access to array | | test.cpp:36:10:36:12 | buf | semmle.label | buf | +| test.cpp:39:9:39:19 | access to array | semmle.label | access to array | +| test.cpp:39:14:39:16 | buf | semmle.label | buf | | test.cpp:43:9:43:19 | access to array | semmle.label | access to array | | test.cpp:43:14:43:16 | buf | semmle.label | buf | +| test.cpp:48:5:48:24 | access to array | semmle.label | access to array | +| test.cpp:48:10:48:12 | buf | semmle.label | buf | | test.cpp:49:5:49:22 | access to array | semmle.label | access to array | | test.cpp:49:10:49:12 | buf | semmle.label | buf | | test.cpp:50:5:50:24 | access to array | semmle.label | access to array | | test.cpp:50:10:50:12 | buf | semmle.label | buf | +| test.cpp:53:9:53:19 | access to array | semmle.label | access to array | +| test.cpp:53:14:53:16 | buf | semmle.label | buf | | test.cpp:57:9:57:19 | access to array | semmle.label | access to array | | test.cpp:57:14:57:16 | buf | semmle.label | buf | | test.cpp:61:9:61:19 | access to array | semmle.label | access to array | | test.cpp:61:14:61:16 | buf | semmle.label | buf | | test.cpp:66:32:66:32 | p | semmle.label | p | +| test.cpp:66:32:66:32 | p | semmle.label | p | | test.cpp:70:33:70:33 | p | semmle.label | p | +| test.cpp:71:5:71:17 | access to array | semmle.label | access to array | | test.cpp:72:5:72:15 | access to array | semmle.label | access to array | +| test.cpp:76:26:76:46 | & ... | semmle.label | & ... | +| test.cpp:76:32:76:34 | buf | semmle.label | buf | | test.cpp:77:26:77:44 | & ... | semmle.label | & ... | | test.cpp:77:32:77:34 | buf | semmle.label | buf | | test.cpp:79:27:79:34 | buf | semmle.label | buf | | test.cpp:79:32:79:34 | buf | semmle.label | buf | +| test.cpp:85:34:85:36 | buf | semmle.label | buf | +| test.cpp:87:5:87:31 | access to array | semmle.label | access to array | +| test.cpp:88:5:88:27 | access to array | semmle.label | access to array | +| test.cpp:96:13:96:15 | arr | semmle.label | arr | +| test.cpp:96:13:96:18 | access to array | semmle.label | access to array | +| test.cpp:111:17:111:19 | arr | semmle.label | arr | +| test.cpp:111:17:111:22 | access to array | semmle.label | access to array | +| test.cpp:115:35:115:37 | arr | semmle.label | arr | +| test.cpp:115:35:115:40 | access to array | semmle.label | access to array | +| test.cpp:119:17:119:19 | arr | semmle.label | arr | +| test.cpp:119:17:119:22 | access to array | semmle.label | access to array | +| test.cpp:128:9:128:11 | arr | semmle.label | arr | +| test.cpp:128:9:128:14 | access to array | semmle.label | access to array | +| test.cpp:134:25:134:27 | arr | semmle.label | arr | +| test.cpp:136:9:136:16 | ... += ... | semmle.label | ... += ... | +| test.cpp:138:13:138:15 | arr | semmle.label | arr | +| test.cpp:143:18:143:21 | asdf | semmle.label | asdf | +| test.cpp:143:18:143:21 | asdf | semmle.label | asdf | +| test.cpp:146:26:146:26 | p indirection | semmle.label | p indirection | +| test.cpp:148:6:148:9 | * ... | semmle.label | * ... | +| test.cpp:156:12:156:14 | buf | semmle.label | buf | +| test.cpp:156:12:156:18 | ... + ... | semmle.label | ... + ... | +| test.cpp:158:17:158:18 | & ... indirection | semmle.label | & ... indirection | +| test.cpp:218:23:218:28 | buffer | semmle.label | buffer | +| test.cpp:220:5:220:11 | access to array | semmle.label | access to array | +| test.cpp:221:5:221:11 | access to array | semmle.label | access to array | +| test.cpp:229:25:229:29 | array | semmle.label | array | +| test.cpp:231:5:231:10 | access to array | semmle.label | access to array | +| test.cpp:232:5:232:10 | access to array | semmle.label | access to array | +| test.cpp:245:30:245:30 | p | semmle.label | p | +| test.cpp:245:30:245:30 | p | semmle.label | p | +| test.cpp:261:27:261:30 | access to array | semmle.label | access to array | +| test.cpp:274:14:274:20 | buffer3 | semmle.label | buffer3 | +| test.cpp:274:14:274:20 | buffer3 | semmle.label | buffer3 | +| test.cpp:277:35:277:35 | p | semmle.label | p | +| test.cpp:278:14:278:14 | p | semmle.label | p | +| test.cpp:283:19:283:25 | buffer1 | semmle.label | buffer1 | +| test.cpp:283:19:283:25 | buffer1 | semmle.label | buffer1 | +| test.cpp:286:19:286:25 | buffer2 | semmle.label | buffer2 | +| test.cpp:286:19:286:25 | buffer2 | semmle.label | buffer2 | +| test.cpp:289:19:289:25 | buffer3 | semmle.label | buffer3 | +| test.cpp:289:19:289:25 | buffer3 | semmle.label | buffer3 | subpaths #select | test.cpp:35:5:35:22 | PointerAdd: access to array | test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:15:9:15:11 | buf | buf | test.cpp:35:5:35:26 | Store: ... = ... | write | @@ -44,3 +142,10 @@ subpaths | test.cpp:61:9:61:19 | PointerAdd: access to array | test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | This pointer arithmetic may have an off-by-2 error allowing it to overrun $@ at this $@. | test.cpp:19:9:19:11 | buf | buf | test.cpp:61:9:61:23 | Store: ... = ... | write | | test.cpp:72:5:72:15 | PointerAdd: access to array | test.cpp:79:32:79:34 | buf | test.cpp:72:5:72:15 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:15:9:15:11 | buf | buf | test.cpp:72:5:72:19 | Store: ... = ... | write | | test.cpp:77:27:77:44 | PointerAdd: access to array | test.cpp:77:32:77:34 | buf | test.cpp:66:32:66:32 | p | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:15:9:15:11 | buf | buf | test.cpp:67:5:67:10 | Store: ... = ... | write | +| test.cpp:88:5:88:27 | PointerAdd: access to array | test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:15:9:15:11 | buf | buf | test.cpp:88:5:88:31 | Store: ... = ... | write | +| test.cpp:128:9:128:14 | PointerAdd: access to array | test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:125:11:125:13 | arr | arr | test.cpp:128:9:128:18 | Store: ... = ... | write | +| test.cpp:136:9:136:16 | PointerAdd: ... += ... | test.cpp:143:18:143:21 | asdf | test.cpp:138:13:138:15 | arr | This pointer arithmetic may have an off-by-2 error allowing it to overrun $@ at this $@. | test.cpp:142:10:142:13 | asdf | asdf | test.cpp:138:12:138:15 | Load: * ... | read | +| test.cpp:156:12:156:18 | PointerAdd: ... + ... | test.cpp:156:12:156:14 | buf | test.cpp:148:6:148:9 | * ... | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:154:7:154:9 | buf | buf | test.cpp:147:3:147:13 | Store: ... = ... | write | +| test.cpp:221:5:221:11 | PointerAdd: access to array | test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:217:19:217:24 | buffer | buffer | test.cpp:221:5:221:15 | Store: ... = ... | write | +| test.cpp:232:5:232:10 | PointerAdd: access to array | test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:228:10:228:14 | array | array | test.cpp:232:5:232:19 | Store: ... = ... | write | +| test.cpp:261:27:261:30 | PointerAdd: access to array | test.cpp:286:19:286:25 | buffer2 | test.cpp:261:27:261:30 | access to array | This pointer arithmetic may have an off-by-1 error allowing it to overrun $@ at this $@. | test.cpp:285:19:285:25 | buffer2 | buffer2 | test.cpp:261:27:261:30 | Load: access to array | read | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/test.cpp index a33f43bfa49..22f63ec3713 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/test.cpp @@ -85,7 +85,7 @@ void testCharIndex(BigArray *arr) { char *charBuf = (char*) arr->buf; charBuf[MAX_SIZE_BYTES - 1] = 0; // GOOD - charBuf[MAX_SIZE_BYTES] = 0; // BAD [FALSE NEGATIVE] + charBuf[MAX_SIZE_BYTES] = 0; // BAD } void testEqRefinement() { @@ -120,3 +120,171 @@ void testEqRefinement2() { } } } + +void testStackAllocated() { + char *arr[MAX_SIZE]; + + for(int i = 0; i <= MAX_SIZE; i++) { + arr[i] = 0; // BAD + } +} + +int strncmp(const char*, const char*, int); + +char testStrncmp2(char *arr) { + if(strncmp(arr, "", 6) == 0) { + arr += 6; + } + return *arr; // GOOD [FALSE POSITIVE] +} + +void testStrncmp1() { + char asdf[5]; + testStrncmp2(asdf); +} + +void countdownBuf1(int **p) { + *--(*p) = 1; // GOOD [FALSE POSITIVE] + *--(*p) = 2; // GOOD + *--(*p) = 3; // GOOD + *--(*p) = 4; // GOOD +} + +void countdownBuf2() { + int buf[4]; + + int *x = buf + 4; + + countdownBuf1(&x); +} + +int access(int *p) { + return p[0]; +} + + +// unrolled loop style seen in crypto code. +int countdownLength1(int *p, int len) { + while(len > 0) { + access(p); + p[1] = 1; + p[2] = 2; + p[3] = 3; + p[4] = 4; + p[5] = 5; + p[6] = 6; // BAD [FALSE NEGATIVE] + p[7] = 7; // BAD [FALSE NEGATIVE] + p += 8; + len -= 8; + } + + return p[5]; +} + +int callCountdownLength() { + + int buf[6]; + + return countdownLength1(buf, 6); +} + +int countdownLength2() { + int buf[6]; + int len = 6; + int *p = buf; + + if(len % 8) { + return -1; + } + + while(len > 0) { + p[0] = 0; + p[1] = 1; + p[2] = 2; + p[3] = 3; + p[4] = 4; + p[5] = 5; + p[6] = 6; // GOOD + p[7] = 7; // GOOD + p += 8; + len -= 8; + } + + return p[5]; +} + +void pointer_size_larger_than_array_element_size() { + unsigned char buffer[100]; // getByteSize() = 100 + int *ptr = (int *)buffer; // pai.getElementSize() will be sizeof(int) = 4 -> size = 25 + + ptr[24] = 0; // GOOD: writes bytes 96, 97, 98, 99 + ptr[25] = 0; // BAD: writes bytes 100, 101, 102, 103 +} + +struct vec2 { int x, y; }; +struct vec3 { int x, y, z; }; + +void pointer_size_smaller_than_array_element_size_but_does_not_divide_it() { + vec3 array[3]; // getByteSize() = 9 * sizeof(int) + vec2 *ptr = (vec2 *)array; // pai.getElementSize() will be 2 * sizeof(int) -> size = 4 + + ptr[3] = vec2{}; // GOOD: writes ints 6, 7 + ptr[4] = vec2{}; // BAD: writes ints 8, 9 +} + +void pointer_size_larger_than_array_element_size_and_does_not_divide_it() { + vec2 array[2]; // getByteSize() = 4 * sizeof(int) = 4 * 4 = 16 + vec3 *ptr = (vec3 *)array; // pai.getElementSize() will be 3 * sizeof(int) -> size = 1 + + ptr[0] = vec3{}; // GOOD: writes ints 0, 1, 2 + ptr[1] = vec3{}; // BAD: writes ints 3, 4, 5 [NOT DETECTED] +} + +void use(...); + +void call_use(unsigned char* p, int n) { + if(n == 0) { + return; + } + if(n == 1) { + unsigned char x = p[0]; + use(x); + } + if(n == 2) { + unsigned char x = p[0]; + unsigned char y = p[1]; + use(x, y); + } + if(n == 3) { + unsigned char x = p[0]; + unsigned char y = p[1]; + unsigned char z = p[2]; // GOOD [FALSE POSITIVE]: `call_use(buffer2, 2)` won't reach this point. + use(x, y, z); + } +} + +void test_call_use() { + unsigned char buffer1[1]; + call_use(buffer1,1); + + unsigned char buffer2[2]; + call_use(buffer2,2); + + unsigned char buffer3[3]; + call_use(buffer3,3); +} + +void call_call_use(unsigned char* p, int n) { + call_use(p, n); +} + +void test_call_use2() { + unsigned char buffer1[1]; + call_call_use(buffer1,1); + + unsigned char buffer2[2]; + call_call_use(buffer2,2); + + unsigned char buffer3[3]; + call_call_use(buffer3,3); +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/InvalidPointerDeref.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/InvalidPointerDeref.expected index 1bff2ec77f7..32b068daf81 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/InvalidPointerDeref.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/InvalidPointerDeref.expected @@ -380,9 +380,10 @@ edges | test.cpp:80:9:80:16 | mk_array indirection [end] | test.cpp:89:19:89:26 | call to mk_array [end] | | test.cpp:80:9:80:16 | mk_array indirection [end] | test.cpp:119:18:119:25 | call to mk_array [end] | | test.cpp:82:5:82:28 | ... = ... | test.cpp:82:9:82:13 | arr indirection [post update] [begin] | -| test.cpp:82:9:82:13 | arr indirection [post update] [begin] | test.cpp:80:9:80:16 | mk_array indirection [begin] | +| test.cpp:82:9:82:13 | arr indirection [post update] [begin] | test.cpp:83:5:83:7 | arr indirection [begin] | | test.cpp:82:9:82:13 | arr indirection [post update] [begin] | test.cpp:83:15:83:17 | arr indirection [begin] | | test.cpp:82:17:82:22 | call to malloc | test.cpp:82:5:82:28 | ... = ... | +| test.cpp:83:5:83:7 | arr indirection [begin] | test.cpp:80:9:80:16 | mk_array indirection [begin] | | test.cpp:83:5:83:30 | ... = ... | test.cpp:83:9:83:11 | arr indirection [post update] [end] | | test.cpp:83:9:83:11 | arr indirection [post update] [end] | test.cpp:80:9:80:16 | mk_array indirection [end] | | test.cpp:83:15:83:17 | arr indirection [begin] | test.cpp:83:19:83:23 | begin indirection | @@ -455,9 +456,10 @@ edges | test.cpp:124:15:124:20 | call to malloc | test.cpp:125:5:125:17 | ... = ... | | test.cpp:124:15:124:20 | call to malloc | test.cpp:126:15:126:15 | p | | test.cpp:125:5:125:17 | ... = ... | test.cpp:125:9:125:13 | arr indirection [post update] [begin] | -| test.cpp:125:9:125:13 | arr indirection [post update] [begin] | test.cpp:129:11:129:13 | arr indirection [begin] | -| test.cpp:125:9:125:13 | arr indirection [post update] [begin] | test.cpp:133:11:133:13 | arr indirection [begin] | -| test.cpp:125:9:125:13 | arr indirection [post update] [begin] | test.cpp:137:11:137:13 | arr indirection [begin] | +| test.cpp:125:9:125:13 | arr indirection [post update] [begin] | test.cpp:126:5:126:7 | arr indirection [begin] | +| test.cpp:126:5:126:7 | arr indirection [begin] | test.cpp:129:11:129:13 | arr indirection [begin] | +| test.cpp:126:5:126:7 | arr indirection [begin] | test.cpp:133:11:133:13 | arr indirection [begin] | +| test.cpp:126:5:126:7 | arr indirection [begin] | test.cpp:137:11:137:13 | arr indirection [begin] | | test.cpp:129:11:129:13 | arr indirection [begin] | test.cpp:129:15:129:19 | begin indirection | | test.cpp:129:15:129:19 | begin indirection | test.cpp:129:15:129:19 | begin | | test.cpp:133:11:133:13 | arr indirection [begin] | test.cpp:133:15:133:19 | begin indirection | @@ -469,9 +471,10 @@ edges | test.cpp:141:10:141:19 | mk_array_p indirection [end] | test.cpp:150:20:150:29 | call to mk_array_p indirection [end] | | test.cpp:141:10:141:19 | mk_array_p indirection [end] | test.cpp:180:19:180:28 | call to mk_array_p indirection [end] | | test.cpp:143:5:143:29 | ... = ... | test.cpp:143:10:143:14 | arr indirection [post update] [begin] | -| test.cpp:143:10:143:14 | arr indirection [post update] [begin] | test.cpp:141:10:141:19 | mk_array_p indirection [begin] | +| test.cpp:143:10:143:14 | arr indirection [post update] [begin] | test.cpp:144:5:144:7 | arr indirection [begin] | | test.cpp:143:10:143:14 | arr indirection [post update] [begin] | test.cpp:144:16:144:18 | arr indirection [begin] | | test.cpp:143:18:143:23 | call to malloc | test.cpp:143:5:143:29 | ... = ... | +| test.cpp:144:5:144:7 | arr indirection [begin] | test.cpp:141:10:141:19 | mk_array_p indirection [begin] | | test.cpp:144:5:144:32 | ... = ... | test.cpp:144:10:144:12 | arr indirection [post update] [end] | | test.cpp:144:10:144:12 | arr indirection [post update] [end] | test.cpp:141:10:141:19 | mk_array_p indirection [end] | | test.cpp:144:16:144:18 | arr indirection [begin] | test.cpp:144:21:144:25 | begin indirection | @@ -664,11 +667,6 @@ edges | test.cpp:338:8:338:15 | * ... | test.cpp:342:8:342:17 | * ... | | test.cpp:341:8:341:17 | * ... | test.cpp:342:8:342:17 | * ... | | test.cpp:347:14:347:27 | new[] | test.cpp:348:15:348:16 | xs | -| test.cpp:348:15:348:16 | xs | test.cpp:350:16:350:19 | ... ++ | -| test.cpp:348:15:348:16 | xs | test.cpp:350:16:350:19 | ... ++ | -| test.cpp:350:16:350:19 | ... ++ | test.cpp:350:15:350:19 | Load: * ... | -| test.cpp:350:16:350:19 | ... ++ | test.cpp:350:16:350:19 | ... ++ | -| test.cpp:350:16:350:19 | ... ++ | test.cpp:350:16:350:19 | ... ++ | | test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:16 | xs | | test.cpp:356:15:356:16 | xs | test.cpp:356:15:356:23 | ... + ... | | test.cpp:356:15:356:16 | xs | test.cpp:356:15:356:23 | ... + ... | @@ -722,14 +720,6 @@ edges | test.cpp:359:16:359:27 | end_plus_one | test.cpp:359:14:359:32 | Load: * ... | | test.cpp:359:16:359:31 | ... + ... | test.cpp:359:14:359:32 | Load: * ... | | test.cpp:363:14:363:27 | new[] | test.cpp:365:15:365:15 | p | -| test.cpp:365:15:365:15 | p | test.cpp:368:5:368:10 | ... += ... | -| test.cpp:365:15:365:15 | p | test.cpp:368:5:368:10 | ... += ... | -| test.cpp:368:5:368:10 | ... += ... | test.cpp:371:7:371:7 | p | -| test.cpp:368:5:368:10 | ... += ... | test.cpp:371:7:371:7 | p | -| test.cpp:368:5:368:10 | ... += ... | test.cpp:372:16:372:16 | p | -| test.cpp:368:5:368:10 | ... += ... | test.cpp:372:16:372:16 | p | -| test.cpp:371:7:371:7 | p | test.cpp:372:15:372:16 | Load: * ... | -| test.cpp:372:16:372:16 | p | test.cpp:372:15:372:16 | Load: * ... | | test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:16 | xs | | test.cpp:378:15:378:16 | xs | test.cpp:378:15:378:23 | ... + ... | | test.cpp:378:15:378:16 | xs | test.cpp:378:15:378:23 | ... + ... | @@ -753,6 +743,304 @@ edges | test.cpp:381:5:381:9 | ... ++ | test.cpp:384:14:384:16 | end | | test.cpp:381:5:381:9 | ... ++ | test.cpp:384:14:384:16 | end | | test.cpp:384:14:384:16 | end | test.cpp:384:13:384:16 | Load: * ... | +| test.cpp:388:14:388:27 | new[] | test.cpp:389:16:389:17 | xs | +| test.cpp:388:14:388:27 | new[] | test.cpp:392:3:392:4 | xs | +| test.cpp:399:14:399:27 | new[] | test.cpp:400:16:400:17 | xs | +| test.cpp:399:14:399:27 | new[] | test.cpp:402:5:402:6 | xs | +| test.cpp:410:14:410:27 | new[] | test.cpp:411:16:411:17 | xs | +| test.cpp:410:14:410:27 | new[] | test.cpp:413:5:413:6 | xs | +| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:15:411:23 | & ... | test.cpp:412:12:412:14 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:412:12:412:14 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:412:12:412:14 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:412:12:412:14 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:414:14:414:16 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:414:14:414:16 | end | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:411:16:411:17 | xs | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:17 | xs | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:17 | xs | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:17 | xs | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:17 | xs | test.cpp:411:16:411:23 | access to array | +| test.cpp:411:16:411:17 | xs | test.cpp:411:16:411:23 | access to array | +| test.cpp:411:16:411:17 | xs | test.cpp:412:12:412:14 | end | +| test.cpp:411:16:411:17 | xs | test.cpp:412:12:412:14 | end | +| test.cpp:411:16:411:17 | xs | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:411:16:411:17 | xs | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:411:16:411:17 | xs | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:411:16:411:17 | xs | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:411:16:411:17 | xs | test.cpp:414:9:414:10 | xs | +| test.cpp:411:16:411:17 | xs | test.cpp:414:14:414:16 | end | +| test.cpp:411:16:411:17 | xs | test.cpp:415:7:415:11 | access to array | +| test.cpp:411:16:411:23 | access to array | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:23 | access to array | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:23 | access to array | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:23 | access to array | test.cpp:411:15:411:23 | & ... | +| test.cpp:411:16:411:23 | access to array | test.cpp:412:12:412:14 | end | +| test.cpp:411:16:411:23 | access to array | test.cpp:412:12:412:14 | end | +| test.cpp:411:16:411:23 | access to array | test.cpp:414:14:414:16 | end | +| test.cpp:411:16:411:23 | access to array | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:411:16:411:23 | access to array | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:412:12:412:14 | end | test.cpp:414:14:414:16 | end | +| test.cpp:412:12:412:14 | end | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:412:12:412:14 | end | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:413:5:413:8 | ... ++ | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:414:9:414:10 | xs | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:414:9:414:10 | xs | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:413:5:413:8 | ... ++ | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:414:9:414:10 | xs | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:414:14:414:16 | end | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:415:7:415:11 | access to array | test.cpp:415:7:415:15 | Store: ... = ... | +| test.cpp:421:14:421:27 | new[] | test.cpp:422:16:422:17 | xs | +| test.cpp:421:14:421:27 | new[] | test.cpp:424:5:424:6 | xs | +| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:15:422:23 | & ... | test.cpp:423:12:423:14 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:423:12:423:14 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:423:12:423:14 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:423:12:423:14 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:425:18:425:20 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:425:18:425:20 | end | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:422:16:422:17 | xs | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:17 | xs | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:17 | xs | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:17 | xs | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:17 | xs | test.cpp:422:16:422:23 | access to array | +| test.cpp:422:16:422:17 | xs | test.cpp:422:16:422:23 | access to array | +| test.cpp:422:16:422:17 | xs | test.cpp:423:12:423:14 | end | +| test.cpp:422:16:422:17 | xs | test.cpp:423:12:423:14 | end | +| test.cpp:422:16:422:17 | xs | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:422:16:422:17 | xs | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:422:16:422:17 | xs | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:422:16:422:17 | xs | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:422:16:422:17 | xs | test.cpp:425:9:425:10 | xs | +| test.cpp:422:16:422:17 | xs | test.cpp:425:9:425:10 | xs | +| test.cpp:422:16:422:17 | xs | test.cpp:425:18:425:20 | end | +| test.cpp:422:16:422:17 | xs | test.cpp:426:7:426:8 | xs | +| test.cpp:422:16:422:17 | xs | test.cpp:426:7:426:11 | access to array | +| test.cpp:422:16:422:23 | access to array | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:23 | access to array | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:23 | access to array | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:23 | access to array | test.cpp:422:15:422:23 | & ... | +| test.cpp:422:16:422:23 | access to array | test.cpp:423:12:423:14 | end | +| test.cpp:422:16:422:23 | access to array | test.cpp:423:12:423:14 | end | +| test.cpp:422:16:422:23 | access to array | test.cpp:425:18:425:20 | end | +| test.cpp:422:16:422:23 | access to array | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:422:16:422:23 | access to array | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:423:12:423:14 | end | test.cpp:425:18:425:20 | end | +| test.cpp:423:12:423:14 | end | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:423:12:423:14 | end | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:424:5:424:8 | ... ++ | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:425:9:425:10 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:425:9:425:10 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:425:9:425:10 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:425:9:425:10 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:8 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:8 | xs | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:424:5:424:8 | ... ++ | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:425:9:425:10 | xs | test.cpp:426:7:426:8 | xs | +| test.cpp:425:9:425:10 | xs | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:425:9:425:10 | xs | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:425:18:425:20 | end | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:426:7:426:8 | xs | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:426:7:426:11 | access to array | test.cpp:426:7:426:15 | Store: ... = ... | +| test.cpp:432:14:432:27 | new[] | test.cpp:433:16:433:17 | xs | +| test.cpp:432:14:432:27 | new[] | test.cpp:436:5:436:6 | xs | +| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:15:433:23 | & ... | test.cpp:434:12:434:14 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:434:12:434:14 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:434:12:434:14 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:434:12:434:14 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:435:5:435:7 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:435:5:435:7 | end | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:433:16:433:17 | xs | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:17 | xs | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:17 | xs | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:17 | xs | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:17 | xs | test.cpp:433:16:433:23 | access to array | +| test.cpp:433:16:433:17 | xs | test.cpp:433:16:433:23 | access to array | +| test.cpp:433:16:433:17 | xs | test.cpp:434:12:434:14 | end | +| test.cpp:433:16:433:17 | xs | test.cpp:434:12:434:14 | end | +| test.cpp:433:16:433:17 | xs | test.cpp:435:5:435:7 | end | +| test.cpp:433:16:433:17 | xs | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:433:16:433:17 | xs | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:433:16:433:17 | xs | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:433:16:433:17 | xs | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:433:16:433:17 | xs | test.cpp:437:9:437:10 | xs | +| test.cpp:433:16:433:17 | xs | test.cpp:438:7:438:11 | access to array | +| test.cpp:433:16:433:23 | access to array | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:23 | access to array | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:23 | access to array | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:23 | access to array | test.cpp:433:15:433:23 | & ... | +| test.cpp:433:16:433:23 | access to array | test.cpp:434:12:434:14 | end | +| test.cpp:433:16:433:23 | access to array | test.cpp:434:12:434:14 | end | +| test.cpp:433:16:433:23 | access to array | test.cpp:435:5:435:7 | end | +| test.cpp:433:16:433:23 | access to array | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:433:16:433:23 | access to array | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:434:12:434:14 | end | test.cpp:435:5:435:7 | end | +| test.cpp:434:12:434:14 | end | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:434:12:434:14 | end | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:435:5:435:7 | end | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:436:5:436:8 | ... ++ | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:437:9:437:10 | xs | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:437:9:437:10 | xs | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:436:5:436:8 | ... ++ | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:437:9:437:10 | xs | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:438:7:438:11 | access to array | test.cpp:438:7:438:15 | Store: ... = ... | +| test.cpp:444:14:444:27 | new[] | test.cpp:445:16:445:17 | xs | +| test.cpp:444:14:444:27 | new[] | test.cpp:448:5:448:6 | xs | +| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:15:445:23 | & ... | test.cpp:446:3:446:5 | end | +| test.cpp:445:15:445:23 | & ... | test.cpp:446:3:446:5 | end | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:445:16:445:17 | xs | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:17 | xs | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:17 | xs | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:17 | xs | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:17 | xs | test.cpp:445:16:445:23 | access to array | +| test.cpp:445:16:445:17 | xs | test.cpp:445:16:445:23 | access to array | +| test.cpp:445:16:445:17 | xs | test.cpp:446:3:446:5 | end | +| test.cpp:445:16:445:17 | xs | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:445:16:445:17 | xs | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:445:16:445:17 | xs | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:445:16:445:17 | xs | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:445:16:445:17 | xs | test.cpp:449:9:449:10 | xs | +| test.cpp:445:16:445:17 | xs | test.cpp:450:7:450:11 | access to array | +| test.cpp:445:16:445:23 | access to array | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:23 | access to array | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:23 | access to array | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:23 | access to array | test.cpp:445:15:445:23 | & ... | +| test.cpp:445:16:445:23 | access to array | test.cpp:446:3:446:5 | end | +| test.cpp:445:16:445:23 | access to array | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:445:16:445:23 | access to array | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:446:3:446:5 | end | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:448:5:448:8 | ... ++ | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:449:9:449:10 | xs | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:449:9:449:10 | xs | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:448:5:448:8 | ... ++ | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:449:9:449:10 | xs | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:450:7:450:11 | access to array | test.cpp:450:7:450:15 | Store: ... = ... | +| test.cpp:456:14:456:31 | new[] | test.cpp:457:16:457:17 | xs | +| test.cpp:456:14:456:31 | new[] | test.cpp:460:5:460:6 | xs | +| test.cpp:468:14:468:27 | new[] | test.cpp:469:16:469:17 | xs | +| test.cpp:468:14:468:27 | new[] | test.cpp:472:5:472:6 | xs | +| test.cpp:480:14:480:27 | new[] | test.cpp:481:16:481:17 | xs | +| test.cpp:480:14:480:27 | new[] | test.cpp:484:5:484:6 | xs | +| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:15:481:23 | & ... | test.cpp:482:3:482:5 | end | +| test.cpp:481:15:481:23 | & ... | test.cpp:482:3:482:5 | end | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:481:16:481:17 | xs | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:17 | xs | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:17 | xs | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:17 | xs | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:17 | xs | test.cpp:481:16:481:23 | access to array | +| test.cpp:481:16:481:17 | xs | test.cpp:481:16:481:23 | access to array | +| test.cpp:481:16:481:17 | xs | test.cpp:482:3:482:5 | end | +| test.cpp:481:16:481:17 | xs | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:481:16:481:17 | xs | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:481:16:481:17 | xs | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:481:16:481:17 | xs | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:481:16:481:17 | xs | test.cpp:485:9:485:10 | xs | +| test.cpp:481:16:481:17 | xs | test.cpp:486:7:486:11 | access to array | +| test.cpp:481:16:481:23 | access to array | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:23 | access to array | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:23 | access to array | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:23 | access to array | test.cpp:481:15:481:23 | & ... | +| test.cpp:481:16:481:23 | access to array | test.cpp:482:3:482:5 | end | +| test.cpp:481:16:481:23 | access to array | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:481:16:481:23 | access to array | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:482:3:482:5 | end | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:484:5:484:8 | ... ++ | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:485:9:485:10 | xs | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:485:9:485:10 | xs | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:484:5:484:8 | ... ++ | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:485:9:485:10 | xs | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:486:7:486:11 | access to array | test.cpp:486:7:486:15 | Store: ... = ... | +| test.cpp:499:3:499:25 | ... = ... | test.cpp:499:7:499:8 | val indirection [post update] [xs] | +| test.cpp:499:7:499:8 | val indirection [post update] [xs] | test.cpp:500:3:500:5 | val indirection [xs] | +| test.cpp:499:12:499:25 | new[] | test.cpp:499:3:499:25 | ... = ... | +| test.cpp:500:3:500:5 | val indirection [xs] | test.cpp:500:7:500:8 | xs indirection | +| test.cpp:500:7:500:8 | xs indirection | test.cpp:500:7:500:8 | xs | +| test.cpp:510:16:510:33 | new[] | test.cpp:512:7:512:8 | xs | +| test.cpp:520:14:520:27 | new[] | test.cpp:526:5:526:6 | xs | +| test.cpp:532:14:532:27 | new[] | test.cpp:537:5:537:6 | xs | +| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:6 | xs | +| test.cpp:548:5:548:6 | xs | test.cpp:548:5:548:15 | access to array | +| test.cpp:548:5:548:15 | access to array | test.cpp:548:5:548:19 | Store: ... = ... | +| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:6 | xs | +| test.cpp:559:5:559:6 | xs | test.cpp:559:5:559:15 | access to array | +| test.cpp:559:5:559:15 | access to array | test.cpp:559:5:559:19 | Store: ... = ... | +| test.cpp:565:14:565:27 | new[] | test.cpp:570:5:570:6 | xs | +| test.cpp:576:14:576:27 | new[] | test.cpp:581:5:581:6 | xs | +| test.cpp:587:14:587:31 | new[] | test.cpp:592:5:592:6 | xs | +| test.cpp:598:14:598:31 | new[] | test.cpp:603:5:603:6 | xs | +| test.cpp:609:14:609:31 | new[] | test.cpp:614:5:614:6 | xs | +| test.cpp:620:14:620:31 | new[] | test.cpp:625:5:625:6 | xs | +| test.cpp:631:14:631:31 | new[] | test.cpp:636:5:636:6 | xs | +| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:6 | xs | +| test.cpp:647:5:647:6 | xs | test.cpp:647:5:647:15 | access to array | +| test.cpp:647:5:647:15 | access to array | test.cpp:647:5:647:19 | Store: ... = ... | +| test.cpp:652:14:652:27 | new[] | test.cpp:653:16:653:17 | xs | +| test.cpp:652:14:652:27 | new[] | test.cpp:656:3:656:4 | xs | +| test.cpp:653:16:653:17 | xs | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:653:16:653:17 | xs | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:653:16:653:17 | xs | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:653:16:653:17 | xs | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:653:16:653:17 | xs | test.cpp:657:7:657:8 | xs | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:656:3:656:6 | ... ++ | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:657:7:657:8 | xs | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:657:7:657:8 | xs | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:662:3:662:11 | Store: ... = ... | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:662:3:662:11 | Store: ... = ... | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:662:3:662:11 | Store: ... = ... | +| test.cpp:656:3:656:6 | ... ++ | test.cpp:662:3:662:11 | Store: ... = ... | +| test.cpp:657:7:657:8 | xs | test.cpp:662:3:662:11 | Store: ... = ... | +| test.cpp:667:14:667:31 | new[] | test.cpp:675:7:675:8 | xs | +| test.cpp:675:7:675:8 | xs | test.cpp:675:7:675:19 | access to array | +| test.cpp:675:7:675:19 | access to array | test.cpp:675:7:675:23 | Store: ... = ... | nodes | test.cpp:4:15:4:20 | call to malloc | semmle.label | call to malloc | | test.cpp:5:15:5:15 | p | semmle.label | p | @@ -845,6 +1133,7 @@ nodes | test.cpp:82:5:82:28 | ... = ... | semmle.label | ... = ... | | test.cpp:82:9:82:13 | arr indirection [post update] [begin] | semmle.label | arr indirection [post update] [begin] | | test.cpp:82:17:82:22 | call to malloc | semmle.label | call to malloc | +| test.cpp:83:5:83:7 | arr indirection [begin] | semmle.label | arr indirection [begin] | | test.cpp:83:5:83:30 | ... = ... | semmle.label | ... = ... | | test.cpp:83:9:83:11 | arr indirection [post update] [end] | semmle.label | arr indirection [post update] [end] | | test.cpp:83:15:83:17 | arr indirection [begin] | semmle.label | arr indirection [begin] | @@ -904,6 +1193,7 @@ nodes | test.cpp:124:15:124:20 | call to malloc | semmle.label | call to malloc | | test.cpp:125:5:125:17 | ... = ... | semmle.label | ... = ... | | test.cpp:125:9:125:13 | arr indirection [post update] [begin] | semmle.label | arr indirection [post update] [begin] | +| test.cpp:126:5:126:7 | arr indirection [begin] | semmle.label | arr indirection [begin] | | test.cpp:126:15:126:15 | p | semmle.label | p | | test.cpp:129:11:129:13 | arr indirection [begin] | semmle.label | arr indirection [begin] | | test.cpp:129:15:129:19 | begin | semmle.label | begin | @@ -919,6 +1209,7 @@ nodes | test.cpp:143:5:143:29 | ... = ... | semmle.label | ... = ... | | test.cpp:143:10:143:14 | arr indirection [post update] [begin] | semmle.label | arr indirection [post update] [begin] | | test.cpp:143:18:143:23 | call to malloc | semmle.label | call to malloc | +| test.cpp:144:5:144:7 | arr indirection [begin] | semmle.label | arr indirection [begin] | | test.cpp:144:5:144:32 | ... = ... | semmle.label | ... = ... | | test.cpp:144:10:144:12 | arr indirection [post update] [end] | semmle.label | arr indirection [post update] [end] | | test.cpp:144:16:144:18 | arr indirection [begin] | semmle.label | arr indirection [begin] | @@ -1057,10 +1348,6 @@ nodes | test.cpp:342:8:342:17 | * ... | semmle.label | * ... | | test.cpp:347:14:347:27 | new[] | semmle.label | new[] | | test.cpp:348:15:348:16 | xs | semmle.label | xs | -| test.cpp:350:15:350:19 | Load: * ... | semmle.label | Load: * ... | -| test.cpp:350:16:350:19 | ... ++ | semmle.label | ... ++ | -| test.cpp:350:16:350:19 | ... ++ | semmle.label | ... ++ | -| test.cpp:350:16:350:19 | ... ++ | semmle.label | ... ++ | | test.cpp:355:14:355:27 | new[] | semmle.label | new[] | | test.cpp:356:15:356:16 | xs | semmle.label | xs | | test.cpp:356:15:356:23 | ... + ... | semmle.label | ... + ... | @@ -1080,11 +1367,6 @@ nodes | test.cpp:359:16:359:31 | ... + ... | semmle.label | ... + ... | | test.cpp:363:14:363:27 | new[] | semmle.label | new[] | | test.cpp:365:15:365:15 | p | semmle.label | p | -| test.cpp:368:5:368:10 | ... += ... | semmle.label | ... += ... | -| test.cpp:368:5:368:10 | ... += ... | semmle.label | ... += ... | -| test.cpp:371:7:371:7 | p | semmle.label | p | -| test.cpp:372:15:372:16 | Load: * ... | semmle.label | Load: * ... | -| test.cpp:372:16:372:16 | p | semmle.label | p | | test.cpp:377:14:377:27 | new[] | semmle.label | new[] | | test.cpp:378:15:378:16 | xs | semmle.label | xs | | test.cpp:378:15:378:23 | ... + ... | semmle.label | ... + ... | @@ -1096,6 +1378,162 @@ nodes | test.cpp:381:5:381:9 | ... ++ | semmle.label | ... ++ | | test.cpp:384:13:384:16 | Load: * ... | semmle.label | Load: * ... | | test.cpp:384:14:384:16 | end | semmle.label | end | +| test.cpp:388:14:388:27 | new[] | semmle.label | new[] | +| test.cpp:389:16:389:17 | xs | semmle.label | xs | +| test.cpp:392:3:392:4 | xs | semmle.label | xs | +| test.cpp:399:14:399:27 | new[] | semmle.label | new[] | +| test.cpp:400:16:400:17 | xs | semmle.label | xs | +| test.cpp:402:5:402:6 | xs | semmle.label | xs | +| test.cpp:410:14:410:27 | new[] | semmle.label | new[] | +| test.cpp:411:15:411:23 | & ... | semmle.label | & ... | +| test.cpp:411:15:411:23 | & ... | semmle.label | & ... | +| test.cpp:411:15:411:23 | & ... | semmle.label | & ... | +| test.cpp:411:15:411:23 | & ... | semmle.label | & ... | +| test.cpp:411:16:411:17 | xs | semmle.label | xs | +| test.cpp:411:16:411:23 | access to array | semmle.label | access to array | +| test.cpp:411:16:411:23 | access to array | semmle.label | access to array | +| test.cpp:412:12:412:14 | end | semmle.label | end | +| test.cpp:412:12:412:14 | end | semmle.label | end | +| test.cpp:413:5:413:6 | xs | semmle.label | xs | +| test.cpp:413:5:413:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:413:5:413:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:413:5:413:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:413:5:413:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:414:9:414:10 | xs | semmle.label | xs | +| test.cpp:414:14:414:16 | end | semmle.label | end | +| test.cpp:415:7:415:11 | access to array | semmle.label | access to array | +| test.cpp:415:7:415:15 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:421:14:421:27 | new[] | semmle.label | new[] | +| test.cpp:422:15:422:23 | & ... | semmle.label | & ... | +| test.cpp:422:15:422:23 | & ... | semmle.label | & ... | +| test.cpp:422:15:422:23 | & ... | semmle.label | & ... | +| test.cpp:422:15:422:23 | & ... | semmle.label | & ... | +| test.cpp:422:16:422:17 | xs | semmle.label | xs | +| test.cpp:422:16:422:23 | access to array | semmle.label | access to array | +| test.cpp:422:16:422:23 | access to array | semmle.label | access to array | +| test.cpp:423:12:423:14 | end | semmle.label | end | +| test.cpp:423:12:423:14 | end | semmle.label | end | +| test.cpp:424:5:424:6 | xs | semmle.label | xs | +| test.cpp:424:5:424:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:424:5:424:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:424:5:424:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:424:5:424:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:425:9:425:10 | xs | semmle.label | xs | +| test.cpp:425:9:425:10 | xs | semmle.label | xs | +| test.cpp:425:18:425:20 | end | semmle.label | end | +| test.cpp:426:7:426:8 | xs | semmle.label | xs | +| test.cpp:426:7:426:11 | access to array | semmle.label | access to array | +| test.cpp:426:7:426:15 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:432:14:432:27 | new[] | semmle.label | new[] | +| test.cpp:433:15:433:23 | & ... | semmle.label | & ... | +| test.cpp:433:15:433:23 | & ... | semmle.label | & ... | +| test.cpp:433:15:433:23 | & ... | semmle.label | & ... | +| test.cpp:433:15:433:23 | & ... | semmle.label | & ... | +| test.cpp:433:16:433:17 | xs | semmle.label | xs | +| test.cpp:433:16:433:23 | access to array | semmle.label | access to array | +| test.cpp:433:16:433:23 | access to array | semmle.label | access to array | +| test.cpp:434:12:434:14 | end | semmle.label | end | +| test.cpp:434:12:434:14 | end | semmle.label | end | +| test.cpp:435:5:435:7 | end | semmle.label | end | +| test.cpp:436:5:436:6 | xs | semmle.label | xs | +| test.cpp:436:5:436:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:436:5:436:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:436:5:436:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:436:5:436:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:437:9:437:10 | xs | semmle.label | xs | +| test.cpp:438:7:438:11 | access to array | semmle.label | access to array | +| test.cpp:438:7:438:15 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:444:14:444:27 | new[] | semmle.label | new[] | +| test.cpp:445:15:445:23 | & ... | semmle.label | & ... | +| test.cpp:445:15:445:23 | & ... | semmle.label | & ... | +| test.cpp:445:15:445:23 | & ... | semmle.label | & ... | +| test.cpp:445:15:445:23 | & ... | semmle.label | & ... | +| test.cpp:445:16:445:17 | xs | semmle.label | xs | +| test.cpp:445:16:445:23 | access to array | semmle.label | access to array | +| test.cpp:445:16:445:23 | access to array | semmle.label | access to array | +| test.cpp:446:3:446:5 | end | semmle.label | end | +| test.cpp:448:5:448:6 | xs | semmle.label | xs | +| test.cpp:448:5:448:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:448:5:448:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:448:5:448:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:448:5:448:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:449:9:449:10 | xs | semmle.label | xs | +| test.cpp:450:7:450:11 | access to array | semmle.label | access to array | +| test.cpp:450:7:450:15 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:456:14:456:31 | new[] | semmle.label | new[] | +| test.cpp:457:16:457:17 | xs | semmle.label | xs | +| test.cpp:460:5:460:6 | xs | semmle.label | xs | +| test.cpp:468:14:468:27 | new[] | semmle.label | new[] | +| test.cpp:469:16:469:17 | xs | semmle.label | xs | +| test.cpp:472:5:472:6 | xs | semmle.label | xs | +| test.cpp:480:14:480:27 | new[] | semmle.label | new[] | +| test.cpp:481:15:481:23 | & ... | semmle.label | & ... | +| test.cpp:481:15:481:23 | & ... | semmle.label | & ... | +| test.cpp:481:15:481:23 | & ... | semmle.label | & ... | +| test.cpp:481:15:481:23 | & ... | semmle.label | & ... | +| test.cpp:481:16:481:17 | xs | semmle.label | xs | +| test.cpp:481:16:481:23 | access to array | semmle.label | access to array | +| test.cpp:481:16:481:23 | access to array | semmle.label | access to array | +| test.cpp:482:3:482:5 | end | semmle.label | end | +| test.cpp:484:5:484:6 | xs | semmle.label | xs | +| test.cpp:484:5:484:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:484:5:484:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:484:5:484:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:484:5:484:8 | ... ++ | semmle.label | ... ++ | +| test.cpp:485:9:485:10 | xs | semmle.label | xs | +| test.cpp:486:7:486:11 | access to array | semmle.label | access to array | +| test.cpp:486:7:486:15 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:499:3:499:25 | ... = ... | semmle.label | ... = ... | +| test.cpp:499:7:499:8 | val indirection [post update] [xs] | semmle.label | val indirection [post update] [xs] | +| test.cpp:499:12:499:25 | new[] | semmle.label | new[] | +| test.cpp:500:3:500:5 | val indirection [xs] | semmle.label | val indirection [xs] | +| test.cpp:500:7:500:8 | xs | semmle.label | xs | +| test.cpp:500:7:500:8 | xs indirection | semmle.label | xs indirection | +| test.cpp:510:16:510:33 | new[] | semmle.label | new[] | +| test.cpp:512:7:512:8 | xs | semmle.label | xs | +| test.cpp:520:14:520:27 | new[] | semmle.label | new[] | +| test.cpp:526:5:526:6 | xs | semmle.label | xs | +| test.cpp:532:14:532:27 | new[] | semmle.label | new[] | +| test.cpp:537:5:537:6 | xs | semmle.label | xs | +| test.cpp:543:14:543:27 | new[] | semmle.label | new[] | +| test.cpp:548:5:548:6 | xs | semmle.label | xs | +| test.cpp:548:5:548:15 | access to array | semmle.label | access to array | +| test.cpp:548:5:548:19 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:554:14:554:27 | new[] | semmle.label | new[] | +| test.cpp:559:5:559:6 | xs | semmle.label | xs | +| test.cpp:559:5:559:15 | access to array | semmle.label | access to array | +| test.cpp:559:5:559:19 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:565:14:565:27 | new[] | semmle.label | new[] | +| test.cpp:570:5:570:6 | xs | semmle.label | xs | +| test.cpp:576:14:576:27 | new[] | semmle.label | new[] | +| test.cpp:581:5:581:6 | xs | semmle.label | xs | +| test.cpp:587:14:587:31 | new[] | semmle.label | new[] | +| test.cpp:592:5:592:6 | xs | semmle.label | xs | +| test.cpp:598:14:598:31 | new[] | semmle.label | new[] | +| test.cpp:603:5:603:6 | xs | semmle.label | xs | +| test.cpp:609:14:609:31 | new[] | semmle.label | new[] | +| test.cpp:614:5:614:6 | xs | semmle.label | xs | +| test.cpp:620:14:620:31 | new[] | semmle.label | new[] | +| test.cpp:625:5:625:6 | xs | semmle.label | xs | +| test.cpp:631:14:631:31 | new[] | semmle.label | new[] | +| test.cpp:636:5:636:6 | xs | semmle.label | xs | +| test.cpp:642:14:642:31 | new[] | semmle.label | new[] | +| test.cpp:647:5:647:6 | xs | semmle.label | xs | +| test.cpp:647:5:647:15 | access to array | semmle.label | access to array | +| test.cpp:647:5:647:19 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:652:14:652:27 | new[] | semmle.label | new[] | +| test.cpp:653:16:653:17 | xs | semmle.label | xs | +| test.cpp:656:3:656:4 | xs | semmle.label | xs | +| test.cpp:656:3:656:6 | ... ++ | semmle.label | ... ++ | +| test.cpp:656:3:656:6 | ... ++ | semmle.label | ... ++ | +| test.cpp:656:3:656:6 | ... ++ | semmle.label | ... ++ | +| test.cpp:656:3:656:6 | ... ++ | semmle.label | ... ++ | +| test.cpp:657:7:657:8 | xs | semmle.label | xs | +| test.cpp:662:3:662:11 | Store: ... = ... | semmle.label | Store: ... = ... | +| test.cpp:667:14:667:31 | new[] | semmle.label | new[] | +| test.cpp:675:7:675:8 | xs | semmle.label | xs | +| test.cpp:675:7:675:19 | access to array | semmle.label | access to array | +| test.cpp:675:7:675:23 | Store: ... = ... | semmle.label | Store: ... = ... | subpaths #select | test.cpp:6:14:6:15 | Load: * ... | test.cpp:4:15:4:20 | call to malloc | test.cpp:6:14:6:15 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:4:15:4:20 | call to malloc | call to malloc | test.cpp:5:19:5:22 | size | size | @@ -1118,8 +1556,16 @@ subpaths | test.cpp:264:13:264:14 | Load: * ... | test.cpp:260:13:260:24 | new[] | test.cpp:264:13:264:14 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:260:13:260:24 | new[] | new[] | test.cpp:261:19:261:21 | len | len | | test.cpp:274:5:274:10 | Store: ... = ... | test.cpp:270:13:270:24 | new[] | test.cpp:274:5:274:10 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:270:13:270:24 | new[] | new[] | test.cpp:271:19:271:21 | len | len | | test.cpp:308:5:308:29 | Store: ... = ... | test.cpp:304:15:304:26 | new[] | test.cpp:308:5:308:29 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:304:15:304:26 | new[] | new[] | test.cpp:308:8:308:10 | ... + ... | ... + ... | -| test.cpp:350:15:350:19 | Load: * ... | test.cpp:347:14:347:27 | new[] | test.cpp:350:15:350:19 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:347:14:347:27 | new[] | new[] | test.cpp:348:20:348:23 | size | size | | test.cpp:358:14:358:26 | Load: * ... | test.cpp:355:14:355:27 | new[] | test.cpp:358:14:358:26 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@ + 1. | test.cpp:355:14:355:27 | new[] | new[] | test.cpp:356:20:356:23 | size | size | | test.cpp:359:14:359:32 | Load: * ... | test.cpp:355:14:355:27 | new[] | test.cpp:359:14:359:32 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@ + 2. | test.cpp:355:14:355:27 | new[] | new[] | test.cpp:356:20:356:23 | size | size | -| test.cpp:372:15:372:16 | Load: * ... | test.cpp:363:14:363:27 | new[] | test.cpp:372:15:372:16 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:363:14:363:27 | new[] | new[] | test.cpp:365:19:365:22 | size | size | | test.cpp:384:13:384:16 | Load: * ... | test.cpp:377:14:377:27 | new[] | test.cpp:384:13:384:16 | Load: * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:377:14:377:27 | new[] | new[] | test.cpp:378:20:378:23 | size | size | +| test.cpp:415:7:415:15 | Store: ... = ... | test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:410:14:410:27 | new[] | new[] | test.cpp:411:19:411:22 | size | size | +| test.cpp:426:7:426:15 | Store: ... = ... | test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:421:14:421:27 | new[] | new[] | test.cpp:422:19:422:22 | size | size | +| test.cpp:438:7:438:15 | Store: ... = ... | test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:432:14:432:27 | new[] | new[] | test.cpp:433:19:433:22 | size | size | +| test.cpp:450:7:450:15 | Store: ... = ... | test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:444:14:444:27 | new[] | new[] | test.cpp:445:19:445:22 | size | size | +| test.cpp:486:7:486:15 | Store: ... = ... | test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@ + 498. | test.cpp:480:14:480:27 | new[] | new[] | test.cpp:481:19:481:22 | size | size | +| test.cpp:548:5:548:19 | Store: ... = ... | test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:543:14:543:27 | new[] | new[] | test.cpp:548:8:548:14 | src_pos | src_pos | +| test.cpp:559:5:559:19 | Store: ... = ... | test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:554:14:554:27 | new[] | new[] | test.cpp:559:8:559:14 | src_pos | src_pos | +| test.cpp:647:5:647:19 | Store: ... = ... | test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:642:14:642:31 | new[] | new[] | test.cpp:647:8:647:14 | src_pos | src_pos | +| test.cpp:662:3:662:11 | Store: ... = ... | test.cpp:652:14:652:27 | new[] | test.cpp:662:3:662:11 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@ + 1. | test.cpp:652:14:652:27 | new[] | new[] | test.cpp:653:19:653:22 | size | size | +| test.cpp:675:7:675:23 | Store: ... = ... | test.cpp:667:14:667:31 | new[] | test.cpp:675:7:675:23 | Store: ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:667:14:667:31 | new[] | new[] | test.cpp:675:10:675:18 | ... ++ | ... ++ | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/test.cpp index 7269af0153f..13e373bac10 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/pointer-deref/test.cpp @@ -347,7 +347,7 @@ void test24(unsigned size) { char *xs = new char[size]; char *end = xs + size; if (xs < end) { - int val = *xs++; // GOOD [FALSE POSITIVE] + int val = *xs++; // GOOD } } @@ -369,7 +369,7 @@ void test26(unsigned size) { } if (p < end) { - int val = *p; // GOOD [FALSE POSITIVE] + int val = *p; // GOOD } } @@ -383,3 +383,295 @@ void test27(unsigned size, bool b) { int val = *end; // BAD } + +void test28(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs >= end) + return; + xs++; + if (xs >= end) + return; + xs[0] = 0; // GOOD +} + +void test28_simple(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs < end) { + xs++; + if (xs < end) { + xs[0] = 0; // GOOD + } + } +} + +void test28_simple2(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs < end) { + xs++; + if (xs < end + 1) { + xs[0] = 0; // BAD + } + } +} + +void test28_simple3(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs < end) { + xs++; + if (xs - 1 < end) { + xs[0] = 0; // BAD + } + } +} + +void test28_simple4(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs < end) { + end++; + xs++; + if (xs < end) { + xs[0] = 0; // BAD + } + } +} + +void test28_simple5(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + end++; + if (xs < end) { + xs++; + if (xs < end) { + xs[0] = 0; // BAD + } + } +} + +void test28_simple6(unsigned size) { + char *xs = new char[size + 1]; + char *end = &xs[size]; + end++; + if (xs < end) { + xs++; + if (xs < end) { + xs[0] = 0; // GOOD + } + } +} + +void test28_simple7(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + end++; + if (xs < end) { + xs++; + if (xs < end - 1) { + xs[0] = 0; // GOOD + } + } +} + +void test28_simple8(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + end += 500; + if (xs < end) { + xs++; + if (xs < end - 1) { + xs[0] = 0; // BAD + } + } +} + +struct test29_struct { + char* xs; +}; + +void test29(unsigned size) { + test29_struct val; + val.xs = new char[size]; + size++; + val.xs = new char[size]; + val.xs[size - 1] = 0; // GOOD +} + +void test30(int *size) +{ + int new_size = 0, tmp_size = 0; + + test30(&tmp_size); + if (tmp_size + 1 > new_size) { + new_size = tmp_size + 1; + char *xs = new char[new_size]; + for (int i = 0; i < new_size; i++) { + xs[i] = 0; // GOOD + } + } + *size = new_size; +} + +void test31(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + unsigned dst_pos = src_pos; + if (dst_pos < size - 3) { + xs[dst_pos++] = 0; // GOOD + } +} + +void test31_simple1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple2(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size + 1) { + xs[src_pos] = 0; // BAD + } +} + +void test31_simple3(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos - 1 < size) { + xs[src_pos] = 0; // BAD + } +} + +void test31_simple4(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size - 1) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple5(unsigned size, unsigned src_pos) +{ + char *xs = new char[size]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos + 1 < size) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple1_plus1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple2_plus1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size + 1) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple3_plus1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos - 1 < size) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple4_plus1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size - 1) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple5_plus1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos + 1 < size) { + xs[src_pos] = 0; // GOOD + } +} + +void test31_simple1_sub1(unsigned size, unsigned src_pos) +{ + char *xs = new char[size - 1]; + if (src_pos > size) { + src_pos = size; + } + if (src_pos < size) { + xs[src_pos] = 0; // BAD + } +} + +void test32(unsigned size) { + char *xs = new char[size]; + char *end = &xs[size]; + if (xs >= end) + return; + xs++; + if (xs >= end) + return; + xs++; + if (xs >= end) + return; + xs[0] = 0; // GOOD [FALSE POSITIVE] +} + +void test33(unsigned size, unsigned src_pos) +{ + char *xs = new char[size + 1]; + if (src_pos > size) { + src_pos = size; + } + unsigned dst_pos = src_pos; + while (dst_pos < size - 1) { + dst_pos++; + if (true) + xs[dst_pos++] = 0; // GOOD [FALSE POSITIVE] + } +} diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index acf233ed2ee..eb9e8efb1d2 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -67,6 +67,8 @@ postWithInFlow | ref.cpp:109:9:109:11 | val [post update] | PostUpdateNode should not be the target of local flow. | | ref.cpp:113:11:113:13 | val [post update] | PostUpdateNode should not be the target of local flow. | | ref.cpp:115:11:115:13 | val [post update] | PostUpdateNode should not be the target of local flow. | +| self_parameter_flow.cpp:3:4:3:5 | ps [inner post update] | PostUpdateNode should not be the target of local flow. | +| self_parameter_flow.cpp:8:9:8:9 | s [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:91:3:91:9 | source1 [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:115:3:115:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:115:4:115:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. | @@ -128,6 +130,10 @@ postWithInFlow | test.cpp:690:3:690:3 | s [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:694:4:694:6 | buf [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:704:23:704:25 | buf [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:715:25:715:25 | c [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:728:3:728:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:728:4:728:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:734:41:734:41 | x [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp new file mode 100644 index 00000000000..cac7f222c30 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self-Iterator.cpp @@ -0,0 +1,21 @@ +#include "../../../include/iterator.h" +int source(); + +template +void sink(T); + +template<> struct std::iterator_traits +{ // get traits from integer type + typedef std::input_iterator_tag iterator_category; + typedef unsigned long value_type; + typedef unsigned long difference_type; + typedef unsigned long distance_type; + typedef unsigned long * pointer; + typedef unsigned long& reference; +}; + + +int test() { + unsigned long x = source(); + sink(x); // $ ast ir +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/self_parameter_flow.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self_parameter_flow.cpp new file mode 100644 index 00000000000..2298e644b05 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/self_parameter_flow.cpp @@ -0,0 +1,14 @@ +void incr(unsigned char **ps) // $ ast-def=ps ir-def=*ps ir-def=**ps +{ + *ps += 1; +} + +void callincr(unsigned char *s) // $ ast-def=s +{ + incr(&s); +} + +void test(unsigned char *s) // $ ast-def=s +{ + callincr(s); // $ flow +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index 915a8421475..c5004157af1 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -702,4 +702,90 @@ void call_increment_buf(int** buf) { // $ ast-def=buf void test_conflation_regression(int* source) { // $ ast-def=source int* buf = source; call_increment_buf(&buf); +} + +void write_to_star_star_p(unsigned char **p) // $ ast-def=p ir-def=**p ir-def=*p +{ + **p = 0; +} + +void write_to_star_buf(unsigned char *buf) // $ ast-def=buf +{ + unsigned char *c = buf; + write_to_star_star_p(&c); +} + +void test_write_to_star_buf(unsigned char *source) // $ ast-def=source +{ + write_to_star_buf(source); + sink(*source); // clean +} + +void does_not_write_source_to_dereference(int *p) // $ ast-def=p ir-def=*p +{ + int x = source(); + p = &x; + *p = 42; +} + +void test_does_not_write_source_to_dereference() +{ + int x; + does_not_write_source_to_dereference(&x); + sink(x); // $ ast,ir=733:7 SPURIOUS: ast,ir=726:11 +} + +void sometimes_calls_sink_eq(int x, int n) { + if(n == 0) { + sink(x); // $ ast,ir=751:27 ast,ir=755:32 SPURIOUS: ast=749:27 ast,ir=753:32 // IR spurious results because we only have call contexts of depth 1 + } +} + +void call_sometimes_calls_sink_eq(int x, int n) { + sometimes_calls_sink_eq(x, n); +} + +void test_sometimes_calls_sink_eq_1() { + sometimes_calls_sink_eq(source(), 1); + sometimes_calls_sink_eq(0, 0); + sometimes_calls_sink_eq(source(), 0); + + call_sometimes_calls_sink_eq(source(), 1); + call_sometimes_calls_sink_eq(0, 0); + call_sometimes_calls_sink_eq(source(), 0); +} + +void sometimes_calls_sink_lt(int x, int n) { + if(n < 10) { + sink(x); // $ ast,ir=771:27 ast,ir=775:32 SPURIOUS: ast=769:27 ast,ir=773:32 // IR spurious results because we only have call contexts of depth 1 + } +} + +void call_sometimes_calls_sink_lt(int x, int n) { + sometimes_calls_sink_lt(x, n); +} + +void test_sometimes_calls_sink_lt() { + sometimes_calls_sink_lt(source(), 10); + sometimes_calls_sink_lt(0, 0); + sometimes_calls_sink_lt(source(), 2); + + call_sometimes_calls_sink_lt(source(), 10); + call_sometimes_calls_sink_lt(0, 0); + call_sometimes_calls_sink_lt(source(), 2); + +} + +void sometimes_calls_sink_switch(int x, int n) { + switch(n) { + case 0: + sink(x); // $ ast,ir=790:31 SPURIOUS: ast,ir=788:31 // IR spurious results because IRGuard doesn't understand switch statements. + break; + } +} + +void test_sometimes_calls_sink_switch() { + sometimes_calls_sink_switch(source(), 1); + sometimes_calls_sink_switch(0, 0); + sometimes_calls_sink_switch(source(), 0); } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.expected new file mode 100644 index 00000000000..48de9172b36 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.ql b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.ql new file mode 100644 index 00000000000..c6ea9c5c96f --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test_self_parameter_flow.ql @@ -0,0 +1,34 @@ +import cpp +import semmle.code.cpp.dataflow.new.DataFlow +import TestUtilities.InlineExpectationsTest + +module TestConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.getLocation().getFile().getBaseName() = "self_parameter_flow.cpp" and + source.asIndirectArgument() = + any(Call call | call.getTarget().hasName("callincr")).getAnArgument() + } + + predicate isSink(DataFlow::Node sink) { + sink.asDefiningArgument() = + any(Call call | call.getTarget().hasName("callincr")).getAnArgument() + } +} + +import DataFlow::Global + +module TestSelfParameterFlow implements TestSig { + string getARelevantTag() { result = "flow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node sink | + flowTo(sink) and + location = sink.getLocation() and + element = sink.toString() and + tag = "flow" and + value = "" + ) + } +} + +import MakeTest diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected index 0a52d928028..b40148f4950 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected @@ -42,3 +42,5 @@ | test.cpp:551:9:551:9 | y | test.cpp:552:28:552:28 | y | | test.cpp:595:8:595:9 | xs | test.cpp:596:3:596:4 | xs | | test.cpp:595:8:595:9 | xs | test.cpp:597:9:597:10 | xs | +| test.cpp:733:7:733:7 | x | test.cpp:734:41:734:41 | x | +| test.cpp:733:7:733:7 | x | test.cpp:735:8:735:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/fields/clearning.cpp b/cpp/ql/test/library-tests/dataflow/fields/clearning.cpp new file mode 100644 index 00000000000..0347c6725d2 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/fields/clearning.cpp @@ -0,0 +1,182 @@ +// We want a source of user input that can be both a pointer and a non-pointer. So we +// hack the testing a bit by providing an overload that takes a boolean to distinguish +// between the two while still satisfying the test requirement that the function must +// be named `user_input`. +int user_input(); +int* user_input(bool); +void sink(...); +void argument_source(int*); + +struct S { + int** x; +}; + +void test() +{ + { + S s; + **s.x = user_input(); + *s.x = 0; + sink(**s.x); // clean, as *s.x was overwritten and that contains the tainted **s.x + } + + { + S s; + **s.x = user_input(); + **s.x = 0; + sink(**s.x); // clean, as **s.x was overwritten and tainted + } + + { + S s; + *s.x = user_input(true); + **s.x = 0; + sink(*s.x); // $ ir // not clean, as **s.x was overwritten and is neither equal nor contains the tainted *s.x + } + + { + S s; + *s.x = user_input(true); + s.x = 0; + sink(*s.x); // clean, as s.x was overwritten and contains the tainted *s.x + } + + { + S s; + **s.x = user_input(); + s.x = 0; + sink(*s.x); // clean, as s.x was overwritten and contains the tainted **s.x + } + + { + S s; + *s.x = user_input(true); + s.x++; + sink(s.x); // $ SPURIOUS: ir ast // Cannot tell the difference with the whole array being tainted + } + + { + S s; + **s.x = user_input(); + s.x++; + sink(s.x); // $ SPURIOUS: ir // Cannot tell the difference with the whole array being tainted + } +} + +struct S2 +{ + int* val; +}; + +void test_uncertain_write_is_not_clear() +{ + S2 s; + argument_source(s.val); + s.val[10] = 0; + sink(*s.val); // $ ir MISSING: ast // not clean, as all elements of s.val are tainted and only one is overwitten +} + +void test_indirection_should_not_be_cleared_with_write_1() { + S2 s; + argument_source(s.val); // *s.val is tainted + s.val[0] = 0; + s.val = s.val + 1; + sink(*s.val); // $ ir MISSING: ast // not clean, as all elements of s.val are tainted, only one if overwritten, and the updated pointer still points to tainted elements +} + +void test_indirection_should_not_be_cleared_with_write_2() { + S2 s; + argument_source(s.val); // *s.val is tainted + *s.val++ = 0; + sink(*s.val); // $ ir MISSING: ast // not clean, as all elements of s.val are tainted, only one if overwritten, and the updated pointer still points to tainted elements +} + +void test_indirection_should_not_be_cleared_without_write_1() { + S2 s; + argument_source(s.val); // *s.val is tainted + s.val = s.val + 1; + sink(*s.val); // $ ir MISSING: ast // not clean, as all elements of s.val are tainted and the updated pointer still points to tainted elements +} + +void test_indirection_should_not_be_cleared_without_write_2() { + S2 s; + argument_source(s.val); // *s.val is tainted + s.val++; + sink(*s.val); // $ ir MISSING: ast // not clean, as all elements of s.val are tainted and the updated pointer still points to tainted elements +} + +void test_indirection_should_not_be_cleared_without_write_3() { + S2 s; + argument_source(s.val); // *s.val is tainted + ++s.val; + sink(*s.val); // $ ir MISSING: ast // not clean as the pointer is only moved to the next tainted element +} + +void test_indirection_should_not_be_cleared_without_write_4() { + S2 s; + argument_source(s.val); // *s.val is tainted + s.val += 1; + sink(*s.val); // $ ir MISSING: ast // not clean as the pointer is only moved to the next tainted element +} + +void test_direct_should_be_cleared() { + S2 s; + s.val = user_input(true); // s.val is tainted + s.val += 1; + sink(s.val); // $ SPURIOUS: ast // clean, as s.val was overwritten and tainted +} + +void test_direct_should_be_cleared_post() { + S2 s; + s.val = user_input(true); // s.val is tainted + s.val++; + sink(s.val); // $ SPURIOUS: ast // clean, as s.val was overwritten and tainted +} + +void test_direct_should_be_cleared_pre() { + S2 s; + s.val = user_input(true); // s.val is tainted + ++s.val; + sink(s.val); // $ SPURIOUS: ast // // clean, as s.x was overwritten and tainted +} + +struct S3 +{ + int val; +}; + +void test_direct() { + { + S3 s; + s.val = user_input(); + sink(s.val); // $ ir ast + } + + { + S3 s; + s.val = user_input(); + s.val = 0; + sink(s.val); // $ SPURIOUS: ast // clean + } + + { + S3 s; + s.val = user_input(); + s.val++; + sink(s.val); // $ SPURIOUS: ast // clean + } + + { + S3 s; + s.val = user_input(); + s.val += 1; + sink(s.val); // $ SPURIOUS: ast // clean + } + + { + S3 s; + s.val = user_input(); + s.val = s.val + 1; + sink(s.val); // $ SPURIOUS: ast // clean + } +} diff --git a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected index 71c84a0446d..e8f54d3d7ba 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected @@ -43,6 +43,9 @@ argHasPostUpdate | arrays.cpp:10:8:10:15 | * ... | ArgumentNode is missing PostUpdateNode. | | arrays.cpp:16:8:16:13 | access to array | ArgumentNode is missing PostUpdateNode. | | arrays.cpp:17:8:17:13 | access to array | ArgumentNode is missing PostUpdateNode. | +| clearning.cpp:34:8:34:11 | * ... | ArgumentNode is missing PostUpdateNode. | +| clearning.cpp:41:8:41:11 | * ... | ArgumentNode is missing PostUpdateNode. | +| clearning.cpp:48:8:48:11 | * ... | ArgumentNode is missing PostUpdateNode. | postWithInFlow | A.cpp:25:13:25:13 | c [post update] | PostUpdateNode should not be the target of local flow. | | A.cpp:27:28:27:28 | c [post update] | PostUpdateNode should not be the target of local flow. | @@ -123,6 +126,32 @@ postWithInFlow | by_reference.cpp:108:24:108:24 | a [inner post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:19:3:19:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:19:6:19:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:32:3:32:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:32:6:32:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:39:3:39:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:39:6:39:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:40:5:40:5 | x [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:47:5:47:5 | x [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:53:3:53:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:53:6:53:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:75:2:75:10 | access to array [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:75:4:75:6 | val [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:82:2:82:9 | access to array [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:82:4:82:6 | val [inner post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:83:7:83:9 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:97:4:97:6 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:124:4:124:6 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:131:4:131:6 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:138:4:138:6 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:151:5:151:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:157:5:157:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:158:5:158:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:164:5:164:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:171:5:171:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:178:5:178:7 | val [post update] | PostUpdateNode should not be the target of local flow. | +| clearning.cpp:179:5:179:7 | val [post update] | PostUpdateNode should not be the target of local flow. | | complex.cpp:11:22:11:23 | a_ [post update] | PostUpdateNode should not be the target of local flow. | | complex.cpp:12:22:12:23 | b_ [post update] | PostUpdateNode should not be the target of local flow. | | conflated.cpp:10:3:10:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | diff --git a/cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected index ba007019708..b1acebfde5b 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/dataflow-ir-consistency.expected @@ -19,6 +19,17 @@ uniquePostUpdate | aliasing.cpp:77:11:77:11 | definition of w indirection | Node has multiple PostUpdateNodes. | | aliasing.cpp:84:11:84:11 | definition of w indirection | Node has multiple PostUpdateNodes. | | aliasing.cpp:91:11:91:11 | definition of w indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:54:3:54:3 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:61:3:61:3 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:90:3:90:3 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:104:2:104:2 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:111:4:111:4 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:118:2:118:2 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:125:2:125:2 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:132:2:132:2 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:139:4:139:4 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:165:3:165:3 | s indirection | Node has multiple PostUpdateNodes. | +| clearning.cpp:172:3:172:3 | s indirection | Node has multiple PostUpdateNodes. | | complex.cpp:22:3:22:5 | this indirection | Node has multiple PostUpdateNodes. | | complex.cpp:25:7:25:7 | this indirection | Node has multiple PostUpdateNodes. | | complex.cpp:42:10:42:14 | inner indirection | Node has multiple PostUpdateNodes. | diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index ec21a37dd3f..a90f04df3cf 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -572,6 +572,136 @@ edges | by_reference.cpp:136:8:136:13 | pouter indirection [a] | by_reference.cpp:136:16:136:16 | a | | by_reference.cpp:136:8:136:13 | pouter indirection [a] | by_reference.cpp:136:16:136:16 | a indirection | | by_reference.cpp:136:16:136:16 | a indirection | by_reference.cpp:136:16:136:16 | a | +| clearning.cpp:32:3:32:25 | ... = ... | clearning.cpp:32:6:32:6 | s indirection [post update] [x indirection] | +| clearning.cpp:32:6:32:6 | s indirection [post update] [x indirection] | clearning.cpp:33:5:33:5 | s indirection [x indirection] | +| clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:32:3:32:25 | ... = ... | +| clearning.cpp:33:5:33:5 | s indirection [x indirection] | clearning.cpp:34:9:34:9 | s indirection [x indirection] | +| clearning.cpp:34:9:34:9 | s indirection [x indirection] | clearning.cpp:34:8:34:11 | * ... | +| clearning.cpp:34:9:34:9 | s indirection [x indirection] | clearning.cpp:34:11:34:11 | x indirection | +| clearning.cpp:34:9:34:9 | s indirection [x indirection] | clearning.cpp:34:11:34:11 | x indirection | +| clearning.cpp:34:11:34:11 | x indirection | clearning.cpp:34:8:34:11 | * ... | +| clearning.cpp:34:11:34:11 | x indirection | clearning.cpp:34:8:34:11 | * ... | +| clearning.cpp:53:3:53:25 | ... = ... | clearning.cpp:53:6:53:6 | s indirection [post update] [x indirection] | +| clearning.cpp:53:6:53:6 | s indirection [post update] [x indirection] | clearning.cpp:54:3:54:3 | s indirection [x indirection] | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:3:53:25 | ... = ... | +| clearning.cpp:54:3:54:3 | s indirection [x indirection] | clearning.cpp:54:3:54:7 | ... ++ indirection | +| clearning.cpp:54:3:54:3 | s indirection [x indirection] | clearning.cpp:54:5:54:5 | x indirection | +| clearning.cpp:54:3:54:3 | s indirection [x indirection] | clearning.cpp:55:8:55:8 | s indirection [x indirection] | +| clearning.cpp:54:3:54:7 | ... ++ indirection | clearning.cpp:54:3:54:7 | ... ++ indirection | +| clearning.cpp:54:3:54:7 | ... ++ indirection | clearning.cpp:54:5:54:5 | s indirection [post update] [x indirection] | +| clearning.cpp:54:5:54:5 | s indirection [post update] [x indirection] | clearning.cpp:55:8:55:8 | s indirection [x indirection] | +| clearning.cpp:54:5:54:5 | x indirection | clearning.cpp:54:3:54:7 | ... ++ indirection | +| clearning.cpp:55:8:55:8 | s indirection [x indirection] | clearning.cpp:55:10:55:10 | x indirection | +| clearning.cpp:55:8:55:8 | s indirection [x indirection] | clearning.cpp:55:10:55:10 | x indirection | +| clearning.cpp:55:10:55:10 | x indirection | clearning.cpp:55:10:55:10 | x indirection | +| clearning.cpp:60:3:60:22 | ... = ... | clearning.cpp:60:7:60:7 | s indirection [post update] [x indirection] | +| clearning.cpp:60:7:60:7 | s indirection [post update] [x indirection] | clearning.cpp:61:3:61:3 | s indirection [x indirection] | +| clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:60:3:60:22 | ... = ... | +| clearning.cpp:61:3:61:3 | s indirection [x indirection] | clearning.cpp:61:3:61:7 | ... ++ indirection | +| clearning.cpp:61:3:61:3 | s indirection [x indirection] | clearning.cpp:61:5:61:5 | x indirection | +| clearning.cpp:61:3:61:3 | s indirection [x indirection] | clearning.cpp:62:8:62:8 | s indirection [x indirection] | +| clearning.cpp:61:3:61:7 | ... ++ indirection | clearning.cpp:61:3:61:7 | ... ++ indirection | +| clearning.cpp:61:3:61:7 | ... ++ indirection | clearning.cpp:61:5:61:5 | s indirection [post update] [x indirection] | +| clearning.cpp:61:5:61:5 | s indirection [post update] [x indirection] | clearning.cpp:62:8:62:8 | s indirection [x indirection] | +| clearning.cpp:61:5:61:5 | x indirection | clearning.cpp:61:3:61:7 | ... ++ indirection | +| clearning.cpp:62:8:62:8 | s indirection [x indirection] | clearning.cpp:62:10:62:10 | x indirection | +| clearning.cpp:62:8:62:8 | s indirection [x indirection] | clearning.cpp:62:10:62:10 | x indirection | +| clearning.cpp:62:10:62:10 | x indirection | clearning.cpp:62:10:62:10 | x indirection | +| clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:74:20:74:22 | s indirection [post update] [val indirection] | +| clearning.cpp:74:20:74:22 | s indirection [post update] [val indirection] | clearning.cpp:76:8:76:8 | s indirection [val indirection] | +| clearning.cpp:76:8:76:8 | s indirection [val indirection] | clearning.cpp:76:7:76:12 | * ... | +| clearning.cpp:76:8:76:8 | s indirection [val indirection] | clearning.cpp:76:10:76:12 | val indirection | +| clearning.cpp:76:8:76:8 | s indirection [val indirection] | clearning.cpp:76:10:76:12 | val indirection | +| clearning.cpp:76:10:76:12 | val indirection | clearning.cpp:76:7:76:12 | * ... | +| clearning.cpp:76:10:76:12 | val indirection | clearning.cpp:76:7:76:12 | * ... | +| clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:81:20:81:22 | s indirection [post update] [val indirection] | +| clearning.cpp:81:20:81:22 | s indirection [post update] [val indirection] | clearning.cpp:83:13:83:13 | s indirection [val indirection] | +| clearning.cpp:83:5:83:21 | ... = ... indirection | clearning.cpp:83:7:83:9 | s indirection [post update] [val indirection] | +| clearning.cpp:83:7:83:9 | s indirection [post update] [val indirection] | clearning.cpp:84:8:84:8 | s indirection [val indirection] | +| clearning.cpp:83:13:83:13 | s indirection [val indirection] | clearning.cpp:83:13:83:21 | ... + ... indirection | +| clearning.cpp:83:13:83:13 | s indirection [val indirection] | clearning.cpp:83:15:83:17 | val indirection | +| clearning.cpp:83:13:83:21 | ... + ... indirection | clearning.cpp:83:5:83:21 | ... = ... indirection | +| clearning.cpp:83:15:83:17 | val indirection | clearning.cpp:83:5:83:21 | ... = ... indirection | +| clearning.cpp:84:8:84:8 | s indirection [val indirection] | clearning.cpp:84:7:84:12 | * ... | +| clearning.cpp:84:8:84:8 | s indirection [val indirection] | clearning.cpp:84:10:84:12 | val indirection | +| clearning.cpp:84:8:84:8 | s indirection [val indirection] | clearning.cpp:84:10:84:12 | val indirection | +| clearning.cpp:84:10:84:12 | val indirection | clearning.cpp:84:7:84:12 | * ... | +| clearning.cpp:84:10:84:12 | val indirection | clearning.cpp:84:7:84:12 | * ... | +| clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:89:20:89:22 | s indirection [post update] [val indirection] | +| clearning.cpp:89:20:89:22 | s indirection [post update] [val indirection] | clearning.cpp:90:3:90:3 | s indirection [val indirection] | +| clearning.cpp:90:3:90:3 | s indirection [val indirection] | clearning.cpp:90:3:90:9 | ... ++ indirection | +| clearning.cpp:90:3:90:3 | s indirection [val indirection] | clearning.cpp:90:5:90:7 | val indirection | +| clearning.cpp:90:3:90:3 | s indirection [val indirection] | clearning.cpp:91:8:91:8 | s indirection [val indirection] | +| clearning.cpp:90:3:90:9 | ... ++ indirection | clearning.cpp:90:3:90:9 | ... ++ indirection | +| clearning.cpp:90:3:90:9 | ... ++ indirection | clearning.cpp:90:5:90:7 | s indirection [post update] [val indirection] | +| clearning.cpp:90:5:90:7 | s indirection [post update] [val indirection] | clearning.cpp:91:8:91:8 | s indirection [val indirection] | +| clearning.cpp:90:5:90:7 | val indirection | clearning.cpp:90:3:90:9 | ... ++ indirection | +| clearning.cpp:91:8:91:8 | s indirection [val indirection] | clearning.cpp:91:7:91:12 | * ... | +| clearning.cpp:91:8:91:8 | s indirection [val indirection] | clearning.cpp:91:10:91:12 | val indirection | +| clearning.cpp:91:8:91:8 | s indirection [val indirection] | clearning.cpp:91:10:91:12 | val indirection | +| clearning.cpp:91:10:91:12 | val indirection | clearning.cpp:91:7:91:12 | * ... | +| clearning.cpp:91:10:91:12 | val indirection | clearning.cpp:91:7:91:12 | * ... | +| clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:96:20:96:22 | s indirection [post update] [val indirection] | +| clearning.cpp:96:20:96:22 | s indirection [post update] [val indirection] | clearning.cpp:97:10:97:10 | s indirection [val indirection] | +| clearning.cpp:97:2:97:18 | ... = ... indirection | clearning.cpp:97:4:97:6 | s indirection [post update] [val indirection] | +| clearning.cpp:97:4:97:6 | s indirection [post update] [val indirection] | clearning.cpp:98:8:98:8 | s indirection [val indirection] | +| clearning.cpp:97:10:97:10 | s indirection [val indirection] | clearning.cpp:97:10:97:18 | ... + ... indirection | +| clearning.cpp:97:10:97:10 | s indirection [val indirection] | clearning.cpp:97:12:97:14 | val indirection | +| clearning.cpp:97:10:97:18 | ... + ... indirection | clearning.cpp:97:2:97:18 | ... = ... indirection | +| clearning.cpp:97:12:97:14 | val indirection | clearning.cpp:97:2:97:18 | ... = ... indirection | +| clearning.cpp:98:8:98:8 | s indirection [val indirection] | clearning.cpp:98:7:98:12 | * ... | +| clearning.cpp:98:8:98:8 | s indirection [val indirection] | clearning.cpp:98:10:98:12 | val indirection | +| clearning.cpp:98:8:98:8 | s indirection [val indirection] | clearning.cpp:98:10:98:12 | val indirection | +| clearning.cpp:98:10:98:12 | val indirection | clearning.cpp:98:7:98:12 | * ... | +| clearning.cpp:98:10:98:12 | val indirection | clearning.cpp:98:7:98:12 | * ... | +| clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:103:20:103:22 | s indirection [post update] [val indirection] | +| clearning.cpp:103:20:103:22 | s indirection [post update] [val indirection] | clearning.cpp:104:2:104:2 | s indirection [val indirection] | +| clearning.cpp:104:2:104:2 | s indirection [val indirection] | clearning.cpp:104:2:104:8 | ... ++ indirection | +| clearning.cpp:104:2:104:2 | s indirection [val indirection] | clearning.cpp:104:4:104:6 | val indirection | +| clearning.cpp:104:2:104:2 | s indirection [val indirection] | clearning.cpp:105:8:105:8 | s indirection [val indirection] | +| clearning.cpp:104:2:104:8 | ... ++ indirection | clearning.cpp:104:2:104:8 | ... ++ indirection | +| clearning.cpp:104:2:104:8 | ... ++ indirection | clearning.cpp:104:4:104:6 | s indirection [post update] [val indirection] | +| clearning.cpp:104:4:104:6 | s indirection [post update] [val indirection] | clearning.cpp:105:8:105:8 | s indirection [val indirection] | +| clearning.cpp:104:4:104:6 | val indirection | clearning.cpp:104:2:104:8 | ... ++ indirection | +| clearning.cpp:105:8:105:8 | s indirection [val indirection] | clearning.cpp:105:7:105:12 | * ... | +| clearning.cpp:105:8:105:8 | s indirection [val indirection] | clearning.cpp:105:10:105:12 | val indirection | +| clearning.cpp:105:8:105:8 | s indirection [val indirection] | clearning.cpp:105:10:105:12 | val indirection | +| clearning.cpp:105:10:105:12 | val indirection | clearning.cpp:105:7:105:12 | * ... | +| clearning.cpp:105:10:105:12 | val indirection | clearning.cpp:105:7:105:12 | * ... | +| clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:110:20:110:22 | s indirection [post update] [val indirection] | +| clearning.cpp:110:20:110:22 | s indirection [post update] [val indirection] | clearning.cpp:111:4:111:4 | s indirection [val indirection] | +| clearning.cpp:111:2:111:8 | ++ ... indirection | clearning.cpp:111:2:111:8 | ++ ... indirection | +| clearning.cpp:111:2:111:8 | ++ ... indirection | clearning.cpp:111:6:111:8 | s indirection [post update] [val indirection] | +| clearning.cpp:111:4:111:4 | s indirection [val indirection] | clearning.cpp:111:2:111:8 | ++ ... indirection | +| clearning.cpp:111:4:111:4 | s indirection [val indirection] | clearning.cpp:111:6:111:8 | val indirection | +| clearning.cpp:111:4:111:4 | s indirection [val indirection] | clearning.cpp:112:8:112:8 | s indirection [val indirection] | +| clearning.cpp:111:6:111:8 | s indirection [post update] [val indirection] | clearning.cpp:112:8:112:8 | s indirection [val indirection] | +| clearning.cpp:111:6:111:8 | val indirection | clearning.cpp:111:2:111:8 | ++ ... indirection | +| clearning.cpp:112:8:112:8 | s indirection [val indirection] | clearning.cpp:112:7:112:12 | * ... | +| clearning.cpp:112:8:112:8 | s indirection [val indirection] | clearning.cpp:112:10:112:12 | val indirection | +| clearning.cpp:112:8:112:8 | s indirection [val indirection] | clearning.cpp:112:10:112:12 | val indirection | +| clearning.cpp:112:10:112:12 | val indirection | clearning.cpp:112:7:112:12 | * ... | +| clearning.cpp:112:10:112:12 | val indirection | clearning.cpp:112:7:112:12 | * ... | +| clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:117:20:117:22 | s indirection [post update] [val indirection] | +| clearning.cpp:117:20:117:22 | s indirection [post update] [val indirection] | clearning.cpp:118:2:118:2 | s indirection [val indirection] | +| clearning.cpp:118:2:118:2 | s indirection [val indirection] | clearning.cpp:118:2:118:11 | ... += ... indirection | +| clearning.cpp:118:2:118:2 | s indirection [val indirection] | clearning.cpp:118:4:118:6 | val indirection | +| clearning.cpp:118:2:118:2 | s indirection [val indirection] | clearning.cpp:119:8:119:8 | s indirection [val indirection] | +| clearning.cpp:118:2:118:11 | ... += ... indirection | clearning.cpp:118:2:118:11 | ... += ... indirection | +| clearning.cpp:118:2:118:11 | ... += ... indirection | clearning.cpp:118:4:118:6 | s indirection [post update] [val indirection] | +| clearning.cpp:118:4:118:6 | s indirection [post update] [val indirection] | clearning.cpp:119:8:119:8 | s indirection [val indirection] | +| clearning.cpp:118:4:118:6 | val indirection | clearning.cpp:118:2:118:11 | ... += ... indirection | +| clearning.cpp:119:8:119:8 | s indirection [val indirection] | clearning.cpp:119:7:119:12 | * ... | +| clearning.cpp:119:8:119:8 | s indirection [val indirection] | clearning.cpp:119:10:119:12 | val indirection | +| clearning.cpp:119:8:119:8 | s indirection [val indirection] | clearning.cpp:119:10:119:12 | val indirection | +| clearning.cpp:119:10:119:12 | val indirection | clearning.cpp:119:7:119:12 | * ... | +| clearning.cpp:119:10:119:12 | val indirection | clearning.cpp:119:7:119:12 | * ... | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:5:151:7 | s indirection [post update] [val] | +| clearning.cpp:151:5:151:7 | s indirection [post update] [val] | clearning.cpp:152:8:152:8 | s indirection [val] | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | +| clearning.cpp:152:8:152:8 | s indirection [val] | clearning.cpp:152:10:152:12 | val | +| clearning.cpp:152:8:152:8 | s indirection [val] | clearning.cpp:152:10:152:12 | val indirection | +| clearning.cpp:152:10:152:12 | val indirection | clearning.cpp:152:10:152:12 | val | | complex.cpp:9:7:9:7 | this indirection [a_] | complex.cpp:9:20:9:21 | this indirection [a_] | | complex.cpp:9:20:9:21 | a_ | complex.cpp:9:7:9:7 | a indirection | | complex.cpp:9:20:9:21 | a_ indirection | complex.cpp:9:7:9:7 | a indirection | @@ -861,19 +991,20 @@ edges | struct_init.c:15:8:15:9 | ab indirection [a] | struct_init.c:15:12:15:12 | a | | struct_init.c:15:8:15:9 | ab indirection [a] | struct_init.c:15:12:15:12 | a indirection | | struct_init.c:15:12:15:12 | a indirection | struct_init.c:15:12:15:12 | a | -| struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | struct_init.c:22:8:22:9 | ab indirection [a] | -| struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | struct_init.c:24:10:24:12 | & ... indirection [a] | -| struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | struct_init.c:28:5:28:7 | & ... indirection [a] | +| struct_init.c:20:13:20:14 | definition of ab indirection [a] | struct_init.c:22:8:22:9 | ab indirection [a] | +| struct_init.c:20:13:20:14 | definition of ab indirection [a] | struct_init.c:24:10:24:12 | & ... indirection [a] | +| struct_init.c:20:13:20:14 | definition of ab indirection [a] | struct_init.c:28:5:28:7 | & ... indirection [a] | +| struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | struct_init.c:20:13:20:14 | definition of ab indirection [a] | | struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | | struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:20:20:29 | call to user_input | | struct_init.c:22:8:22:9 | ab indirection [a] | struct_init.c:22:11:22:11 | a | | struct_init.c:22:8:22:9 | ab indirection [a] | struct_init.c:22:11:22:11 | a indirection | | struct_init.c:22:11:22:11 | a indirection | struct_init.c:22:11:22:11 | a | | struct_init.c:24:10:24:12 | & ... indirection [a] | struct_init.c:14:24:14:25 | ab indirection [a] | -| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:31:8:31:12 | outer indirection [nestedAB, a] | -| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:31:8:31:12 | outer indirection [nestedAB, a] | -| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer indirection [nestedAB, a] | -| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer indirection [nestedAB, a] | +| struct_init.c:26:16:26:20 | definition of outer indirection [nestedAB, a] | struct_init.c:31:8:31:12 | outer indirection [nestedAB, a] | +| struct_init.c:26:16:26:20 | definition of outer indirection [nestedAB, a] | struct_init.c:36:11:36:15 | outer indirection [nestedAB, a] | +| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | definition of outer indirection [nestedAB, a] | +| struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | definition of outer indirection [nestedAB, a] | | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [pointerAB indirection, a] | struct_init.c:33:8:33:12 | outer indirection [pointerAB indirection, a] | | struct_init.c:27:5:27:23 | {...} indirection [post update] [a] | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | | struct_init.c:27:5:27:23 | {...} indirection [post update] [a] | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | @@ -892,7 +1023,8 @@ edges | struct_init.c:33:25:33:25 | a indirection | struct_init.c:33:25:33:25 | a | | struct_init.c:36:10:36:24 | & ... indirection [a] | struct_init.c:14:24:14:25 | ab indirection [a] | | struct_init.c:36:11:36:15 | outer indirection [nestedAB, a] | struct_init.c:36:10:36:24 | & ... indirection [a] | -| struct_init.c:40:17:40:36 | definition of ab indirection [post update] [a] | struct_init.c:43:5:43:7 | & ... indirection [a] | +| struct_init.c:40:13:40:14 | definition of ab indirection [a] | struct_init.c:43:5:43:7 | & ... indirection [a] | +| struct_init.c:40:17:40:36 | definition of ab indirection [post update] [a] | struct_init.c:40:13:40:14 | definition of ab indirection [a] | | struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:17:40:36 | definition of ab indirection [post update] [a] | | struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:20:40:29 | call to user_input | | struct_init.c:41:23:44:3 | definition of outer indirection [post update] [pointerAB indirection, a] | struct_init.c:46:10:46:14 | outer indirection [pointerAB indirection, a] | @@ -1433,6 +1565,114 @@ nodes | by_reference.cpp:136:8:136:13 | pouter indirection [a] | semmle.label | pouter indirection [a] | | by_reference.cpp:136:16:136:16 | a | semmle.label | a | | by_reference.cpp:136:16:136:16 | a indirection | semmle.label | a indirection | +| clearning.cpp:32:3:32:25 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:32:6:32:6 | s indirection [post update] [x indirection] | semmle.label | s indirection [post update] [x indirection] | +| clearning.cpp:32:10:32:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:33:5:33:5 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:34:8:34:11 | * ... | semmle.label | * ... | +| clearning.cpp:34:9:34:9 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:34:11:34:11 | x indirection | semmle.label | x indirection | +| clearning.cpp:34:11:34:11 | x indirection | semmle.label | x indirection | +| clearning.cpp:53:3:53:25 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:53:6:53:6 | s indirection [post update] [x indirection] | semmle.label | s indirection [post update] [x indirection] | +| clearning.cpp:53:10:53:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:54:3:54:3 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:54:3:54:7 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:54:3:54:7 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:54:5:54:5 | s indirection [post update] [x indirection] | semmle.label | s indirection [post update] [x indirection] | +| clearning.cpp:54:5:54:5 | x indirection | semmle.label | x indirection | +| clearning.cpp:55:8:55:8 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:55:10:55:10 | x indirection | semmle.label | x indirection | +| clearning.cpp:55:10:55:10 | x indirection | semmle.label | x indirection | +| clearning.cpp:60:3:60:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:60:7:60:7 | s indirection [post update] [x indirection] | semmle.label | s indirection [post update] [x indirection] | +| clearning.cpp:60:11:60:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:61:3:61:3 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:61:3:61:7 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:61:3:61:7 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:61:5:61:5 | s indirection [post update] [x indirection] | semmle.label | s indirection [post update] [x indirection] | +| clearning.cpp:61:5:61:5 | x indirection | semmle.label | x indirection | +| clearning.cpp:62:8:62:8 | s indirection [x indirection] | semmle.label | s indirection [x indirection] | +| clearning.cpp:62:10:62:10 | x indirection | semmle.label | x indirection | +| clearning.cpp:62:10:62:10 | x indirection | semmle.label | x indirection | +| clearning.cpp:74:20:74:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:74:20:74:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:76:7:76:12 | * ... | semmle.label | * ... | +| clearning.cpp:76:8:76:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:76:10:76:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:76:10:76:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:81:20:81:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:81:20:81:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:83:5:83:21 | ... = ... indirection | semmle.label | ... = ... indirection | +| clearning.cpp:83:7:83:9 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:83:13:83:13 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:83:13:83:21 | ... + ... indirection | semmle.label | ... + ... indirection | +| clearning.cpp:83:15:83:17 | val indirection | semmle.label | val indirection | +| clearning.cpp:84:7:84:12 | * ... | semmle.label | * ... | +| clearning.cpp:84:8:84:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:84:10:84:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:84:10:84:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:89:20:89:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:89:20:89:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:90:3:90:3 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:90:3:90:9 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:90:3:90:9 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:90:5:90:7 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:90:5:90:7 | val indirection | semmle.label | val indirection | +| clearning.cpp:91:7:91:12 | * ... | semmle.label | * ... | +| clearning.cpp:91:8:91:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:91:10:91:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:91:10:91:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:96:20:96:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:96:20:96:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:97:2:97:18 | ... = ... indirection | semmle.label | ... = ... indirection | +| clearning.cpp:97:4:97:6 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:97:10:97:10 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:97:10:97:18 | ... + ... indirection | semmle.label | ... + ... indirection | +| clearning.cpp:97:12:97:14 | val indirection | semmle.label | val indirection | +| clearning.cpp:98:7:98:12 | * ... | semmle.label | * ... | +| clearning.cpp:98:8:98:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:98:10:98:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:98:10:98:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:103:20:103:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:103:20:103:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:104:2:104:2 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:104:2:104:8 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:104:2:104:8 | ... ++ indirection | semmle.label | ... ++ indirection | +| clearning.cpp:104:4:104:6 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:104:4:104:6 | val indirection | semmle.label | val indirection | +| clearning.cpp:105:7:105:12 | * ... | semmle.label | * ... | +| clearning.cpp:105:8:105:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:105:10:105:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:105:10:105:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:110:20:110:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:110:20:110:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:111:2:111:8 | ++ ... indirection | semmle.label | ++ ... indirection | +| clearning.cpp:111:2:111:8 | ++ ... indirection | semmle.label | ++ ... indirection | +| clearning.cpp:111:4:111:4 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:111:6:111:8 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:111:6:111:8 | val indirection | semmle.label | val indirection | +| clearning.cpp:112:7:112:12 | * ... | semmle.label | * ... | +| clearning.cpp:112:8:112:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:112:10:112:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:112:10:112:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:117:20:117:22 | argument_source output argument | semmle.label | argument_source output argument | +| clearning.cpp:117:20:117:22 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:118:2:118:2 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:118:2:118:11 | ... += ... indirection | semmle.label | ... += ... indirection | +| clearning.cpp:118:2:118:11 | ... += ... indirection | semmle.label | ... += ... indirection | +| clearning.cpp:118:4:118:6 | s indirection [post update] [val indirection] | semmle.label | s indirection [post update] [val indirection] | +| clearning.cpp:118:4:118:6 | val indirection | semmle.label | val indirection | +| clearning.cpp:119:7:119:12 | * ... | semmle.label | * ... | +| clearning.cpp:119:8:119:8 | s indirection [val indirection] | semmle.label | s indirection [val indirection] | +| clearning.cpp:119:10:119:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:119:10:119:12 | val indirection | semmle.label | val indirection | +| clearning.cpp:151:3:151:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:151:5:151:7 | s indirection [post update] [val] | semmle.label | s indirection [post update] [val] | +| clearning.cpp:151:11:151:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:152:8:152:8 | s indirection [val] | semmle.label | s indirection [val] | +| clearning.cpp:152:10:152:12 | val | semmle.label | val | +| clearning.cpp:152:10:152:12 | val indirection | semmle.label | val indirection | | complex.cpp:9:7:9:7 | a indirection | semmle.label | a indirection | | complex.cpp:9:7:9:7 | this indirection [a_] | semmle.label | this indirection [a_] | | complex.cpp:9:20:9:21 | a_ | semmle.label | a_ | @@ -1699,6 +1939,7 @@ nodes | struct_init.c:15:8:15:9 | ab indirection [a] | semmle.label | ab indirection [a] | | struct_init.c:15:12:15:12 | a | semmle.label | a | | struct_init.c:15:12:15:12 | a indirection | semmle.label | a indirection | +| struct_init.c:20:13:20:14 | definition of ab indirection [a] | semmle.label | definition of ab indirection [a] | | struct_init.c:20:17:20:36 | definition of ab indirection [post update] [a] | semmle.label | definition of ab indirection [post update] [a] | | struct_init.c:20:20:20:29 | call to user_input | semmle.label | call to user_input | | struct_init.c:20:20:20:29 | call to user_input | semmle.label | call to user_input | @@ -1706,6 +1947,7 @@ nodes | struct_init.c:22:11:22:11 | a | semmle.label | a | | struct_init.c:22:11:22:11 | a indirection | semmle.label | a indirection | | struct_init.c:24:10:24:12 | & ... indirection [a] | semmle.label | & ... indirection [a] | +| struct_init.c:26:16:26:20 | definition of outer indirection [nestedAB, a] | semmle.label | definition of outer indirection [nestedAB, a] | | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | semmle.label | definition of outer indirection [post update] [nestedAB, a] | | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [nestedAB, a] | semmle.label | definition of outer indirection [post update] [nestedAB, a] | | struct_init.c:26:23:29:3 | definition of outer indirection [post update] [pointerAB indirection, a] | semmle.label | definition of outer indirection [post update] [pointerAB indirection, a] | @@ -1724,6 +1966,7 @@ nodes | struct_init.c:33:25:33:25 | a indirection | semmle.label | a indirection | | struct_init.c:36:10:36:24 | & ... indirection [a] | semmle.label | & ... indirection [a] | | struct_init.c:36:11:36:15 | outer indirection [nestedAB, a] | semmle.label | outer indirection [nestedAB, a] | +| struct_init.c:40:13:40:14 | definition of ab indirection [a] | semmle.label | definition of ab indirection [a] | | struct_init.c:40:17:40:36 | definition of ab indirection [post update] [a] | semmle.label | definition of ab indirection [post update] [a] | | struct_init.c:40:20:40:29 | call to user_input | semmle.label | call to user_input | | struct_init.c:40:20:40:29 | call to user_input | semmle.label | call to user_input | @@ -1883,6 +2126,17 @@ subpaths | by_reference.cpp:134:29:134:29 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:134:29:134:29 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input | | by_reference.cpp:135:27:135:27 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:135:27:135:27 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input | | by_reference.cpp:136:16:136:16 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:136:16:136:16 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input | +| clearning.cpp:34:8:34:11 | * ... | clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:34:8:34:11 | * ... | * ... flows from $@ | clearning.cpp:32:10:32:19 | call to user_input | call to user_input | +| clearning.cpp:55:10:55:10 | x indirection | clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:55:10:55:10 | x indirection | x indirection flows from $@ | clearning.cpp:53:10:53:19 | call to user_input | call to user_input | +| clearning.cpp:62:10:62:10 | x indirection | clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:62:10:62:10 | x indirection | x indirection flows from $@ | clearning.cpp:60:11:60:20 | call to user_input | call to user_input | +| clearning.cpp:76:7:76:12 | * ... | clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:76:7:76:12 | * ... | * ... flows from $@ | clearning.cpp:74:20:74:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:84:7:84:12 | * ... | clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:84:7:84:12 | * ... | * ... flows from $@ | clearning.cpp:81:20:81:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:91:7:91:12 | * ... | clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:91:7:91:12 | * ... | * ... flows from $@ | clearning.cpp:89:20:89:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:98:7:98:12 | * ... | clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:98:7:98:12 | * ... | * ... flows from $@ | clearning.cpp:96:20:96:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:105:7:105:12 | * ... | clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:105:7:105:12 | * ... | * ... flows from $@ | clearning.cpp:103:20:103:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:112:7:112:12 | * ... | clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:112:7:112:12 | * ... | * ... flows from $@ | clearning.cpp:110:20:110:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:119:7:119:12 | * ... | clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:119:7:119:12 | * ... | * ... flows from $@ | clearning.cpp:117:20:117:22 | argument_source output argument | argument_source output argument | +| clearning.cpp:152:10:152:12 | val | clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:152:10:152:12 | val | val flows from $@ | clearning.cpp:151:11:151:20 | call to user_input | call to user_input | | complex.cpp:42:18:42:18 | call to a | complex.cpp:53:19:53:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:53:19:53:28 | call to user_input | call to user_input | | complex.cpp:42:18:42:18 | call to a | complex.cpp:55:19:55:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:55:19:55:28 | call to user_input | call to user_input | | complex.cpp:43:18:43:18 | call to b | complex.cpp:54:19:54:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:54:19:54:28 | call to user_input | call to user_input | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected index 6749e278fba..ad76accce67 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected @@ -167,6 +167,66 @@ | by_reference.cpp:88:9:88:9 | a | AST only | | by_reference.cpp:92:3:92:5 | * ... | AST only | | by_reference.cpp:96:3:96:4 | pa | AST only | +| clearning.cpp:18:7:18:7 | s | IR only | +| clearning.cpp:19:3:19:6 | * ... | AST only | +| clearning.cpp:20:12:20:12 | s | IR only | +| clearning.cpp:25:7:25:7 | s | IR only | +| clearning.cpp:26:7:26:7 | s | IR only | +| clearning.cpp:27:12:27:12 | s | IR only | +| clearning.cpp:32:3:32:6 | * ... | AST only | +| clearning.cpp:33:7:33:7 | s | IR only | +| clearning.cpp:34:8:34:11 | * ... | IR only | +| clearning.cpp:34:11:34:11 | s | IR only | +| clearning.cpp:39:3:39:6 | * ... | AST only | +| clearning.cpp:40:5:40:5 | x | AST only | +| clearning.cpp:41:8:41:11 | * ... | IR only | +| clearning.cpp:41:11:41:11 | s | IR only | +| clearning.cpp:46:7:46:7 | s | IR only | +| clearning.cpp:47:5:47:5 | x | AST only | +| clearning.cpp:48:8:48:11 | * ... | IR only | +| clearning.cpp:48:11:48:11 | s | IR only | +| clearning.cpp:53:3:53:6 | * ... | AST only | +| clearning.cpp:54:5:54:5 | x | AST only | +| clearning.cpp:60:7:60:7 | s | IR only | +| clearning.cpp:61:5:61:5 | x | AST only | +| clearning.cpp:75:2:75:10 | access to array | AST only | +| clearning.cpp:76:10:76:12 | s | IR only | +| clearning.cpp:82:2:82:9 | access to array | AST only | +| clearning.cpp:83:7:83:9 | val | AST only | +| clearning.cpp:83:15:83:17 | s | IR only | +| clearning.cpp:84:10:84:12 | s | IR only | +| clearning.cpp:90:5:90:7 | val | AST only | +| clearning.cpp:91:10:91:12 | s | IR only | +| clearning.cpp:97:4:97:6 | val | AST only | +| clearning.cpp:97:12:97:14 | s | IR only | +| clearning.cpp:98:10:98:12 | s | IR only | +| clearning.cpp:104:4:104:6 | val | AST only | +| clearning.cpp:105:10:105:12 | s | IR only | +| clearning.cpp:111:6:111:8 | val | AST only | +| clearning.cpp:112:10:112:12 | s | IR only | +| clearning.cpp:118:4:118:6 | val | AST only | +| clearning.cpp:119:10:119:12 | s | IR only | +| clearning.cpp:124:4:124:6 | val | AST only | +| clearning.cpp:125:4:125:6 | val | AST only | +| clearning.cpp:131:4:131:6 | val | AST only | +| clearning.cpp:132:4:132:6 | val | AST only | +| clearning.cpp:138:4:138:6 | val | AST only | +| clearning.cpp:139:6:139:8 | val | AST only | +| clearning.cpp:151:5:151:7 | val | AST only | +| clearning.cpp:152:10:152:12 | s | IR only | +| clearning.cpp:157:5:157:7 | val | AST only | +| clearning.cpp:158:5:158:7 | val | AST only | +| clearning.cpp:159:10:159:12 | s | IR only | +| clearning.cpp:164:5:164:7 | val | AST only | +| clearning.cpp:165:5:165:7 | val | AST only | +| clearning.cpp:166:10:166:12 | s | IR only | +| clearning.cpp:171:5:171:7 | val | AST only | +| clearning.cpp:172:5:172:7 | val | AST only | +| clearning.cpp:173:10:173:12 | s | IR only | +| clearning.cpp:178:5:178:7 | val | AST only | +| clearning.cpp:179:5:179:7 | val | AST only | +| clearning.cpp:179:13:179:15 | s | IR only | +| clearning.cpp:180:10:180:12 | s | IR only | | complex.cpp:9:20:9:21 | this | IR only | | complex.cpp:10:20:10:21 | this | IR only | | complex.cpp:11:22:11:23 | a_ | AST only | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected index 1818cea24bb..823997fd7d3 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected @@ -408,6 +408,90 @@ | by_reference.cpp:135:27:135:27 | a | | by_reference.cpp:136:8:136:13 | pouter | | by_reference.cpp:136:16:136:16 | a | +| clearning.cpp:18:5:18:5 | s | +| clearning.cpp:19:4:19:4 | s | +| clearning.cpp:20:10:20:10 | s | +| clearning.cpp:25:5:25:5 | s | +| clearning.cpp:26:5:26:5 | s | +| clearning.cpp:27:10:27:10 | s | +| clearning.cpp:32:4:32:4 | s | +| clearning.cpp:33:5:33:5 | s | +| clearning.cpp:34:8:34:11 | * ... | +| clearning.cpp:34:9:34:9 | s | +| clearning.cpp:39:4:39:4 | s | +| clearning.cpp:40:3:40:3 | s | +| clearning.cpp:41:8:41:11 | * ... | +| clearning.cpp:41:9:41:9 | s | +| clearning.cpp:46:5:46:5 | s | +| clearning.cpp:47:3:47:3 | s | +| clearning.cpp:48:8:48:11 | * ... | +| clearning.cpp:48:9:48:9 | s | +| clearning.cpp:53:4:53:4 | s | +| clearning.cpp:54:3:54:3 | s | +| clearning.cpp:55:8:55:8 | s | +| clearning.cpp:55:10:55:10 | x | +| clearning.cpp:60:5:60:5 | s | +| clearning.cpp:61:3:61:3 | s | +| clearning.cpp:62:8:62:8 | s | +| clearning.cpp:62:10:62:10 | x | +| clearning.cpp:74:18:74:18 | s | +| clearning.cpp:74:20:74:22 | val | +| clearning.cpp:75:2:75:2 | s | +| clearning.cpp:76:8:76:8 | s | +| clearning.cpp:81:18:81:18 | s | +| clearning.cpp:81:20:81:22 | val | +| clearning.cpp:82:2:82:2 | s | +| clearning.cpp:83:5:83:5 | s | +| clearning.cpp:83:13:83:13 | s | +| clearning.cpp:84:8:84:8 | s | +| clearning.cpp:89:18:89:18 | s | +| clearning.cpp:89:20:89:22 | val | +| clearning.cpp:90:3:90:3 | s | +| clearning.cpp:91:8:91:8 | s | +| clearning.cpp:96:18:96:18 | s | +| clearning.cpp:96:20:96:22 | val | +| clearning.cpp:97:2:97:2 | s | +| clearning.cpp:97:10:97:10 | s | +| clearning.cpp:98:8:98:8 | s | +| clearning.cpp:103:18:103:18 | s | +| clearning.cpp:103:20:103:22 | val | +| clearning.cpp:104:2:104:2 | s | +| clearning.cpp:105:8:105:8 | s | +| clearning.cpp:110:18:110:18 | s | +| clearning.cpp:110:20:110:22 | val | +| clearning.cpp:111:4:111:4 | s | +| clearning.cpp:112:8:112:8 | s | +| clearning.cpp:117:18:117:18 | s | +| clearning.cpp:117:20:117:22 | val | +| clearning.cpp:118:2:118:2 | s | +| clearning.cpp:119:8:119:8 | s | +| clearning.cpp:124:2:124:2 | s | +| clearning.cpp:125:2:125:2 | s | +| clearning.cpp:126:7:126:7 | s | +| clearning.cpp:126:9:126:11 | val | +| clearning.cpp:131:2:131:2 | s | +| clearning.cpp:132:2:132:2 | s | +| clearning.cpp:133:7:133:7 | s | +| clearning.cpp:133:9:133:11 | val | +| clearning.cpp:138:2:138:2 | s | +| clearning.cpp:139:4:139:4 | s | +| clearning.cpp:140:7:140:7 | s | +| clearning.cpp:140:9:140:11 | val | +| clearning.cpp:151:3:151:3 | s | +| clearning.cpp:152:8:152:8 | s | +| clearning.cpp:157:3:157:3 | s | +| clearning.cpp:158:3:158:3 | s | +| clearning.cpp:159:8:159:8 | s | +| clearning.cpp:164:3:164:3 | s | +| clearning.cpp:165:3:165:3 | s | +| clearning.cpp:166:8:166:8 | s | +| clearning.cpp:171:3:171:3 | s | +| clearning.cpp:172:3:172:3 | s | +| clearning.cpp:173:8:173:8 | s | +| clearning.cpp:178:3:178:3 | s | +| clearning.cpp:179:3:179:3 | s | +| clearning.cpp:179:11:179:11 | s | +| clearning.cpp:180:8:180:8 | s | | complex.cpp:9:20:9:21 | this | | complex.cpp:10:20:10:21 | this | | complex.cpp:11:22:11:23 | this | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected index 373e357142a..c37eca67c75 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected @@ -348,6 +348,92 @@ | by_reference.cpp:135:27:135:27 | a | | by_reference.cpp:136:8:136:13 | pouter | | by_reference.cpp:136:16:136:16 | a | +| clearning.cpp:19:3:19:6 | * ... | +| clearning.cpp:19:4:19:4 | s | +| clearning.cpp:32:3:32:6 | * ... | +| clearning.cpp:32:4:32:4 | s | +| clearning.cpp:39:3:39:6 | * ... | +| clearning.cpp:39:4:39:4 | s | +| clearning.cpp:40:3:40:3 | s | +| clearning.cpp:40:5:40:5 | x | +| clearning.cpp:47:3:47:3 | s | +| clearning.cpp:47:5:47:5 | x | +| clearning.cpp:53:3:53:6 | * ... | +| clearning.cpp:53:4:53:4 | s | +| clearning.cpp:54:3:54:3 | s | +| clearning.cpp:54:5:54:5 | x | +| clearning.cpp:55:8:55:8 | s | +| clearning.cpp:55:10:55:10 | x | +| clearning.cpp:61:3:61:3 | s | +| clearning.cpp:61:5:61:5 | x | +| clearning.cpp:62:8:62:8 | s | +| clearning.cpp:62:10:62:10 | x | +| clearning.cpp:74:18:74:18 | s | +| clearning.cpp:74:20:74:22 | val | +| clearning.cpp:75:2:75:2 | s | +| clearning.cpp:75:2:75:10 | access to array | +| clearning.cpp:81:18:81:18 | s | +| clearning.cpp:81:20:81:22 | val | +| clearning.cpp:82:2:82:2 | s | +| clearning.cpp:82:2:82:9 | access to array | +| clearning.cpp:83:5:83:5 | s | +| clearning.cpp:83:7:83:9 | val | +| clearning.cpp:89:18:89:18 | s | +| clearning.cpp:89:20:89:22 | val | +| clearning.cpp:90:3:90:3 | s | +| clearning.cpp:90:5:90:7 | val | +| clearning.cpp:96:18:96:18 | s | +| clearning.cpp:96:20:96:22 | val | +| clearning.cpp:97:2:97:2 | s | +| clearning.cpp:97:4:97:6 | val | +| clearning.cpp:103:18:103:18 | s | +| clearning.cpp:103:20:103:22 | val | +| clearning.cpp:104:2:104:2 | s | +| clearning.cpp:104:4:104:6 | val | +| clearning.cpp:110:18:110:18 | s | +| clearning.cpp:110:20:110:22 | val | +| clearning.cpp:111:4:111:4 | s | +| clearning.cpp:111:6:111:8 | val | +| clearning.cpp:117:18:117:18 | s | +| clearning.cpp:117:20:117:22 | val | +| clearning.cpp:118:2:118:2 | s | +| clearning.cpp:118:4:118:6 | val | +| clearning.cpp:124:2:124:2 | s | +| clearning.cpp:124:4:124:6 | val | +| clearning.cpp:125:2:125:2 | s | +| clearning.cpp:125:4:125:6 | val | +| clearning.cpp:126:7:126:7 | s | +| clearning.cpp:126:9:126:11 | val | +| clearning.cpp:131:2:131:2 | s | +| clearning.cpp:131:4:131:6 | val | +| clearning.cpp:132:2:132:2 | s | +| clearning.cpp:132:4:132:6 | val | +| clearning.cpp:133:7:133:7 | s | +| clearning.cpp:133:9:133:11 | val | +| clearning.cpp:138:2:138:2 | s | +| clearning.cpp:138:4:138:6 | val | +| clearning.cpp:139:4:139:4 | s | +| clearning.cpp:139:6:139:8 | val | +| clearning.cpp:140:7:140:7 | s | +| clearning.cpp:140:9:140:11 | val | +| clearning.cpp:151:3:151:3 | s | +| clearning.cpp:151:5:151:7 | val | +| clearning.cpp:157:3:157:3 | s | +| clearning.cpp:157:5:157:7 | val | +| clearning.cpp:158:3:158:3 | s | +| clearning.cpp:158:5:158:7 | val | +| clearning.cpp:164:3:164:3 | s | +| clearning.cpp:164:5:164:7 | val | +| clearning.cpp:165:3:165:3 | s | +| clearning.cpp:165:5:165:7 | val | +| clearning.cpp:171:3:171:3 | s | +| clearning.cpp:171:5:171:7 | val | +| clearning.cpp:172:3:172:3 | s | +| clearning.cpp:172:5:172:7 | val | +| clearning.cpp:178:3:178:3 | s | +| clearning.cpp:178:5:178:7 | val | +| clearning.cpp:179:3:179:3 | s | +| clearning.cpp:179:5:179:7 | val | | complex.cpp:11:22:11:23 | a_ | | complex.cpp:11:22:11:23 | this | | complex.cpp:12:22:12:23 | b_ | diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected index 9eef2881545..00a5f1a3f28 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -448,6 +448,42 @@ edges | by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] | | by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | | by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a | +| clearning.cpp:53:4:53:4 | s [post update] [x] | clearning.cpp:55:8:55:8 | s [x] | +| clearning.cpp:53:6:53:6 | x [inner post update] | clearning.cpp:53:4:53:4 | s [post update] [x] | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:6:53:6 | x [inner post update] | +| clearning.cpp:55:8:55:8 | s [x] | clearning.cpp:55:10:55:10 | x | +| clearning.cpp:124:2:124:2 | s [post update] [val] | clearning.cpp:126:7:126:7 | s [val] | +| clearning.cpp:124:2:124:25 | ... = ... | clearning.cpp:124:2:124:2 | s [post update] [val] | +| clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:124:2:124:25 | ... = ... | +| clearning.cpp:126:7:126:7 | s [val] | clearning.cpp:126:9:126:11 | val | +| clearning.cpp:131:2:131:2 | s [post update] [val] | clearning.cpp:133:7:133:7 | s [val] | +| clearning.cpp:131:2:131:25 | ... = ... | clearning.cpp:131:2:131:2 | s [post update] [val] | +| clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:131:2:131:25 | ... = ... | +| clearning.cpp:133:7:133:7 | s [val] | clearning.cpp:133:9:133:11 | val | +| clearning.cpp:138:2:138:2 | s [post update] [val] | clearning.cpp:140:7:140:7 | s [val] | +| clearning.cpp:138:2:138:25 | ... = ... | clearning.cpp:138:2:138:2 | s [post update] [val] | +| clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:138:2:138:25 | ... = ... | +| clearning.cpp:140:7:140:7 | s [val] | clearning.cpp:140:9:140:11 | val | +| clearning.cpp:151:3:151:3 | s [post update] [val] | clearning.cpp:152:8:152:8 | s [val] | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | s [post update] [val] | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | +| clearning.cpp:152:8:152:8 | s [val] | clearning.cpp:152:10:152:12 | val | +| clearning.cpp:157:3:157:3 | s [post update] [val] | clearning.cpp:159:8:159:8 | s [val] | +| clearning.cpp:157:3:157:22 | ... = ... | clearning.cpp:157:3:157:3 | s [post update] [val] | +| clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:157:3:157:22 | ... = ... | +| clearning.cpp:159:8:159:8 | s [val] | clearning.cpp:159:10:159:12 | val | +| clearning.cpp:164:3:164:3 | s [post update] [val] | clearning.cpp:166:8:166:8 | s [val] | +| clearning.cpp:164:3:164:22 | ... = ... | clearning.cpp:164:3:164:3 | s [post update] [val] | +| clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:164:3:164:22 | ... = ... | +| clearning.cpp:166:8:166:8 | s [val] | clearning.cpp:166:10:166:12 | val | +| clearning.cpp:171:3:171:3 | s [post update] [val] | clearning.cpp:173:8:173:8 | s [val] | +| clearning.cpp:171:3:171:22 | ... = ... | clearning.cpp:171:3:171:3 | s [post update] [val] | +| clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:171:3:171:22 | ... = ... | +| clearning.cpp:173:8:173:8 | s [val] | clearning.cpp:173:10:173:12 | val | +| clearning.cpp:178:3:178:3 | s [post update] [val] | clearning.cpp:180:8:180:8 | s [val] | +| clearning.cpp:178:3:178:22 | ... = ... | clearning.cpp:178:3:178:3 | s [post update] [val] | +| clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:178:3:178:22 | ... = ... | +| clearning.cpp:180:8:180:8 | s [val] | clearning.cpp:180:10:180:12 | val | | complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | this [a_] | | complex.cpp:9:20:9:21 | this [a_] | complex.cpp:9:20:9:21 | a_ | | complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | @@ -1155,6 +1191,51 @@ nodes | by_reference.cpp:135:27:135:27 | a | semmle.label | a | | by_reference.cpp:136:8:136:13 | pouter [a] | semmle.label | pouter [a] | | by_reference.cpp:136:16:136:16 | a | semmle.label | a | +| clearning.cpp:53:4:53:4 | s [post update] [x] | semmle.label | s [post update] [x] | +| clearning.cpp:53:6:53:6 | x [inner post update] | semmle.label | x [inner post update] | +| clearning.cpp:53:10:53:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:55:8:55:8 | s [x] | semmle.label | s [x] | +| clearning.cpp:55:10:55:10 | x | semmle.label | x | +| clearning.cpp:124:2:124:2 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:124:2:124:25 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:124:10:124:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:126:7:126:7 | s [val] | semmle.label | s [val] | +| clearning.cpp:126:9:126:11 | val | semmle.label | val | +| clearning.cpp:131:2:131:2 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:131:2:131:25 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:131:10:131:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:133:7:133:7 | s [val] | semmle.label | s [val] | +| clearning.cpp:133:9:133:11 | val | semmle.label | val | +| clearning.cpp:138:2:138:2 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:138:2:138:25 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:138:10:138:19 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:140:7:140:7 | s [val] | semmle.label | s [val] | +| clearning.cpp:140:9:140:11 | val | semmle.label | val | +| clearning.cpp:151:3:151:3 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:151:3:151:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:151:11:151:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:152:8:152:8 | s [val] | semmle.label | s [val] | +| clearning.cpp:152:10:152:12 | val | semmle.label | val | +| clearning.cpp:157:3:157:3 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:157:3:157:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:157:11:157:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:159:8:159:8 | s [val] | semmle.label | s [val] | +| clearning.cpp:159:10:159:12 | val | semmle.label | val | +| clearning.cpp:164:3:164:3 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:164:3:164:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:164:11:164:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:166:8:166:8 | s [val] | semmle.label | s [val] | +| clearning.cpp:166:10:166:12 | val | semmle.label | val | +| clearning.cpp:171:3:171:3 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:171:3:171:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:171:11:171:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:173:8:173:8 | s [val] | semmle.label | s [val] | +| clearning.cpp:173:10:173:12 | val | semmle.label | val | +| clearning.cpp:178:3:178:3 | s [post update] [val] | semmle.label | s [post update] [val] | +| clearning.cpp:178:3:178:22 | ... = ... | semmle.label | ... = ... | +| clearning.cpp:178:11:178:20 | call to user_input | semmle.label | call to user_input | +| clearning.cpp:180:8:180:8 | s [val] | semmle.label | s [val] | +| clearning.cpp:180:10:180:12 | val | semmle.label | val | | complex.cpp:9:7:9:7 | this [a_] | semmle.label | this [a_] | | complex.cpp:9:20:9:21 | a_ | semmle.label | a_ | | complex.cpp:9:20:9:21 | this [a_] | semmle.label | this [a_] | @@ -1551,6 +1632,15 @@ subpaths | by_reference.cpp:134:29:134:29 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:134:29:134:29 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input | | by_reference.cpp:135:27:135:27 | a | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:135:27:135:27 | a | a flows from $@ | by_reference.cpp:88:13:88:22 | call to user_input | call to user_input | | by_reference.cpp:136:16:136:16 | a | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:136:16:136:16 | a | a flows from $@ | by_reference.cpp:96:8:96:17 | call to user_input | call to user_input | +| clearning.cpp:55:10:55:10 | x | clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:55:10:55:10 | x | x flows from $@ | clearning.cpp:53:10:53:19 | call to user_input | call to user_input | +| clearning.cpp:126:9:126:11 | val | clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:126:9:126:11 | val | val flows from $@ | clearning.cpp:124:10:124:19 | call to user_input | call to user_input | +| clearning.cpp:133:9:133:11 | val | clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:133:9:133:11 | val | val flows from $@ | clearning.cpp:131:10:131:19 | call to user_input | call to user_input | +| clearning.cpp:140:9:140:11 | val | clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:140:9:140:11 | val | val flows from $@ | clearning.cpp:138:10:138:19 | call to user_input | call to user_input | +| clearning.cpp:152:10:152:12 | val | clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:152:10:152:12 | val | val flows from $@ | clearning.cpp:151:11:151:20 | call to user_input | call to user_input | +| clearning.cpp:159:10:159:12 | val | clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:159:10:159:12 | val | val flows from $@ | clearning.cpp:157:11:157:20 | call to user_input | call to user_input | +| clearning.cpp:166:10:166:12 | val | clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:166:10:166:12 | val | val flows from $@ | clearning.cpp:164:11:164:20 | call to user_input | call to user_input | +| clearning.cpp:173:10:173:12 | val | clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:173:10:173:12 | val | val flows from $@ | clearning.cpp:171:11:171:20 | call to user_input | call to user_input | +| clearning.cpp:180:10:180:12 | val | clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:180:10:180:12 | val | val flows from $@ | clearning.cpp:178:11:178:20 | call to user_input | call to user_input | | complex.cpp:42:18:42:18 | call to a | complex.cpp:53:19:53:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:53:19:53:28 | call to user_input | call to user_input | | complex.cpp:42:18:42:18 | call to a | complex.cpp:55:19:55:28 | call to user_input | complex.cpp:42:18:42:18 | call to a | call to a flows from $@ | complex.cpp:55:19:55:28 | call to user_input | call to user_input | | complex.cpp:43:18:43:18 | call to b | complex.cpp:54:19:54:28 | call to user_input | complex.cpp:43:18:43:18 | call to b | call to b flows from $@ | complex.cpp:54:19:54:28 | call to user_input | call to user_input | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index 907cccd197b..44965a9f2d9 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -6584,6 +6584,27 @@ | taint.cpp:691:18:691:18 | s [post update] | taint.cpp:695:7:695:7 | s | | | taint.cpp:691:20:691:20 | ref arg x | taint.cpp:694:9:694:9 | x | | | taint.cpp:694:7:694:7 | s [post update] | taint.cpp:695:7:695:7 | s | | +| taint.cpp:700:13:700:18 | call to source | taint.cpp:702:11:702:11 | s | | +| taint.cpp:701:9:701:9 | p | taint.cpp:702:4:702:4 | p | | +| taint.cpp:702:4:702:4 | p | taint.cpp:702:4:702:6 | ... ++ | | +| taint.cpp:702:4:702:6 | ... ++ | taint.cpp:702:3:702:6 | * ... | TAINT | +| taint.cpp:702:4:702:6 | ... ++ | taint.cpp:703:8:703:8 | p | TAINT | +| taint.cpp:702:10:702:11 | * ... | taint.cpp:702:3:702:11 | ... = ... | | +| taint.cpp:702:11:702:11 | s | taint.cpp:702:10:702:11 | * ... | TAINT | +| taint.cpp:709:25:709:25 | d | taint.cpp:709:25:709:25 | d | | +| taint.cpp:709:25:709:25 | d | taint.cpp:711:10:711:10 | d | | +| taint.cpp:709:25:709:25 | d | taint.cpp:712:7:712:7 | d | | +| taint.cpp:709:34:709:34 | s | taint.cpp:709:34:709:34 | s | | +| taint.cpp:709:34:709:34 | s | taint.cpp:710:18:710:18 | s | | +| taint.cpp:709:34:709:34 | s | taint.cpp:711:13:711:13 | s | | +| taint.cpp:710:18:710:18 | ref arg s | taint.cpp:709:34:709:34 | s | | +| taint.cpp:710:18:710:18 | ref arg s | taint.cpp:711:13:711:13 | s | | +| taint.cpp:711:10:711:10 | d | taint.cpp:711:2:711:8 | call to strncpy | | +| taint.cpp:711:10:711:10 | ref arg d | taint.cpp:709:25:709:25 | d | | +| taint.cpp:711:10:711:10 | ref arg d | taint.cpp:712:7:712:7 | d | | +| taint.cpp:711:13:711:13 | s | taint.cpp:711:2:711:8 | call to strncpy | TAINT | +| taint.cpp:711:13:711:13 | s | taint.cpp:711:10:711:10 | ref arg d | TAINT | +| taint.cpp:712:7:712:7 | ref arg d | taint.cpp:709:25:709:25 | d | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | | | vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | | | vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 9806ddb395e..9810418a95e 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -693,4 +693,21 @@ void test_argument_source_field_to_obj() { sink(s); // $ SPURIOUS: ast,ir sink(s.x); // $ ast,ir sink(s.y); // clean +} + +namespace strings { + void test_write_to_read_then_incr_then_deref() { + char* s = source(); + char* p; + *p++ = *s; + sink(p); // $ ast ir + } +} + +char * strncpy (char *, const char *, unsigned long); + +void test_strncpy(char* d, char* s) { + argument_source(s); + strncpy(d, s, 16); + sink(d); // $ ast ir } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index d714e8912c2..8321812e547 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -14462,6 +14462,106 @@ ir.cpp: # 1911| getExpr(): [VariableAccess] x # 1911| Type = [IntType] int # 1911| ValueCategory = prvalue(load) +# 1914| [TopLevelFunction] int static_function(int) +# 1914| : +# 1914| getParameter(0): [Parameter] x +# 1914| Type = [IntType] int +# 1914| getEntryPoint(): [BlockStmt] { ... } +# 1915| getStmt(0): [ReturnStmt] return ... +# 1915| getExpr(): [VariableAccess] x +# 1915| Type = [IntType] int +# 1915| ValueCategory = prvalue(load) +# 1918| [TopLevelFunction] void test_static_functions_with_assignments() +# 1918| : +# 1918| getEntryPoint(): [BlockStmt] { ... } +# 1919| getStmt(0): [DeclStmt] declaration +# 1919| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1919| Type = [Class] C +# 1919| getVariable().getInitializer(): [Initializer] initializer for c +# 1919| getExpr(): [ConstructorCall] call to C +# 1919| Type = [VoidType] void +# 1919| ValueCategory = prvalue +# 1920| getStmt(1): [DeclStmt] declaration +# 1920| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1920| Type = [IntType] int +# 1921| getStmt(2): [ExprStmt] ExprStmt +# 1921| getExpr(): [AssignExpr] ... = ... +# 1921| Type = [IntType] int +# 1921| ValueCategory = lvalue +# 1921| getLValue(): [VariableAccess] x +# 1921| Type = [IntType] int +# 1921| ValueCategory = lvalue +# 1921| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1921| Type = [IntType] int +# 1921| ValueCategory = prvalue +# 1921| getQualifier(): [VariableAccess] c +# 1921| Type = [Class] C +# 1921| ValueCategory = lvalue +# 1921| getArgument(0): [Literal] 10 +# 1921| Type = [IntType] int +# 1921| Value = [Literal] 10 +# 1921| ValueCategory = prvalue +# 1922| getStmt(3): [DeclStmt] declaration +# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1922| Type = [IntType] int +# 1923| getStmt(4): [ExprStmt] ExprStmt +# 1923| getExpr(): [AssignExpr] ... = ... +# 1923| Type = [IntType] int +# 1923| ValueCategory = lvalue +# 1923| getLValue(): [VariableAccess] y +# 1923| Type = [IntType] int +# 1923| ValueCategory = lvalue +# 1923| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1923| Type = [IntType] int +# 1923| ValueCategory = prvalue +# 1923| getArgument(0): [Literal] 10 +# 1923| Type = [IntType] int +# 1923| Value = [Literal] 10 +# 1923| ValueCategory = prvalue +# 1924| getStmt(5): [DeclStmt] declaration +# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1924| Type = [IntType] int +# 1925| getStmt(6): [ExprStmt] ExprStmt +# 1925| getExpr(): [AssignExpr] ... = ... +# 1925| Type = [IntType] int +# 1925| ValueCategory = lvalue +# 1925| getLValue(): [VariableAccess] z +# 1925| Type = [IntType] int +# 1925| ValueCategory = lvalue +# 1925| getRValue(): [FunctionCall] call to static_function +# 1925| Type = [IntType] int +# 1925| ValueCategory = prvalue +# 1925| getArgument(0): [Literal] 10 +# 1925| Type = [IntType] int +# 1925| Value = [Literal] 10 +# 1925| ValueCategory = prvalue +# 1926| getStmt(7): [ReturnStmt] return ... +# 1928| [TopLevelFunction] void test_double_assign() +# 1928| : +# 1928| getEntryPoint(): [BlockStmt] { ... } +# 1929| getStmt(0): [DeclStmt] declaration +# 1929| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1929| Type = [IntType] int +# 1929| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1929| Type = [IntType] int +# 1930| getStmt(1): [ExprStmt] ExprStmt +# 1930| getExpr(): [AssignExpr] ... = ... +# 1930| Type = [IntType] int +# 1930| ValueCategory = lvalue +# 1930| getLValue(): [VariableAccess] i +# 1930| Type = [IntType] int +# 1930| ValueCategory = lvalue +# 1930| getRValue(): [AssignExpr] ... = ... +# 1930| Type = [IntType] int +# 1930| ValueCategory = prvalue +# 1930| getLValue(): [VariableAccess] j +# 1930| Type = [IntType] int +# 1930| ValueCategory = lvalue +# 1930| getRValue(): [Literal] 40 +# 1930| Type = [IntType] int +# 1930| Value = [Literal] 40 +# 1930| ValueCategory = prvalue +# 1931| getStmt(2): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 6475af5fcc1..cd6e37472c1 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1911,4 +1911,23 @@ int noreturnTest2(int x) { return x; } +int static_function(int x) { + return x; +} + +void test_static_functions_with_assignments() { + C c; + int x; + x = c.StaticMemberFunction(10); + int y; + y = C::StaticMemberFunction(10); + int z; + z = static_function(10); +} + +void test_double_assign() { + int i, j; + i = j = 40; +} + // semmle-extractor-options: -std=c++17 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index e6f0bcbfe8d..713e23ca312 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -8821,6 +8821,62 @@ | ir.cpp:1911:12:1911:12 | Address | &:r1911_2 | | ir.cpp:1911:12:1911:12 | Load | m1907_6 | | ir.cpp:1911:12:1911:12 | StoreValue | r1911_3 | +| ir.cpp:1914:5:1914:19 | Address | &:r1914_7 | +| ir.cpp:1914:5:1914:19 | ChiPartial | partial:m1914_3 | +| ir.cpp:1914:5:1914:19 | ChiTotal | total:m1914_2 | +| ir.cpp:1914:5:1914:19 | Load | m1915_4 | +| ir.cpp:1914:5:1914:19 | SideEffect | m1914_3 | +| ir.cpp:1914:25:1914:25 | Address | &:r1914_5 | +| ir.cpp:1915:5:1915:13 | Address | &:r1915_1 | +| ir.cpp:1915:12:1915:12 | Address | &:r1915_2 | +| ir.cpp:1915:12:1915:12 | Load | m1914_6 | +| ir.cpp:1915:12:1915:12 | StoreValue | r1915_3 | +| ir.cpp:1918:6:1918:43 | ChiPartial | partial:m1918_3 | +| ir.cpp:1918:6:1918:43 | ChiTotal | total:m1918_2 | +| ir.cpp:1918:6:1918:43 | SideEffect | ~m1925_5 | +| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | +| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | +| ir.cpp:1919:7:1919:7 | Arg(this) | this:r1919_1 | +| ir.cpp:1919:7:1919:7 | CallTarget | func:r1919_3 | +| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_5 | +| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_7 | +| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1918_4 | +| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1919_2 | +| ir.cpp:1919:7:1919:7 | SideEffect | ~m1918_4 | +| ir.cpp:1920:9:1920:9 | Address | &:r1920_1 | +| ir.cpp:1921:5:1921:5 | Address | &:r1921_7 | +| ir.cpp:1921:11:1921:30 | CallTarget | func:r1921_2 | +| ir.cpp:1921:11:1921:30 | ChiPartial | partial:m1921_5 | +| ir.cpp:1921:11:1921:30 | ChiTotal | total:m1919_6 | +| ir.cpp:1921:11:1921:30 | SideEffect | ~m1919_6 | +| ir.cpp:1921:11:1921:30 | StoreValue | r1921_4 | +| ir.cpp:1921:32:1921:33 | Arg(0) | 0:r1921_3 | +| ir.cpp:1922:9:1922:9 | Address | &:r1922_1 | +| ir.cpp:1923:5:1923:5 | Address | &:r1923_6 | +| ir.cpp:1923:9:1923:31 | CallTarget | func:r1923_1 | +| ir.cpp:1923:9:1923:31 | ChiPartial | partial:m1923_4 | +| ir.cpp:1923:9:1923:31 | ChiTotal | total:m1921_6 | +| ir.cpp:1923:9:1923:31 | SideEffect | ~m1921_6 | +| ir.cpp:1923:9:1923:31 | StoreValue | r1923_3 | +| ir.cpp:1923:33:1923:34 | Arg(0) | 0:r1923_2 | +| ir.cpp:1924:9:1924:9 | Address | &:r1924_1 | +| ir.cpp:1925:5:1925:5 | Address | &:r1925_6 | +| ir.cpp:1925:9:1925:23 | CallTarget | func:r1925_1 | +| ir.cpp:1925:9:1925:23 | ChiPartial | partial:m1925_4 | +| ir.cpp:1925:9:1925:23 | ChiTotal | total:m1923_5 | +| ir.cpp:1925:9:1925:23 | SideEffect | ~m1923_5 | +| ir.cpp:1925:9:1925:23 | StoreValue | r1925_3 | +| ir.cpp:1925:25:1925:26 | Arg(0) | 0:r1925_2 | +| ir.cpp:1928:6:1928:23 | ChiPartial | partial:m1928_3 | +| ir.cpp:1928:6:1928:23 | ChiTotal | total:m1928_2 | +| ir.cpp:1928:6:1928:23 | SideEffect | m1928_3 | +| ir.cpp:1929:7:1929:7 | Address | &:r1929_1 | +| ir.cpp:1929:10:1929:10 | Address | &:r1929_3 | +| ir.cpp:1930:3:1930:3 | Address | &:r1930_5 | +| ir.cpp:1930:7:1930:7 | Address | &:r1930_2 | +| ir.cpp:1930:7:1930:12 | StoreValue | r1930_4 | +| ir.cpp:1930:11:1930:12 | StoreValue | r1930_1 | +| ir.cpp:1930:11:1930:12 | Unary | r1930_1 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index acc0cf6f4c0..38d9bb438ad 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -10167,6 +10167,83 @@ ir.cpp: # 1907| v1907_9(void) = AliasedUse : ~m? # 1907| v1907_10(void) = ExitFunction : +# 1914| int static_function(int) +# 1914| Block 0 +# 1914| v1914_1(void) = EnterFunction : +# 1914| mu1914_2(unknown) = AliasedDefinition : +# 1914| mu1914_3(unknown) = InitializeNonLocal : +# 1914| r1914_4(glval) = VariableAddress[x] : +# 1914| mu1914_5(int) = InitializeParameter[x] : &:r1914_4 +# 1915| r1915_1(glval) = VariableAddress[#return] : +# 1915| r1915_2(glval) = VariableAddress[x] : +# 1915| r1915_3(int) = Load[x] : &:r1915_2, ~m? +# 1915| mu1915_4(int) = Store[#return] : &:r1915_1, r1915_3 +# 1914| r1914_6(glval) = VariableAddress[#return] : +# 1914| v1914_7(void) = ReturnValue : &:r1914_6, ~m? +# 1914| v1914_8(void) = AliasedUse : ~m? +# 1914| v1914_9(void) = ExitFunction : + +# 1918| void test_static_functions_with_assignments() +# 1918| Block 0 +# 1918| v1918_1(void) = EnterFunction : +# 1918| mu1918_2(unknown) = AliasedDefinition : +# 1918| mu1918_3(unknown) = InitializeNonLocal : +# 1919| r1919_1(glval) = VariableAddress[c] : +# 1919| mu1919_2(C) = Uninitialized[c] : &:r1919_1 +# 1919| r1919_3(glval) = FunctionAddress[C] : +# 1919| v1919_4(void) = Call[C] : func:r1919_3, this:r1919_1 +# 1919| mu1919_5(unknown) = ^CallSideEffect : ~m? +# 1919| mu1919_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 +# 1920| r1920_1(glval) = VariableAddress[x] : +# 1920| mu1920_2(int) = Uninitialized[x] : &:r1920_1 +# 1921| r1921_1(glval) = VariableAddress[c] : +# 1921| r1921_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1921| r1921_3(int) = Constant[10] : +# 1921| r1921_4(int) = Call[StaticMemberFunction] : func:r1921_2, 0:r1921_3 +# 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? +# 1921| r1921_6(glval) = VariableAddress[x] : +# 1921| mu1921_7(int) = Store[x] : &:r1921_6, r1921_4 +# 1922| r1922_1(glval) = VariableAddress[y] : +# 1922| mu1922_2(int) = Uninitialized[y] : &:r1922_1 +# 1923| r1923_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1923| r1923_2(int) = Constant[10] : +# 1923| r1923_3(int) = Call[StaticMemberFunction] : func:r1923_1, 0:r1923_2 +# 1923| mu1923_4(unknown) = ^CallSideEffect : ~m? +# 1923| r1923_5(glval) = VariableAddress[y] : +# 1923| mu1923_6(int) = Store[y] : &:r1923_5, r1923_3 +# 1924| r1924_1(glval) = VariableAddress[z] : +# 1924| mu1924_2(int) = Uninitialized[z] : &:r1924_1 +# 1925| r1925_1(glval) = FunctionAddress[static_function] : +# 1925| r1925_2(int) = Constant[10] : +# 1925| r1925_3(int) = Call[static_function] : func:r1925_1, 0:r1925_2 +# 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? +# 1925| r1925_5(glval) = VariableAddress[z] : +# 1925| mu1925_6(int) = Store[z] : &:r1925_5, r1925_3 +# 1926| v1926_1(void) = NoOp : +# 1918| v1918_4(void) = ReturnVoid : +# 1918| v1918_5(void) = AliasedUse : ~m? +# 1918| v1918_6(void) = ExitFunction : + +# 1928| void test_double_assign() +# 1928| Block 0 +# 1928| v1928_1(void) = EnterFunction : +# 1928| mu1928_2(unknown) = AliasedDefinition : +# 1928| mu1928_3(unknown) = InitializeNonLocal : +# 1929| r1929_1(glval) = VariableAddress[i] : +# 1929| mu1929_2(int) = Uninitialized[i] : &:r1929_1 +# 1929| r1929_3(glval) = VariableAddress[j] : +# 1929| mu1929_4(int) = Uninitialized[j] : &:r1929_3 +# 1930| r1930_1(int) = Constant[40] : +# 1930| r1930_2(glval) = VariableAddress[j] : +# 1930| mu1930_3(int) = Store[j] : &:r1930_2, r1930_1 +# 1930| r1930_4(int) = CopyValue : r1930_1 +# 1930| r1930_5(glval) = VariableAddress[i] : +# 1930| mu1930_6(int) = Store[i] : &:r1930_5, r1930_4 +# 1931| v1931_1(void) = NoOp : +# 1928| v1928_4(void) = ReturnVoid : +# 1928| v1928_5(void) = AliasedUse : ~m? +# 1928| v1928_6(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp index 95e6474124a..2271953b7ab 100644 --- a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp +++ b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp @@ -70,3 +70,28 @@ int f4(int x) { } } } + +// No interesting ranges to check here - this irreducible CFG caused an infinite loop due to back edge detection +void gotoLoop(bool b1, bool b2) +{ + int j; + + if (b1) + return; + + if (!b2) + { + for (j = 0; j < 10; ++j) + { + goto main_decode_loop; + } + } + else + { + for (j = 0; j < 10; ++j) + { + int x; + main_decode_loop: + } + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected index 528d164b888..e1665c23315 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected @@ -1,8 +1,9 @@ edges | test.cpp:16:11:16:21 | mk_string_t indirection [string] | test.cpp:39:21:39:31 | call to mk_string_t indirection [string] | | test.cpp:18:5:18:30 | ... = ... | test.cpp:18:10:18:15 | str indirection [post update] [string] | -| test.cpp:18:10:18:15 | str indirection [post update] [string] | test.cpp:16:11:16:21 | mk_string_t indirection [string] | +| test.cpp:18:10:18:15 | str indirection [post update] [string] | test.cpp:19:5:19:7 | str indirection [string] | | test.cpp:18:19:18:24 | call to malloc | test.cpp:18:5:18:30 | ... = ... | +| test.cpp:19:5:19:7 | str indirection [string] | test.cpp:16:11:16:21 | mk_string_t indirection [string] | | test.cpp:39:21:39:31 | call to mk_string_t indirection [string] | test.cpp:42:13:42:15 | str indirection [string] | | test.cpp:39:21:39:31 | call to mk_string_t indirection [string] | test.cpp:72:17:72:19 | str indirection [string] | | test.cpp:39:21:39:31 | call to mk_string_t indirection [string] | test.cpp:80:17:80:19 | str indirection [string] | @@ -17,8 +18,9 @@ edges | test.cpp:80:22:80:27 | string indirection | test.cpp:80:22:80:27 | string | | test.cpp:88:11:88:30 | mk_string_t_plus_one indirection [string] | test.cpp:96:21:96:40 | call to mk_string_t_plus_one indirection [string] | | test.cpp:90:5:90:34 | ... = ... | test.cpp:90:10:90:15 | str indirection [post update] [string] | -| test.cpp:90:10:90:15 | str indirection [post update] [string] | test.cpp:88:11:88:30 | mk_string_t_plus_one indirection [string] | +| test.cpp:90:10:90:15 | str indirection [post update] [string] | test.cpp:91:5:91:7 | str indirection [string] | | test.cpp:90:19:90:24 | call to malloc | test.cpp:90:5:90:34 | ... = ... | +| test.cpp:91:5:91:7 | str indirection [string] | test.cpp:88:11:88:30 | mk_string_t_plus_one indirection [string] | | test.cpp:96:21:96:40 | call to mk_string_t_plus_one indirection [string] | test.cpp:99:13:99:15 | str indirection [string] | | test.cpp:96:21:96:40 | call to mk_string_t_plus_one indirection [string] | test.cpp:129:17:129:19 | str indirection [string] | | test.cpp:96:21:96:40 | call to mk_string_t_plus_one indirection [string] | test.cpp:137:17:137:19 | str indirection [string] | @@ -32,16 +34,17 @@ edges | test.cpp:137:17:137:19 | str indirection [string] | test.cpp:137:22:137:27 | string indirection | | test.cpp:137:22:137:27 | string indirection | test.cpp:137:22:137:27 | string | | test.cpp:147:5:147:34 | ... = ... | test.cpp:147:10:147:15 | str indirection [post update] [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:152:13:152:15 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:154:13:154:15 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:156:13:156:15 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:175:17:175:19 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:187:17:187:19 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:195:17:195:19 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:199:17:199:19 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:203:17:203:19 | str indirection [string] | -| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:207:17:207:19 | str indirection [string] | +| test.cpp:147:10:147:15 | str indirection [post update] [string] | test.cpp:148:5:148:7 | str indirection [string] | | test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:152:13:152:15 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:154:13:154:15 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:156:13:156:15 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:175:17:175:19 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:187:17:187:19 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:195:17:195:19 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:199:17:199:19 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:203:17:203:19 | str indirection [string] | +| test.cpp:148:5:148:7 | str indirection [string] | test.cpp:207:17:207:19 | str indirection [string] | | test.cpp:152:13:152:15 | str indirection [string] | test.cpp:152:18:152:23 | string | | test.cpp:152:13:152:15 | str indirection [string] | test.cpp:152:18:152:23 | string indirection | | test.cpp:152:18:152:23 | string indirection | test.cpp:152:18:152:23 | string | @@ -91,6 +94,7 @@ nodes | test.cpp:18:5:18:30 | ... = ... | semmle.label | ... = ... | | test.cpp:18:10:18:15 | str indirection [post update] [string] | semmle.label | str indirection [post update] [string] | | test.cpp:18:19:18:24 | call to malloc | semmle.label | call to malloc | +| test.cpp:19:5:19:7 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:39:21:39:31 | call to mk_string_t indirection [string] | semmle.label | call to mk_string_t indirection [string] | | test.cpp:42:13:42:15 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:42:18:42:23 | string | semmle.label | string | @@ -105,6 +109,7 @@ nodes | test.cpp:90:5:90:34 | ... = ... | semmle.label | ... = ... | | test.cpp:90:10:90:15 | str indirection [post update] [string] | semmle.label | str indirection [post update] [string] | | test.cpp:90:19:90:24 | call to malloc | semmle.label | call to malloc | +| test.cpp:91:5:91:7 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:96:21:96:40 | call to mk_string_t_plus_one indirection [string] | semmle.label | call to mk_string_t_plus_one indirection [string] | | test.cpp:99:13:99:15 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:99:18:99:23 | string | semmle.label | string | @@ -118,6 +123,7 @@ nodes | test.cpp:147:5:147:34 | ... = ... | semmle.label | ... = ... | | test.cpp:147:10:147:15 | str indirection [post update] [string] | semmle.label | str indirection [post update] [string] | | test.cpp:147:19:147:24 | call to malloc | semmle.label | call to malloc | +| test.cpp:148:5:148:7 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:152:13:152:15 | str indirection [string] | semmle.label | str indirection [string] | | test.cpp:152:18:152:23 | string | semmle.label | string | | test.cpp:152:18:152:23 | string indirection | semmle.label | string indirection | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected index 19de8c61578..8d46c8fe99b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected @@ -8,13 +8,19 @@ edges | overflowdestination.cpp:23:45:23:48 | argv indirection | overflowdestination.cpp:30:17:30:20 | arg1 indirection | | overflowdestination.cpp:23:45:23:48 | argv indirection | overflowdestination.cpp:30:17:30:20 | arg1 indirection | | overflowdestination.cpp:43:8:43:10 | fgets output argument | overflowdestination.cpp:46:15:46:17 | src indirection | +| overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:53:9:53:12 | memcpy output argument | | overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:53:15:53:17 | src indirection | | overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:53:15:53:17 | src indirection | +| overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:54:9:54:12 | memcpy output argument | +| overflowdestination.cpp:53:9:53:12 | memcpy output argument | overflowdestination.cpp:54:9:54:12 | memcpy output argument | +| overflowdestination.cpp:54:9:54:12 | memcpy output argument | overflowdestination.cpp:54:9:54:12 | memcpy output argument | | overflowdestination.cpp:57:52:57:54 | src indirection | overflowdestination.cpp:64:16:64:19 | src2 indirection | | overflowdestination.cpp:57:52:57:54 | src indirection | overflowdestination.cpp:64:16:64:19 | src2 indirection | | overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:75:30:75:32 | src indirection | | overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:76:30:76:32 | src indirection | +| overflowdestination.cpp:75:30:75:32 | overflowdest_test2 output argument | overflowdestination.cpp:76:30:76:32 | src indirection | | overflowdestination.cpp:75:30:75:32 | src indirection | overflowdestination.cpp:50:52:50:54 | src indirection | +| overflowdestination.cpp:75:30:75:32 | src indirection | overflowdestination.cpp:75:30:75:32 | overflowdest_test2 output argument | | overflowdestination.cpp:76:30:76:32 | src indirection | overflowdestination.cpp:57:52:57:54 | src indirection | nodes | main.cpp:6:27:6:30 | argv indirection | semmle.label | argv indirection | @@ -28,15 +34,20 @@ nodes | overflowdestination.cpp:43:8:43:10 | fgets output argument | semmle.label | fgets output argument | | overflowdestination.cpp:46:15:46:17 | src indirection | semmle.label | src indirection | | overflowdestination.cpp:50:52:50:54 | src indirection | semmle.label | src indirection | +| overflowdestination.cpp:53:9:53:12 | memcpy output argument | semmle.label | memcpy output argument | | overflowdestination.cpp:53:15:53:17 | src indirection | semmle.label | src indirection | | overflowdestination.cpp:53:15:53:17 | src indirection | semmle.label | src indirection | +| overflowdestination.cpp:54:9:54:12 | memcpy output argument | semmle.label | memcpy output argument | | overflowdestination.cpp:57:52:57:54 | src indirection | semmle.label | src indirection | | overflowdestination.cpp:64:16:64:19 | src2 indirection | semmle.label | src2 indirection | | overflowdestination.cpp:64:16:64:19 | src2 indirection | semmle.label | src2 indirection | | overflowdestination.cpp:73:8:73:10 | fgets output argument | semmle.label | fgets output argument | +| overflowdestination.cpp:75:30:75:32 | overflowdest_test2 output argument | semmle.label | overflowdest_test2 output argument | | overflowdestination.cpp:75:30:75:32 | src indirection | semmle.label | src indirection | | overflowdestination.cpp:76:30:76:32 | src indirection | semmle.label | src indirection | subpaths +| overflowdestination.cpp:75:30:75:32 | src indirection | overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:53:9:53:12 | memcpy output argument | overflowdestination.cpp:75:30:75:32 | overflowdest_test2 output argument | +| overflowdestination.cpp:75:30:75:32 | src indirection | overflowdestination.cpp:50:52:50:54 | src indirection | overflowdestination.cpp:54:9:54:12 | memcpy output argument | overflowdestination.cpp:75:30:75:32 | overflowdest_test2 output argument | #select | overflowdestination.cpp:30:2:30:8 | call to strncpy | main.cpp:6:27:6:30 | argv indirection | overflowdestination.cpp:30:17:30:20 | arg1 indirection | To avoid overflow, this operation should be bounded by destination-buffer size, not source-buffer size. | | overflowdestination.cpp:30:2:30:8 | call to strncpy | main.cpp:6:27:6:30 | argv indirection | overflowdestination.cpp:30:17:30:20 | arg1 indirection | To avoid overflow, this operation should be bounded by destination-buffer size, not source-buffer size. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/ComparisonWithWiderType.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/ComparisonWithWiderType.expected index d04bff0a812..fb46cacf4a9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/ComparisonWithWiderType.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/ComparisonWithWiderType.expected @@ -1,6 +1,7 @@ | test.c:4:14:4:18 | ... < ... | Comparison between $@ of type char and $@ of wider type int. | test.c:3:7:3:7 | c | c | test.c:2:17:2:17 | x | x | | test.c:9:14:9:18 | ... > ... | Comparison between $@ of type char and $@ of wider type int. | test.c:8:7:8:7 | c | c | test.c:7:17:7:17 | x | x | | test.c:14:14:14:18 | ... < ... | Comparison between $@ of type short and $@ of wider type int. | test.c:13:8:13:8 | s | s | test.c:12:17:12:17 | x | x | +| test.c:42:15:42:29 | ... < ... | Comparison between $@ of type short and $@ of wider type int. | test.c:41:9:41:10 | s1 | s1 | test.c:42:20:42:29 | 65535 | 65535 | | test.c:65:14:65:18 | ... < ... | Comparison between $@ of type short and $@ of wider type int. | test.c:64:8:64:8 | s | s | test.c:63:17:63:17 | x | x | | test.c:87:14:87:18 | ... < ... | Comparison between $@ of type unsigned char and $@ of wider type unsigned int. | test.c:83:16:83:16 | c | c | test.c:84:15:84:15 | x | x | | test.c:91:14:91:23 | ... < ... | Comparison between $@ of type unsigned char and $@ of wider type int. | test.c:83:16:83:16 | c | c | test.c:91:18:91:23 | 65280 | 65280 | @@ -13,3 +14,4 @@ | test.c:107:14:107:26 | ... < ... | Comparison between $@ of type unsigned char and $@ of wider type unsigned int. | test.c:83:16:83:16 | c | c | test.c:107:19:107:25 | ... >> ... | ... >> ... | | test.c:128:15:128:21 | ... < ... | Comparison between $@ of type unsigned char and $@ of wider type unsigned int. | test.c:121:16:121:17 | uc | uc | test.c:123:19:123:20 | sz | sz | | test.c:139:15:139:21 | ... < ... | Comparison between $@ of type unsigned char and $@ of wider type unsigned int. | test.c:121:16:121:17 | uc | uc | test.c:123:19:123:20 | sz | sz | +| test.c:156:9:156:14 | ... < ... | Comparison between $@ of type short and $@ of wider type int. | test.c:150:8:150:8 | s | s | test.c:151:6:151:7 | sx | sx | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/test.c index f0b7f445aeb..8361ae3e31b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ComparisonWithWiderType/test.c @@ -39,7 +39,7 @@ void test5 () { void test6() { short s1; - for (s1 = 0; s1 < 0x0000ffff; s1++) {} + for (s1 = 0; s1 < 0x0000ffff; s1++) {} // BAD } void test7(long long l) { @@ -145,3 +145,22 @@ void test13() { sz = (unsigned)sx & (unsigned)sy; for (uc = 0; uc < sz; uc++) {} // GOOD } + +void test14() { + short s = 0; + int sx = 0x7FFF + 1; + + // BAD: 's' is compared with a value of a wider type. + // 's' overflows before reaching 'sx', + // causing an infinite loop + while (s < sx) { + s += 1; + } + + unsigned int ux = 0; + + // GOOD: 'ux' has a type at least as wide as 'max_get' + while (ux < sx) { + ux += 1; + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml index 096e9d13dd2..d29089ece4d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/qlpack.yml @@ -6,3 +6,4 @@ dependencies: codeql/cpp-queries: ${workspace} extractor: cpp tests: . +warnOnImplicitThis: true diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index a4a6a534105..be4c929650c 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -24,5 +24,5 @@ Microsoft.Win32,,,8,,,,,,,,,,,,,,8, MySql.Data.MySqlClient,48,,,,,,,,,,,48,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,92,,,,,7, -System,65,25,12157,,8,8,9,,,4,3,33,1,17,3,4,10163,1994 +System,65,25,12148,,8,8,9,,,4,3,33,1,17,3,4,10163,1985 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 163638d895f..8f5b7ee0a8c 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",25,12157,65,7 + System,"``System.*``, ``System``",25,12148,65,7 Others,"``Dapper``, ``JsonToItemsTaskFactory``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NETCore.Platforms.BuildTasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``Windows.Security.Cryptography.Core``",,568,138, - Totals,,25,12732,397,7 + Totals,,25,12723,397,7 diff --git a/csharp/downgrades/qlpack.yml b/csharp/downgrades/qlpack.yml index c326f44bb0d..2ffd6b94f29 100644 --- a/csharp/downgrades/qlpack.yml +++ b/csharp/downgrades/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/csharp-downgrades groups: csharp downgrades: . library: true +warnOnImplicitThis: true diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyCache.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyCache.cs index c93161e72f0..b92a708878a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyCache.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyCache.cs @@ -16,12 +16,12 @@ namespace Semmle.BuildAnalyser /// Locate all reference files and index them. /// /// Directories to search. - /// Callback for progress. - public AssemblyCache(IEnumerable dirs, IProgressMonitor progress) + /// Callback for progress. + public AssemblyCache(IEnumerable dirs, ProgressMonitor progressMonitor) { foreach (var dir in dirs) { - progress.FindingFiles(dir); + progressMonitor.FindingFiles(dir); AddReferenceDirectory(dir); } IndexReferences(); @@ -41,6 +41,8 @@ namespace Semmle.BuildAnalyser } } + private static readonly Version emptyVersion = new Version(0, 0, 0, 0); + /// /// Indexes all DLLs we have located. /// Because this is a potentially time-consuming operation, it is put into a separate stage. @@ -55,7 +57,9 @@ namespace Semmle.BuildAnalyser // Index "assemblyInfo" by version string // The OrderBy is used to ensure that we by default select the highest version number. - foreach (var info in assemblyInfoByFileName.Values.OrderBy(info => info.Id)) + foreach (var info in assemblyInfoByFileName.Values + .OrderBy(info => info.Name) + .ThenBy(info => info.Version ?? emptyVersion)) { foreach (var index in info.IndexStrings) assemblyInfoById[index] = info; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs index 47bdd3ae568..ad501c9e758 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs @@ -8,89 +8,60 @@ using System.Threading.Tasks; using System.Collections.Concurrent; using System.Text; using System.Security.Cryptography; +using System.Text.RegularExpressions; namespace Semmle.BuildAnalyser { - /// - /// The output of a build analysis. - /// - internal interface IBuildAnalysis - { - /// - /// Full filepaths of external references. - /// - IEnumerable ReferenceFiles { get; } - - /// - /// Full filepaths of C# source files from project files. - /// - IEnumerable ProjectSourceFiles { get; } - - /// - /// Full filepaths of C# source files in the filesystem. - /// - IEnumerable AllSourceFiles { get; } - - /// - /// The assembly IDs which could not be resolved. - /// - IEnumerable UnresolvedReferences { get; } - - /// - /// List of source files referenced by projects but - /// which were not found in the filesystem. - /// - IEnumerable MissingSourceFiles { get; } - } - /// /// Main implementation of the build analysis. /// - internal sealed class BuildAnalysis : IBuildAnalysis, IDisposable + internal sealed partial class BuildAnalysis : IDisposable { private readonly AssemblyCache assemblyCache; - private readonly IProgressMonitor progressMonitor; + private readonly ProgressMonitor progressMonitor; private readonly IDictionary usedReferences = new ConcurrentDictionary(); private readonly IDictionary sources = new ConcurrentDictionary(); private readonly IDictionary unresolvedReferences = new ConcurrentDictionary(); - private int failedProjects, succeededProjects; + private int failedProjects; + private int succeededProjects; private readonly string[] allSources; private int conflictedReferences = 0; + private readonly Options options; + private readonly DirectoryInfo sourceDir; + private readonly DotNet dotnet; /// /// Performs a C# build analysis. /// /// Analysis options from the command line. - /// Display of analysis progress. - public BuildAnalysis(Options options, IProgressMonitor progress) + /// Display of analysis progress. + public BuildAnalysis(Options options, ProgressMonitor progressMonitor) { var startTime = DateTime.Now; - progressMonitor = progress; - var sourceDir = new DirectoryInfo(options.SrcDir); + this.options = options; + this.progressMonitor = progressMonitor; + this.sourceDir = new DirectoryInfo(options.SrcDir); - progressMonitor.FindingFiles(options.SrcDir); + try + { + this.dotnet = new DotNet(progressMonitor); + } + catch + { + progressMonitor.MissingDotNet(); + throw; + } - allSources = sourceDir.GetFiles("*.cs", SearchOption.AllDirectories) - .Select(d => d.FullName) - .Where(d => !options.ExcludesFile(d)) - .ToArray(); + this.progressMonitor.FindingFiles(options.SrcDir); + + this.allSources = GetFiles("*.cs").ToArray(); + var allProjects = GetFiles("*.csproj"); + var solutions = options.SolutionFile is not null + ? new[] { options.SolutionFile } + : GetFiles("*.sln"); var dllDirNames = options.DllDirs.Select(Path.GetFullPath).ToList(); - packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName)); - - if (options.UseNuGet) - { - try - { - var nuget = new NugetPackages(sourceDir.FullName, packageDirectory); - nuget.InstallPackages(progressMonitor); - } - catch (FileNotFoundException) - { - progressMonitor.MissingNuGet(); - } - } // Find DLLs in the .Net Framework if (options.ScanNetFrameworkDlls) @@ -100,33 +71,45 @@ namespace Semmle.BuildAnalyser dllDirNames.Add(runtimeLocation); } - // These files can sometimes prevent `dotnet restore` from working correctly. - using (new FileRenamer(sourceDir.GetFiles("global.json", SearchOption.AllDirectories))) - using (new FileRenamer(sourceDir.GetFiles("Directory.Build.props", SearchOption.AllDirectories))) - { - var solutions = options.SolutionFile is not null ? - new[] { options.SolutionFile } : - sourceDir.GetFiles("*.sln", SearchOption.AllDirectories).Select(d => d.FullName); - - if (options.UseNuGet) - { - RestoreSolutions(solutions); - } - dllDirNames.Add(packageDirectory.DirInfo.FullName); - assemblyCache = new BuildAnalyser.AssemblyCache(dllDirNames, progress); - AnalyseSolutions(solutions); - - foreach (var filename in assemblyCache.AllAssemblies.Select(a => a.Filename)) - UseReference(filename); - } - - ResolveConflicts(); - if (options.UseMscorlib) { UseReference(typeof(object).Assembly.Location); } + packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName)); + + if (options.UseNuGet) + { + dllDirNames.Add(packageDirectory.DirInfo.FullName); + try + { + var nuget = new NugetPackages(sourceDir.FullName, packageDirectory, progressMonitor); + nuget.InstallPackages(); + } + catch (FileNotFoundException) + { + progressMonitor.MissingNuGet(); + } + + // TODO: remove the below when the required SDK is installed + using (new FileRenamer(sourceDir.GetFiles("global.json", SearchOption.AllDirectories))) + { + Restore(solutions); + Restore(allProjects); + DownloadMissingPackages(allProjects); + } + } + + assemblyCache = new AssemblyCache(dllDirNames, progressMonitor); + AnalyseSolutions(solutions); + + foreach (var filename in assemblyCache.AllAssemblies.Select(a => a.Filename)) + { + UseReference(filename); + } + + ResolveConflicts(); + // Output the findings foreach (var r in usedReferences.Keys) { @@ -150,6 +133,13 @@ namespace Semmle.BuildAnalyser DateTime.Now - startTime); } + private IEnumerable GetFiles(string pattern) + { + return sourceDir.GetFiles(pattern, SearchOption.AllDirectories) + .Select(d => d.FullName) + .Where(d => !options.ExcludesFile(d)); + } + /// /// Computes a unique temp directory for the packages associated /// with this source tree. Use a SHA1 of the directory name. @@ -159,9 +149,7 @@ namespace Semmle.BuildAnalyser private static string ComputeTempDirectory(string srcDir) { var bytes = Encoding.Unicode.GetBytes(srcDir); - - using var sha1 = SHA1.Create(); - var sha = sha1.ComputeHash(bytes); + var sha = SHA1.HashData(bytes); var sb = new StringBuilder(); foreach (var b in sha.Take(8)) sb.AppendFormat("{0:x2}", b); @@ -196,12 +184,15 @@ namespace Semmle.BuildAnalyser // Pick the highest version for each assembly name foreach (var r in sortedReferences) + { finalAssemblyList[r.Name] = r; - + } // Update the used references list usedReferences.Clear(); foreach (var r in finalAssemblyList.Select(r => r.Value.Filename)) + { UseReference(r); + } // Report the results foreach (var r in sortedReferences) @@ -279,7 +270,9 @@ namespace Semmle.BuildAnalyser private void AnalyseProjectFiles(IEnumerable projectFiles) { foreach (var proj in projectFiles) + { AnalyseProject(proj); + } } private void AnalyseProject(FileInfo project) @@ -325,36 +318,90 @@ namespace Semmle.BuildAnalyser } - private void Restore(string projectOrSolution) + private bool Restore(string target) { - int exit; - try - { - exit = DotNet.RestoreToDirectory(projectOrSolution, packageDirectory.DirInfo.FullName); - } - catch (FileNotFoundException) - { - exit = 2; - } + return dotnet.RestoreToDirectory(target, packageDirectory.DirInfo.FullName); + } - switch (exit) + private void Restore(IEnumerable targets) + { + foreach (var target in targets) { - case 0: - case 1: - // No errors - break; - default: - progressMonitor.CommandFailed("dotnet", $"restore \"{projectOrSolution}\"", exit); - break; + Restore(target); } } - public void RestoreSolutions(IEnumerable solutions) + private void DownloadMissingPackages(IEnumerable restoreTargets) { - Parallel.ForEach(solutions, new ParallelOptions { MaxDegreeOfParallelism = 4 }, Restore); + var alreadyDownloadedPackages = Directory.GetDirectories(packageDirectory.DirInfo.FullName).Select(d => Path.GetFileName(d).ToLowerInvariant()).ToHashSet(); + var notYetDownloadedPackages = new HashSet(); + + var allFiles = GetFiles("*.*").ToArray(); + foreach (var file in allFiles) + { + try + { + using var sr = new StreamReader(file); + ReadOnlySpan line; + while ((line = sr.ReadLine()) != null) + { + foreach (var valueMatch in PackageReference().EnumerateMatches(line)) + { + // We can't get the group from the ValueMatch, so doing it manually: + var match = line.Slice(valueMatch.Index, valueMatch.Length); + var includeIndex = match.IndexOf("Include", StringComparison.InvariantCultureIgnoreCase); + if (includeIndex == -1) + { + continue; + } + + match = match.Slice(includeIndex + "Include".Length + 1); + + var quoteIndex1 = match.IndexOf("\""); + var quoteIndex2 = match.Slice(quoteIndex1 + 1).IndexOf("\""); + + var packageName = match.Slice(quoteIndex1 + 1, quoteIndex2).ToString().ToLowerInvariant(); + if (!alreadyDownloadedPackages.Contains(packageName)) + { + notYetDownloadedPackages.Add(packageName); + } + } + } + } + catch (Exception ex) + { + progressMonitor.FailedToReadFile(file, ex); + continue; + } + } + + foreach (var package in notYetDownloadedPackages) + { + progressMonitor.NugetInstall(package); + using var tempDir = new TemporaryDirectory(ComputeTempDirectory(package)); + var success = dotnet.New(tempDir.DirInfo.FullName); + if (!success) + { + continue; + } + success = dotnet.AddPackage(tempDir.DirInfo.FullName, package); + if (!success) + { + continue; + } + + success = Restore(tempDir.DirInfo.FullName); + + // TODO: the restore might fail, we could retry with a prerelease (*-* instead of *) version of the package. + + if (!success) + { + progressMonitor.FailedToRestoreNugetPackage(package); + } + } } - public void AnalyseSolutions(IEnumerable solutions) + private void AnalyseSolutions(IEnumerable solutions) { Parallel.ForEach(solutions, new ParallelOptions { MaxDegreeOfParallelism = 4 }, solutionFile => { @@ -375,5 +422,8 @@ namespace Semmle.BuildAnalyser { packageDirectory?.Dispose(); } + + [GeneratedRegex("", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex PackageReference(); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/DotNet.cs index 4045519d3e0..dbe3b2c4a1e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/DotNet.cs @@ -1,17 +1,66 @@ -using System.Diagnostics; +using System; +using System.Diagnostics; namespace Semmle.BuildAnalyser { /// /// Utilities to run the "dotnet" command. /// - internal static class DotNet + internal class DotNet { - public static int RestoreToDirectory(string projectOrSolutionFile, string packageDirectory) + private readonly ProgressMonitor progressMonitor; + + public DotNet(ProgressMonitor progressMonitor) { - using var proc = Process.Start("dotnet", $"restore --no-dependencies \"{projectOrSolutionFile}\" --packages \"{packageDirectory}\" /p:DisableImplicitNuGetFallbackFolder=true"); + this.progressMonitor = progressMonitor; + Info(); + } + + private void Info() + { + // TODO: make sure the below `dotnet` version is matching the one specified in global.json + progressMonitor.RunningProcess("dotnet --info"); + using var proc = Process.Start("dotnet", "--info"); proc.WaitForExit(); - return proc.ExitCode; + var ret = proc.ExitCode; + + if (ret != 0) + { + progressMonitor.CommandFailed("dotnet", "--info", ret); + throw new Exception($"dotnet --info failed with exit code {ret}."); + } + } + + private bool RunCommand(string args) + { + progressMonitor.RunningProcess($"dotnet {args}"); + using var proc = Process.Start("dotnet", args); + proc.WaitForExit(); + if (proc.ExitCode != 0) + { + progressMonitor.CommandFailed("dotnet", args, proc.ExitCode); + return false; + } + + return true; + } + + public bool RestoreToDirectory(string projectOrSolutionFile, string packageDirectory) + { + var args = $"restore --no-dependencies \"{projectOrSolutionFile}\" --packages \"{packageDirectory}\" /p:DisableImplicitNuGetFallbackFolder=true"; + return RunCommand(args); + } + + public bool New(string folder) + { + var args = $"new console --no-restore --output \"{folder}\""; + return RunCommand(args); + } + + public bool AddPackage(string folder, string package) + { + var args = $"add \"{folder}\" package \"{package}\" --no-restore"; + return RunCommand(args); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/NugetPackages.cs index 94e65d61462..ab5a71dd2c5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/NugetPackages.cs @@ -17,26 +17,24 @@ namespace Semmle.BuildAnalyser /// /// Create the package manager for a specified source tree. /// - /// The source directory. - public NugetPackages(string sourceDir, TemporaryDirectory packageDirectory) + public NugetPackages(string sourceDir, TemporaryDirectory packageDirectory, ProgressMonitor progressMonitor) { SourceDirectory = sourceDir; PackageDirectory = packageDirectory; + this.progressMonitor = progressMonitor; // Expect nuget.exe to be in a `nuget` directory under the directory containing this exe. var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location; - var directory = Path.GetDirectoryName(currentAssembly); - if (directory is null) - throw new FileNotFoundException($"Directory path '{currentAssembly}' of current assembly is null"); - + var directory = Path.GetDirectoryName(currentAssembly) + ?? throw new FileNotFoundException($"Directory path '{currentAssembly}' of current assembly is null"); nugetExe = Path.Combine(directory, "nuget", "nuget.exe"); if (!File.Exists(nugetExe)) throw new FileNotFoundException(string.Format("NuGet could not be found at {0}", nugetExe)); - packages = new DirectoryInfo(SourceDirectory). - EnumerateFiles("packages.config", SearchOption.AllDirectories). - ToArray(); + packages = new DirectoryInfo(SourceDirectory) + .EnumerateFiles("packages.config", SearchOption.AllDirectories) + .ToArray(); } // List of package files to download. @@ -51,11 +49,11 @@ namespace Semmle.BuildAnalyser /// Download the packages to the temp folder. /// /// The progress monitor used for reporting errors etc. - public void InstallPackages(IProgressMonitor pm) + public void InstallPackages() { foreach (var package in packages) { - RestoreNugetPackage(package.FullName, pm); + RestoreNugetPackage(package.FullName); } } @@ -80,9 +78,9 @@ namespace Semmle.BuildAnalyser /// /// The package file. /// Where to log progress/errors. - private void RestoreNugetPackage(string package, IProgressMonitor pm) + private void RestoreNugetPackage(string package) { - pm.NugetInstall(package); + progressMonitor.NugetInstall(package); /* Use nuget.exe to install a package. * Note that there is a clutch of NuGet assemblies which could be used to @@ -115,7 +113,7 @@ namespace Semmle.BuildAnalyser if (p is null) { - pm.FailedNugetCommand(pi.FileName, pi.Arguments, "Couldn't start process."); + progressMonitor.FailedNugetCommand(pi.FileName, pi.Arguments, "Couldn't start process."); return; } @@ -125,16 +123,17 @@ namespace Semmle.BuildAnalyser p.WaitForExit(); if (p.ExitCode != 0) { - pm.FailedNugetCommand(pi.FileName, pi.Arguments, output + error); + progressMonitor.FailedNugetCommand(pi.FileName, pi.Arguments, output + error); } } catch (Exception ex) when (ex is System.ComponentModel.Win32Exception || ex is FileNotFoundException) { - pm.FailedNugetCommand(pi.FileName, pi.Arguments, ex.Message); + progressMonitor.FailedNugetCommand(pi.FileName, pi.Arguments, ex.Message); } } private readonly string nugetExe; + private readonly ProgressMonitor progressMonitor; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/ProgressMonitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/ProgressMonitor.cs index 5b1da929251..de1c5274c37 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/ProgressMonitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/ProgressMonitor.cs @@ -3,27 +3,7 @@ using System; namespace Semmle.BuildAnalyser { - /// - /// Callback for various events that may happen during the build analysis. - /// - internal interface IProgressMonitor - { - void FindingFiles(string dir); - void UnresolvedReference(string id, string project); - void AnalysingSolution(string filename); - void FailedProjectFile(string filename, string reason); - void FailedNugetCommand(string exe, string args, string message); - void NugetInstall(string package); - void ResolvedReference(string filename); - void Summary(int existingSources, int usedSources, int missingSources, int references, int unresolvedReferences, int resolvedConflicts, int totalProjects, int failedProjects, TimeSpan analysisTime); - void Log(Severity severity, string message); - void ResolvedConflict(string asm1, string asm2); - void MissingProject(string projectFile); - void CommandFailed(string exe, string arguments, int exitCode); - void MissingNuGet(); - } - - internal class ProgressMonitor : IProgressMonitor + internal class ProgressMonitor { private readonly ILogger logger; @@ -117,5 +97,26 @@ namespace Semmle.BuildAnalyser { logger.Log(Severity.Error, "Missing nuget.exe"); } + + public void MissingDotNet() + { + logger.Log(Severity.Error, "Missing dotnet CLI"); + } + + public void RunningProcess(string command) + { + logger.Log(Severity.Info, $"Running {command}"); + } + + public void FailedToRestoreNugetPackage(string package) + { + logger.Log(Severity.Info, $"Failed to restore nuget package {package}"); + } + + public void FailedToReadFile(string file, Exception ex) + { + logger.Log(Severity.Info, $"Failed to read file {file}"); + logger.Log(Severity.Debug, $"Failed to read file {file}, exception: {ex}"); + } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CsProjFile.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CsProjFile.cs index 385f1cc87c0..8a8cf79cb59 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CsProjFile.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CsProjFile.cs @@ -100,7 +100,7 @@ namespace Semmle.Extraction.CSharp // Figure out if it's dotnet core - var netCoreProjectFile = root.GetAttribute("Sdk") == "Microsoft.NET.Sdk"; + var netCoreProjectFile = root.GetAttribute("Sdk").StartsWith("Microsoft.NET.Sdk"); if (netCoreProjectFile) { diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 1acc1f679bf..f410a14eae6 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.6.0 + +No user-facing changes. + ## 1.5.4 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.6.0.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.6.0.md new file mode 100644 index 00000000000..f5bad5808f6 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.6.0.md @@ -0,0 +1,3 @@ +## 1.6.0 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index c216828ee1c..c4f0b07d533 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.4 +lastReleaseVersion: 1.6.0 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index a3c749c973c..e83567f77f5 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,8 +1,9 @@ name: codeql/csharp-solorigate-all -version: 1.5.4 +version: 1.6.0 groups: - csharp - solorigate library: true dependencies: codeql/csharp-all: ${workspace} +warnOnImplicitThis: true diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 1acc1f679bf..f410a14eae6 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.6.0 + +No user-facing changes. + ## 1.5.4 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.6.0.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.6.0.md new file mode 100644 index 00000000000..f5bad5808f6 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.6.0.md @@ -0,0 +1,3 @@ +## 1.6.0 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index c216828ee1c..c4f0b07d533 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.4 +lastReleaseVersion: 1.6.0 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index de3883ef605..4ff99e03b0e 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.5.4 +version: 1.6.0 groups: - csharp - solorigate @@ -7,3 +7,4 @@ defaultSuiteFile: codeql-suites/solorigate.qls dependencies: codeql/csharp-all: ${workspace} codeql/csharp-solorigate-all: ${workspace} +warnOnImplicitThis: true diff --git a/csharp/ql/campaigns/Solorigate/test/qlpack.yml b/csharp/ql/campaigns/Solorigate/test/qlpack.yml index 7093935d651..dfd335f2726 100644 --- a/csharp/ql/campaigns/Solorigate/test/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/test/qlpack.yml @@ -10,3 +10,4 @@ dependencies: codeql/csharp-solorigate-queries: ${workspace} extractor: csharp tests: . +warnOnImplicitThis: true diff --git a/csharp/ql/consistency-queries/AstConsistency.qll b/csharp/ql/consistency-queries/AstConsistency.qll index 5373b638db7..3871cdf99f2 100644 --- a/csharp/ql/consistency-queries/AstConsistency.qll +++ b/csharp/ql/consistency-queries/AstConsistency.qll @@ -17,3 +17,8 @@ query predicate missingLocation(Element e) { not exists(TupleType t | e = t or e = t.getAField()) and not exists(e.getLocation()) } + +query predicate multipleToString(Element e, string s) { + s = strictconcat(e.toString(), ",") and + strictcount(e.toString()) > 1 +} diff --git a/csharp/ql/consistency-queries/CfgConsistency.ql b/csharp/ql/consistency-queries/CfgConsistency.ql index fe45e5a96d8..c50d7aaa101 100644 --- a/csharp/ql/consistency-queries/CfgConsistency.ql +++ b/csharp/ql/consistency-queries/CfgConsistency.ql @@ -62,3 +62,8 @@ query predicate preBasicBlockConsistency(ControlFlowElement cfe1, ControlFlowEle bbIntraSuccInconsistency(cfe1, cfe2) and s = "intra succ inconsistency" } + +query predicate multipleToString(Node n, string s) { + s = strictconcat(n.toString(), ",") and + strictcount(n.toString()) > 1 +} diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index d2c83cd82cc..8f099fe6daf 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -37,13 +37,13 @@ private class MyConsistencyConfiguration extends ConsistencyConfiguration { } override predicate postWithInFlowExclude(Node n) { - n instanceof SummaryNode + n instanceof FlowSummaryNode or n.asExpr().(ObjectCreation).hasInitializer() } override predicate argHasPostUpdateExclude(ArgumentNode n) { - n instanceof SummaryNode + n instanceof FlowSummaryNode or not exists(LocalFlow::getAPostUpdateNodeForArg(n.getControlFlowNode())) or @@ -74,3 +74,8 @@ private class MyConsistencyConfiguration extends ConsistencyConfiguration { override predicate identityLocalStepExclude(Node n) { none() } } + +query predicate multipleToString(Node n, string s) { + s = strictconcat(n.toString(), ",") and + strictcount(n.toString()) > 1 +} diff --git a/csharp/ql/consistency-queries/TypeConsistency.qll b/csharp/ql/consistency-queries/TypeConsistency.qll new file mode 100644 index 00000000000..37504a2df3f --- /dev/null +++ b/csharp/ql/consistency-queries/TypeConsistency.qll @@ -0,0 +1,13 @@ +import csharp +import semmle.code.csharp.Unification + +query predicate missingGvn(Type t, string cls) { + not exists(Gvn::getGlobalValueNumber(t)) and + cls = t.getPrimaryQlClasses() +} + +query predicate multipleGvn(Type t, Gvn::GvnType g, string cls) { + g = Gvn::getGlobalValueNumber(t) and + strictcount(Gvn::getGlobalValueNumber(t)) > 1 and + cls = t.getPrimaryQlClasses() +} diff --git a/csharp/ql/consistency-queries/qlpack.yml b/csharp/ql/consistency-queries/qlpack.yml index 0d36d5156f5..8afefd18259 100644 --- a/csharp/ql/consistency-queries/qlpack.yml +++ b/csharp/ql/consistency-queries/qlpack.yml @@ -3,3 +3,4 @@ groups: [csharp, test, consistency-queries] dependencies: codeql/csharp-all: ${workspace} extractor: csharp +warnOnImplicitThis: true diff --git a/csharp/ql/examples/qlpack.yml b/csharp/ql/examples/qlpack.yml index ca5ba5a3ab4..8796b678c16 100644 --- a/csharp/ql/examples/qlpack.yml +++ b/csharp/ql/examples/qlpack.yml @@ -4,3 +4,4 @@ groups: - examples dependencies: codeql/csharp-all: ${workspace} +warnOnImplicitThis: true diff --git a/csharp/ql/integration-tests/qlpack.yml b/csharp/ql/integration-tests/qlpack.yml index 972ad51f2cf..e66c1239b04 100644 --- a/csharp/ql/integration-tests/qlpack.yml +++ b/csharp/ql/integration-tests/qlpack.yml @@ -1,2 +1,3 @@ dependencies: codeql/csharp-all: '*' +warnOnImplicitThis: true diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 551d7ee2b8b..57ddb064fe6 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.7.0 + +### Major Analysis Improvements + +* The data flow library now performs type strengthening. This increases precision for all data flow queries by excluding paths that can be inferred to be impossible due to incompatible types. + +### Minor Analysis Improvements + +* Additional support for `command-injection`, `ldap-injection`, `log-injection`, and `url-redirection` sink kinds for Models as Data. + ## 0.6.4 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/0.7.0.md b/csharp/ql/lib/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..87b2fbe9b1b --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.7.0.md @@ -0,0 +1,9 @@ +## 0.7.0 + +### Major Analysis Improvements + +* The data flow library now performs type strengthening. This increases precision for all data flow queries by excluding paths that can be inferred to be impossible due to incompatible types. + +### Minor Analysis Improvements + +* Additional support for `command-injection`, `ldap-injection`, `log-injection`, and `url-redirection` sink kinds for Models as Data. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/csharp/ql/lib/ext/System.Collections.Generic.model.yml b/csharp/ql/lib/ext/System.Collections.Generic.model.yml index 3029690b03f..26ef7027b5e 100644 --- a/csharp/ql/lib/ext/System.Collections.Generic.model.yml +++ b/csharp/ql/lib/ext/System.Collections.Generic.model.yml @@ -40,7 +40,7 @@ extensions: - ["System.Collections.Generic", "LinkedList<>", False, "FindLast", "(T)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Generic", "LinkedList<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.LinkedList<>+Enumerator.Current]", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "AddRange", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - - ["System.Collections.Generic", "List<>", False, "AsReadOnly", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Generic", "List<>", False, "AsReadOnly", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "Find", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "Find", "(System.Predicate)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "FindAll", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] @@ -48,10 +48,8 @@ extensions: - ["System.Collections.Generic", "List<>", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.List<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Generic", "List<>", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Generic", "List<>", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Generic", "List<>", False, "InsertRange", "(System.Int32,System.Collections.Generic.IEnumerable)", "", "Argument[1].Element", "Argument[this].Element", "value", "manual"] - - ["System.Collections.Generic", "List<>", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections.Generic", "List<>", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Generic", "Queue<>", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Collections.Generic", "Queue<>", False, "CopyTo", "(T[],System.Int32)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] - ["System.Collections.Generic", "Queue<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.Queue<>+Enumerator.Current]", "value", "manual"] @@ -79,7 +77,7 @@ extensions: - ["System.Collections.Generic", "SortedList<,>+KeyList", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Collections.Generic", "SortedList<,>+ValueList", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Collections.Generic", "SortedSet<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.SortedSet<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Generic", "SortedSet<>", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Generic", "SortedSet<>", False, "Reverse", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Generic", "Stack<>", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Collections.Generic", "Stack<>", False, "CopyTo", "(T[],System.Int32)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] - ["System.Collections.Generic", "Stack<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.Stack<>+Enumerator.Current]", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Collections.Immutable.model.yml b/csharp/ql/lib/ext/System.Collections.Immutable.model.yml index b2bd1b6a774..1a71a78100e 100644 --- a/csharp/ql/lib/ext/System.Collections.Immutable.model.yml +++ b/csharp/ql/lib/ext/System.Collections.Immutable.model.yml @@ -20,7 +20,6 @@ extensions: - ["System.Collections.Immutable", "ImmutableArray<>+Builder", False, "AddRange<>", "(System.Collections.Immutable.ImmutableArray+Builder)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableArray<>+Builder", False, "AddRange<>", "(TDerived[])", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableArray<>+Builder", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current]", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableArray<>+Builder", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableDictionary<,>", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableDictionary<,>", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableDictionary<,>", False, "Add", "(TKey,TValue)", "", "Argument[0]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] @@ -49,11 +48,11 @@ extensions: - ["System.Collections.Immutable", "ImmutableList<>", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableList<>", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>", False, "Insert", "(System.Int32,T)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>", False, "InsertRange", "(System.Int32,System.Collections.Generic.IEnumerable)", "", "Argument[1].Element", "Argument[this].Element", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableList<>", False, "Reverse", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableList<>", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "AddRange", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "Find", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] @@ -63,10 +62,8 @@ extensions: - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "Argument[0].Parameter[0]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "FindLast", "(System.Predicate)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "InsertRange", "(System.Int32,System.Collections.Generic.IEnumerable)", "", "Argument[1].Element", "Argument[this].Element", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableList<>+Builder", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableQueue<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableQueue<>+Enumerator.Current]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedDictionary<,>", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedDictionary<,>", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair<,>.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "value", "manual"] @@ -85,8 +82,8 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedDictionary<,>+Builder", False, "get_Values", "()", "", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedSet<>", False, "Add", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedSet<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableSortedSet<>", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableSortedSet<>", False, "Reverse", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedSet<>", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections.Immutable", "ImmutableSortedSet<>+Builder", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current]", "value", "manual"] - - ["System.Collections.Immutable", "ImmutableSortedSet<>+Builder", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableSortedSet<>+Builder", False, "Reverse", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableStack<>", False, "GetEnumerator", "()", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.Immutable.ImmutableStack<>+Enumerator.Current]", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Collections.Specialized.model.yml b/csharp/ql/lib/ext/System.Collections.Specialized.model.yml index 8456af24f14..96b947f2423 100644 --- a/csharp/ql/lib/ext/System.Collections.Specialized.model.yml +++ b/csharp/ql/lib/ext/System.Collections.Specialized.model.yml @@ -9,7 +9,7 @@ extensions: - ["System.Collections.Specialized", "NameValueCollection", False, "Add", "(System.Collections.Specialized.NameValueCollection)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["System.Collections.Specialized", "NameValueCollection", True, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Collections.Specialized", "NameValueCollection", False, "CopyTo", "(System.Array,System.Int32)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] - - ["System.Collections.Specialized", "OrderedDictionary", False, "AsReadOnly", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Specialized", "OrderedDictionary", False, "AsReadOnly", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Specialized", "StringCollection", False, "Add", "(System.String)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["System.Collections.Specialized", "StringCollection", False, "AddRange", "(System.String[])", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Specialized", "StringCollection", False, "CopyTo", "(System.String[],System.Int32)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Collections.model.yml b/csharp/ql/lib/ext/System.Collections.model.yml index 9aa2c2489c9..ef098a6bfe5 100644 --- a/csharp/ql/lib/ext/System.Collections.model.yml +++ b/csharp/ql/lib/ext/System.Collections.model.yml @@ -4,17 +4,15 @@ extensions: extensible: summaryModel data: - ["System.Collections", "ArrayList", False, "AddRange", "(System.Collections.ICollection)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - - ["System.Collections", "ArrayList", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "ArrayList", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "ArrayList", False, "FixedSize", "(System.Collections.ArrayList)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "ArrayList", False, "FixedSize", "(System.Collections.IList)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "ArrayList", False, "GetEnumerator", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Property[System.Collections.IEnumerator.Current]", "value", "manual"] - - ["System.Collections", "ArrayList", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "ArrayList", False, "GetRange", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "ArrayList", False, "InsertRange", "(System.Int32,System.Collections.ICollection)", "", "Argument[1].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections", "ArrayList", False, "Repeat", "(System.Object,System.Int32)", "", "Argument[0]", "ReturnValue.Element", "value", "manual"] - - ["System.Collections", "ArrayList", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections", "ArrayList", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections", "BitArray", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Collections", "Hashtable", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "BitArray", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "Hashtable", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "Hashtable", False, "Hashtable", "(System.Collections.IDictionary)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] - ["System.Collections", "Hashtable", False, "Hashtable", "(System.Collections.IDictionary)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "value", "manual"] - ["System.Collections", "Hashtable", False, "Hashtable", "(System.Collections.IDictionary,System.Collections.IEqualityComparer)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] @@ -43,9 +41,9 @@ extensions: - ["System.Collections", "IList", True, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections", "IList", True, "set_Item", "(System.Int32,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] - ["System.Collections", "Queue", True, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - - ["System.Collections", "Queue", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "Queue", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "Queue", False, "Peek", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - - ["System.Collections", "SortedList", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "SortedList", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "SortedList", False, "GetByIndex", "(System.Int32)", "", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "ReturnValue", "value", "manual"] - ["System.Collections", "SortedList", False, "GetValueList", "()", "", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "SortedList", False, "SortedList", "(System.Collections.IDictionary)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] @@ -53,6 +51,6 @@ extensions: - ["System.Collections", "SortedList", False, "SortedList", "(System.Collections.IDictionary,System.Collections.IComparer)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key]", "value", "manual"] - ["System.Collections", "SortedList", False, "SortedList", "(System.Collections.IDictionary,System.Collections.IComparer)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value]", "value", "manual"] - ["System.Collections", "Stack", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - - ["System.Collections", "Stack", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections", "Stack", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections", "Stack", False, "Peek", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Collections", "Stack", False, "Pop", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Data.model.yml b/csharp/ql/lib/ext/System.Data.model.yml index 26f650c96a5..6331e67c067 100644 --- a/csharp/ql/lib/ext/System.Data.model.yml +++ b/csharp/ql/lib/ext/System.Data.model.yml @@ -58,7 +58,7 @@ extensions: - ["System.Data", "IDataParameterCollection", True, "set_Item", "(System.String,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] - ["System.Data", "ITableMappingCollection", True, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] - ["System.Data", "ITableMappingCollection", True, "set_Item", "(System.String,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] - - ["System.Data", "PropertyCollection", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Data", "PropertyCollection", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System.Data", "TypedTableBaseExtensions", False, "AsEnumerable<>", "(System.Data.TypedTableBase)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Data", "TypedTableBaseExtensions", False, "ElementAtOrDefault<>", "(System.Data.TypedTableBase,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Data", "TypedTableBaseExtensions", False, "OrderBy<,>", "(System.Data.TypedTableBase,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Runtime.CompilerServices.model.yml b/csharp/ql/lib/ext/System.Runtime.CompilerServices.model.yml index bd28d9168fd..1e664b73e4a 100644 --- a/csharp/ql/lib/ext/System.Runtime.CompilerServices.model.yml +++ b/csharp/ql/lib/ext/System.Runtime.CompilerServices.model.yml @@ -6,6 +6,4 @@ extensions: - ["System.Runtime.CompilerServices", "ConditionalWeakTable<,>", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] - ["System.Runtime.CompilerServices", "ConfiguredTaskAwaitable<>", False, "GetAwaiter", "()", "", "Argument[this].SyntheticField[m_configuredTaskAwaiter]", "ReturnValue", "value", "manual"] - ["System.Runtime.CompilerServices", "ConfiguredTaskAwaitable<>+ConfiguredTaskAwaiter", False, "GetResult", "()", "", "Argument[this].SyntheticField[m_task_configured_task_awaitable].Property[System.Threading.Tasks.Task<>.Result]", "ReturnValue", "value", "manual"] - - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder<>", False, "Reverse", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder<>", False, "Reverse", "(System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Runtime.CompilerServices", "TaskAwaiter<>", False, "GetResult", "()", "", "Argument[this].SyntheticField[m_task_task_awaiter].Property[System.Threading.Tasks.Task<>.Result]", "ReturnValue", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index b0f74507b87..9b4fc9615ab 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -13,7 +13,7 @@ extensions: - ["System", "Array", False, "AsReadOnly<>", "(T[])", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System", "Array", False, "Clear", "(System.Array)", "", "Argument[0].WithoutElement", "Argument[0]", "value", "manual"] - ["System", "Array", False, "Clear", "(System.Array,System.Int32,System.Int32)", "", "Argument[0].WithoutElement", "Argument[0]", "value", "manual"] - - ["System", "Array", False, "Clone", "()", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "Array", False, "Clone", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] - ["System", "Array", False, "CopyTo", "(System.Array,System.Int64)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] - ["System", "Array", False, "Find<>", "(T[],System.Predicate)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - ["System", "Array", False, "Find<>", "(T[],System.Predicate)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 6cc981f3901..46c97087657 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,11 +1,12 @@ name: codeql/csharp-all -version: 0.6.4 +version: 0.7.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp library: true upgrades: upgrades dependencies: + codeql/mad: ${workspace} codeql/ssa: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} diff --git a/csharp/ql/lib/semmle/code/csharp/AnnotatedType.qll b/csharp/ql/lib/semmle/code/csharp/AnnotatedType.qll index 57221e47aa9..83bffc9b2a8 100644 --- a/csharp/ql/lib/semmle/code/csharp/AnnotatedType.qll +++ b/csharp/ql/lib/semmle/code/csharp/AnnotatedType.qll @@ -401,6 +401,8 @@ class AnnotatedArrayType extends AnnotatedType { class AnnotatedConstructedType extends AnnotatedType { override ConstructedType type; + AnnotatedConstructedType() { not type instanceof NullableType } + /** Gets the `i`th type argument of this constructed type. */ AnnotatedType getTypeArgument(int i) { result.getType() = type.getTypeArgument(i) and diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index ee850f25ea3..51c1dbc19fd 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -26,7 +26,8 @@ private import TypeRef class Generic extends DotNet::Generic, Declaration, @generic { Generic() { type_parameters(_, _, this, _) or - type_arguments(_, _, this) + type_arguments(_, _, this) or + nullable_underlying_type(this, _) } } @@ -39,7 +40,7 @@ class Generic extends DotNet::Generic, Declaration, @generic { class UnboundGeneric extends DotNet::UnboundGeneric, Generic { UnboundGeneric() { type_parameters(_, _, this, _) } - override TypeParameter getTypeParameter(int n) { type_parameters(result, n, this, _) } + final override TypeParameter getTypeParameter(int n) { type_parameters(result, n, this, _) } override ConstructedGeneric getAConstructedGeneric() { result.getUnboundGeneric() = this } @@ -67,7 +68,11 @@ private string getTypeParameterCommas(UnboundGeneric ug) { * generic method (`ConstructedMethod`). */ class ConstructedGeneric extends DotNet::ConstructedGeneric, Generic { - ConstructedGeneric() { type_arguments(_, _, this) } + ConstructedGeneric() { + type_arguments(_, _, this) + or + nullable_underlying_type(this, _) + } override UnboundGeneric getUnboundGeneric() { constructed_generic(this, result) } @@ -75,8 +80,6 @@ class ConstructedGeneric extends DotNet::ConstructedGeneric, Generic { result = this.getUnboundGeneric().getUnboundDeclaration() } - override int getNumberOfTypeArguments() { result = count(int i | type_arguments(_, i, this)) } - override Type getTypeArgument(int i) { none() } override Type getATypeArgument() { result = this.getTypeArgument(_) } @@ -410,13 +413,13 @@ class ConstructedType extends ValueOrRefType, ConstructedGeneric { override Location getALocation() { result = this.getUnboundDeclaration().getALocation() } - override Type getTypeArgument(int n) { type_arguments(getTypeRef(result), n, getTypeRef(this)) } + override Type getTypeArgument(int n) { type_arguments(getTypeRef(result), n, this) } override UnboundGenericType getUnboundGeneric() { constructed_generic(this, getTypeRef(result)) } final override Type getChild(int n) { result = this.getTypeArgument(n) } - final override string toStringWithTypes() { + override string toStringWithTypes() { result = this.getUndecoratedName() + "<" + getTypeArgumentsToString(this) + ">" } @@ -424,7 +427,7 @@ class ConstructedType extends ValueOrRefType, ConstructedGeneric { result = this.getUndecoratedName() + "<" + getTypeArgumentsNames(this) + ">" } - final override predicate hasQualifiedName(string qualifier, string name) { + override predicate hasQualifiedName(string qualifier, string name) { exists(string name0 | name = name0 + "<" + getTypeArgumentsQualifiedNames(this) + ">" | exists(string enclosing | this.getDeclaringType().hasQualifiedName(qualifier, enclosing) and diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index 85fde20e07d..0b1e90fa7d6 100644 --- a/csharp/ql/lib/semmle/code/csharp/Type.qll +++ b/csharp/ql/lib/semmle/code/csharp/Type.qll @@ -974,29 +974,27 @@ class NullType extends RefType, @null_type { /** * A nullable type, for example `int?`. */ -class NullableType extends ValueType, DotNet::ConstructedGeneric, @nullable_type { +class NullableType extends ValueType, ConstructedType, @nullable_type { /** * Gets the underlying value type of this nullable type. * For example `int` in `int?`. */ Type getUnderlyingType() { nullable_underlying_type(this, getTypeRef(result)) } + override UnboundGenericStruct getUnboundGeneric() { + result.hasQualifiedName("System", "Nullable<>") + } + override string toStringWithTypes() { result = this.getUnderlyingType().toStringWithTypes() + "?" } - override Type getChild(int n) { result = this.getUnderlyingType() and n = 0 } - override Location getALocation() { result = this.getUnderlyingType().getALocation() } override Type getTypeArgument(int p) { p = 0 and result = this.getUnderlyingType() } override string getAPrimaryQlClass() { result = "NullableType" } - final override string getName() { - result = "Nullable<" + this.getUnderlyingType().getName() + ">" - } - final override predicate hasQualifiedName(string qualifier, string name) { qualifier = "System" and name = "Nullable<" + this.getUnderlyingType().getQualifiedName() + ">" @@ -1126,7 +1124,10 @@ class ArglistType extends Type, @arglist_type { * A type that could not be resolved. This could happen if an indirect reference * is not available at compilation time. */ -class UnknownType extends Type, @unknown_type { } +class UnknownType extends Type, @unknown_type { + /** Holds if this is the canonical unknown type, and not a type that failed to extract properly. */ + predicate isCanonical() { types(this, _, "") } +} /** * A type representing a tuple. For example, `(int, bool, string)`. diff --git a/csharp/ql/lib/semmle/code/csharp/TypeRef.qll b/csharp/ql/lib/semmle/code/csharp/TypeRef.qll index 7a6de44419f..f13168dd20d 100644 --- a/csharp/ql/lib/semmle/code/csharp/TypeRef.qll +++ b/csharp/ql/lib/semmle/code/csharp/TypeRef.qll @@ -16,7 +16,7 @@ private class TypeRef extends @typeref { typeref_type(this, result) or not typeref_type(this, _) and - result instanceof UnknownType + result.(UnknownType).isCanonical() } } diff --git a/csharp/ql/lib/semmle/code/csharp/Unification.qll b/csharp/ql/lib/semmle/code/csharp/Unification.qll index c3cbbd9ce97..7570070078f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Unification.qll +++ b/csharp/ql/lib/semmle/code/csharp/Unification.qll @@ -15,9 +15,11 @@ module Gvn { * but only if the enclosing type is not a `GenericType`. */ string getNameNested(Type t) { - if not t instanceof NestedType or t.(NestedType).getDeclaringType() instanceof GenericType - then result = t.getName() - else result = getNameNested(t.(NestedType).getDeclaringType()) + "+" + t.getName() + exists(string name | name = t.getName() | + if not t instanceof NestedType or t.(NestedType).getDeclaringType() instanceof GenericType + then result = name + else result = getNameNested(t.(NestedType).getDeclaringType()) + "+" + name + ) } /** @@ -47,8 +49,22 @@ module Gvn { not exists(this.getGenericDeclaringType()) and result = 0 } + /** + * Same as `getChild`, but safe-guards against potential extractor issues where + * multiple children exist at the same index, which may result in a combinatorial + * explosion. + */ + private Type getChildUnique(int i) { + result = unique(Type t | t = this.getChild(i) | t) + or + strictcount(this.getChild(i)) > 1 and + result.(UnknownType).isCanonical() + } + /** Gets the number of arguments of this type, not taking nested types into account. */ - int getNumberOfArgumentsSelf() { result = count(int i | exists(this.getChild(i)) and i >= 0) } + int getNumberOfArgumentsSelf() { + result = count(int i | exists(this.getChildUnique(i)) and i >= 0) + } /** Gets the number of arguments of this type, taking nested types into account. */ int getNumberOfArguments() { @@ -61,7 +77,7 @@ module Gvn { or exists(int offset | offset = this.getNumberOfDeclaringArguments() and - result = this.getChild(i - offset) and + result = this.getChildUnique(i - offset) and i >= offset ) } @@ -91,13 +107,9 @@ module Gvn { int getNumberOfTypeParameters() { this = TPointerTypeKind() and result = 1 or - this = TNullableTypeKind() and result = 1 - or this = TArrayTypeKind(_, _) and result = 1 or - exists(GenericType t | this = TConstructedType(t.getUnboundDeclaration()) | - result = t.getNumberOfArguments() - ) + exists(GenericType t | this = TConstructedType(t) | result = t.getNumberOfArguments()) } /** Gets the unbound declaration type that this kind corresponds to, if any. */ @@ -106,15 +118,12 @@ module Gvn { /** * Gets a textual representation of this kind when applied to arguments `args`. * - * This predicate is restricted to built-in generics (pointers, nullables, and - * arrays). + * This predicate is restricted to built-in generics (pointers and arrays). */ bindingset[args] string toStringBuiltin(string args) { this = TPointerTypeKind() and result = args + "*" or - this = TNullableTypeKind() and result = args + "?" - or exists(int rnk | this = TArrayTypeKind(_, rnk) | result = args + "[" + concat(int i | i in [0 .. rnk - 2] | ",") + "]" ) @@ -135,8 +144,6 @@ module Gvn { CompoundTypeKind getTypeKind(Type t) { result = TPointerTypeKind() and t instanceof PointerType or - result = TNullableTypeKind() and t instanceof NullableType - or t = any(ArrayType at | result = TArrayTypeKind(at.getDimension(), at.getRank())) or result = TConstructedType(t.getUnboundDeclaration()) @@ -280,6 +287,7 @@ module Gvn { pragma[noinline] private predicate toStringPart(int i, int j) { + this.isFullyConstructed() and exists(int offset | exists(GenericType t, int children | t = this.getConstructedGenericDeclaringTypeAt(i) and @@ -449,14 +457,12 @@ module Gvn { cached newtype TCompoundTypeKind = TPointerTypeKind() { Stages::UnificationStage::forceCachingInSameStage() } or - TNullableTypeKind() or TArrayTypeKind(int dim, int rnk) { exists(ArrayType at | dim = at.getDimension() and rnk = at.getRank()) } or TConstructedType(GenericType unboundDecl) { unboundDecl = any(GenericType t).getUnboundDeclaration() and not unboundDecl instanceof PointerType and - not unboundDecl instanceof NullableType and not unboundDecl instanceof ArrayType and not unboundDecl instanceof TupleType } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll index 46a19828a81..755b8023040 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ExternalFlow.qll @@ -62,8 +62,8 @@ * in the given range. The range is inclusive at both ends. * - "ReturnValue": Selects the return value of a call to the selected element. * - * For summaries, `input` and `output` may be prefixed by one of the following, - * separated by the "of" keyword: + * For summaries, `input` and `output` may be suffixed by any number of the + * following, separated by ".": * - "Element": Selects an element in a collection. * - "Field[f]": Selects the contents of field `f`. * - "Property[p]": Selects the contents of property `p`. @@ -95,6 +95,7 @@ private import internal.DataFlowPublic private import internal.FlowSummaryImpl::Public private import internal.FlowSummaryImpl::Private::External private import internal.FlowSummaryImplSpecific +private import codeql.mad.ModelValidation as SharedModelVal /** Holds if a source model exists for the given parameters. */ predicate sourceModel = Extensions::sourceModel/9; @@ -204,30 +205,18 @@ module ModelValidation { ) } - private string getInvalidModelKind() { - exists(string kind | summaryModel(_, _, _, _, _, _, _, _, kind, _) | - not kind = ["taint", "value"] and - result = "Invalid kind \"" + kind + "\" in summary model." - ) - or - exists(string kind | sinkModel(_, _, _, _, _, _, _, kind, _) | - not kind = - ["code-injection", "sql-injection", "js-injection", "html-injection", "file-content-store"] and - not kind.matches("encryption-%") and - result = "Invalid kind \"" + kind + "\" in sink model." - ) - or - exists(string kind | sourceModel(_, _, _, _, _, _, _, kind, _) | - not kind = ["local", "remote", "file", "file-write"] and - result = "Invalid kind \"" + kind + "\" in source model." - ) - or - exists(string kind | neutralModel(_, _, _, _, kind, _) | - not kind = ["summary", "source", "sink"] and - result = "Invalid kind \"" + kind + "\" in neutral model." - ) + private module KindValConfig implements SharedModelVal::KindValidationConfigSig { + predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _) } + + predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _) } + + predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _) } + + predicate neutralKind(string kind) { neutralModel(_, _, _, _, kind, _) } } + private module KindVal = SharedModelVal::KindValidation; + private string getInvalidModelSignature() { exists( string pred, string namespace, string type, string name, string signature, string ext, @@ -269,7 +258,7 @@ module ModelValidation { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - getInvalidModelKind() + KindVal::getInvalidModelKind() ] } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll index 5d90a990979..a96ac4cedc9 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/FlowSummary.qll @@ -64,14 +64,9 @@ module SummaryComponent { /** Gets a summary component that represents the return value of a call. */ SummaryComponent return() { result = return(any(DataFlowDispatch::NormalReturnKind rk)) } - /** Gets a summary component that represents a jump to `c`. */ - SummaryComponent jump(Callable c) { - result = - return(any(DataFlowDispatch::JumpReturnKind jrk | - jrk.getTarget() = c.getUnboundDeclaration() and - jrk.getTargetReturnKind() instanceof DataFlowDispatch::NormalReturnKind - )) - } + predicate syntheticGlobal = SummaryComponentInternal::syntheticGlobal/1; + + class SyntheticGlobal = SummaryComponentInternal::SyntheticGlobal; } class SummaryComponentStack = Impl::Public::SummaryComponentStack; @@ -110,8 +105,17 @@ module SummaryComponentStack { /** Gets a singleton stack representing the return value of a call. */ SummaryComponentStack return() { result = singleton(SummaryComponent::return()) } - /** Gets a singleton stack representing a jump to `c`. */ - SummaryComponentStack jump(Callable c) { result = singleton(SummaryComponent::jump(c)) } + /** Gets a singleton stack representing a synthetic global with name `name`. */ + SummaryComponentStack syntheticGlobal(string synthetic) { + result = singleton(SummaryComponent::syntheticGlobal(synthetic)) + } + + /** + * DEPRECATED: Use the member predicate `getMadRepresentation` instead. + * + * Gets a textual representation of this stack used for flow summaries. + */ + deprecated string getComponentStack(SummaryComponentStack s) { result = s.getMadRepresentation() } } class SummarizedCallable = Impl::Public::SummarizedCallable; diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index c3a54ba8ff3..cb26a1c2075 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -74,18 +74,6 @@ newtype TReturnKind = exists(Ssa::ExplicitDefinition def | def.isCapturedVariableDefinitionFlowOut(_, _) | v = def.getSourceVariable().getAssignable() ) - } or - TJumpReturnKind(Callable target, ReturnKind rk) { - target.isUnboundDeclaration() and - ( - rk instanceof NormalReturnKind and - ( - target instanceof Constructor or - not target.getReturnType() instanceof VoidType - ) - or - exists(target.getParameter(rk.(OutRefReturnKind).getPosition())) - ) } /** @@ -128,7 +116,9 @@ private module Cached { // No need to include calls that are compiled from source not call.getImplementation().getMethod().compiledFromSource() } or - TSummaryCall(FlowSummaryImpl::Public::SummarizedCallable c, Node receiver) { + TSummaryCall( + FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver + ) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } @@ -255,27 +245,6 @@ class ImplicitCapturedReturnKind extends ReturnKind, TImplicitCapturedReturnKind override string toString() { result = "captured " + v } } -/** - * A value returned through the output of another callable. - * - * This is currently only used to model flow summaries where data may flow into - * one API entry point and out of another. - */ -class JumpReturnKind extends ReturnKind, TJumpReturnKind { - private Callable target; - private ReturnKind rk; - - JumpReturnKind() { this = TJumpReturnKind(target, rk) } - - /** Gets the target of the jump. */ - Callable getTarget() { result = target } - - /** Gets the return kind of the target. */ - ReturnKind getTargetReturnKind() { result = rk } - - override string toString() { result = "jump to " + target } -} - /** A callable used for data flow. */ class DataFlowCallable extends TDataFlowCallable { /** Get the underlying source code callable, if any. */ @@ -472,12 +441,12 @@ class CilDataFlowCall extends DataFlowCall, TCilCall { */ class SummaryCall extends DelegateDataFlowCall, TSummaryCall { private FlowSummaryImpl::Public::SummarizedCallable c; - private Node receiver; + private FlowSummaryImpl::Private::SummaryNode receiver; SummaryCall() { this = TSummaryCall(c, receiver) } /** Gets the data flow node that this call targets. */ - Node getReceiver() { result = receiver } + FlowSummaryImpl::Private::SummaryNode getReceiver() { result = receiver } override DataFlowCallable getARuntimeTarget() { none() // handled by the shared library diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index ddf98ac0f2f..410543e0fc9 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -460,7 +460,6 @@ module Impl { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index d683e03dc2d..872718d93d5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -500,7 +500,7 @@ module LocalFlow { * inter-procedurality or field-sensitivity. */ predicate excludeFromExposedRelations(Node n) { - n instanceof SummaryNode or + n instanceof FlowSummaryNode or n instanceof ImplicitCapturedArgumentNode } @@ -559,7 +559,8 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { or LocalFlow::localFlowCapturedVarStep(nodeFrom, nodeTo) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, true) + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo.(FlowSummaryNode).getSummaryNode(), true) or nodeTo.(ObjectCreationNode).getPreUpdateNode() = nodeFrom.(ObjectInitializerNode) } @@ -805,7 +806,8 @@ private module Cached { // Add artificial dependencies to enforce all cached predicates are evaluated // in the "DataFlowImplCommon stage" - private predicate forceCaching() { + cached + predicate forceCaching() { TaintTrackingPrivate::forceCachingInSameStage() or exists(any(NodeImpl n).getTypeImpl()) or exists(any(NodeImpl n).getControlFlowNodeImpl()) or @@ -815,10 +817,7 @@ private module Cached { cached newtype TNode = - TExprNode(ControlFlow::Nodes::ElementNode cfn) { - forceCaching() and - cfn.getElement() instanceof Expr - } or + TExprNode(ControlFlow::Nodes::ElementNode cfn) { cfn.getElement() instanceof Expr } or TCilExprNode(CIL::Expr e) { e.getImplementation() instanceof CIL::BestImplementation } or TCilSsaDefinitionExtNode(CilSsaImpl::DefinitionExt def) or TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) { @@ -867,12 +866,7 @@ private module Cached { ) ) } or - TSummaryNode(DataFlowSummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { - FlowSummaryImpl::Private::summaryNodeRange(c, state) - } or - TSummaryParameterNode(DataFlowSummarizedCallable c, ParameterPosition pos) { - FlowSummaryImpl::Private::summaryParameterNodeRange(c, pos) - } or + TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or TParamsArgumentNode(ControlFlow::Node callCfn) { callCfn = any(Call c | isParamsArg(c, _, _)).getAControlFlowNode() } @@ -977,9 +971,7 @@ predicate nodeIsHidden(Node n) { or n instanceof MallocNode or - n instanceof SummaryNode - or - n instanceof SummaryParameterNode + n instanceof FlowSummaryNode or n instanceof ParamsArgumentNode or @@ -1132,29 +1124,16 @@ private module ParameterNodes { } /** A parameter for a library callable with a flow summary. */ - class SummaryParameterNode extends ParameterNodeImpl, TSummaryParameterNode { - private FlowSummaryImpl::Public::SummarizedCallable sc; + class SummaryParameterNode extends ParameterNodeImpl, FlowSummaryNode { private ParameterPosition pos_; - SummaryParameterNode() { this = TSummaryParameterNode(sc, pos_) } + SummaryParameterNode() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), pos_) + } override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - sc = c.asSummarizedCallable() and pos = pos_ + this.getSummarizedCallable() = c.asSummarizedCallable() and pos = pos_ } - - override DataFlowCallable getEnclosingCallableImpl() { result.asSummarizedCallable() = sc } - - override Type getTypeImpl() { - exists(int i | pos_.getPosition() = i and result = sc.getParameter(i).getType()) - or - pos_.isThisParameter() and result = sc.getDeclaringType() - } - - override ControlFlow::Node getControlFlowNodeImpl() { none() } - - override EmptyLocation getLocationImpl() { any() } - - override string toStringImpl() { result = "parameter " + pos_ + " of " + sc } } } @@ -1323,11 +1302,16 @@ private module ArgumentNodes { override string toStringImpl() { result = "[implicit array creation] " + callCfn } } - private class SummaryArgumentNode extends SummaryNode, ArgumentNodeImpl { - SummaryArgumentNode() { FlowSummaryImpl::Private::summaryArgumentNode(_, this, _) } + private class SummaryArgumentNode extends FlowSummaryNode, ArgumentNodeImpl { + private DataFlowCall call_; + private ArgumentPosition pos_; + + SummaryArgumentNode() { + FlowSummaryImpl::Private::summaryArgumentNode(call_, this.getSummaryNode(), pos_) + } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { - FlowSummaryImpl::Private::summaryArgumentNode(call, this, pos) + call = call_ and pos = pos_ } } } @@ -1469,12 +1453,11 @@ private module ReturnNodes { } } - private class SummaryReturnNode extends SummaryNode, ReturnNode { + private class SummaryReturnNode extends FlowSummaryNode, ReturnNode { private ReturnKind rk; SummaryReturnNode() { - FlowSummaryImpl::Private::summaryReturnNode(this, rk) and - not rk instanceof JumpReturnKind + FlowSummaryImpl::Private::summaryReturnNode(this.getSummaryNode(), rk) or exists(Parameter p, int pos | summaryPostUpdateNodeIsOutOrRef(this, p) and @@ -1494,9 +1477,9 @@ private module ReturnNodes { * Holds if summary node `n` is a post-update node for `out`/`ref` parameter `p`. * In this case we adjust it to instead be a return node. */ -private predicate summaryPostUpdateNodeIsOutOrRef(SummaryNode n, Parameter p) { - exists(ParameterNodeImpl pn, DataFlowCallable c, ParameterPosition pos | - FlowSummaryImpl::Private::summaryPostUpdateNode(n, pn) and +private predicate summaryPostUpdateNodeIsOutOrRef(FlowSummaryNode n, Parameter p) { + exists(SummaryParameterNode pn, DataFlowCallable c, ParameterPosition pos | + FlowSummaryImpl::Private::summaryPostUpdateNode(n.getSummaryNode(), pn.getSummaryNode()) and pn.isParameterOf(c, pos) and p = c.asSummarizedCallable().getParameter(pos.getPosition()) and p.isOutOrRef() @@ -1609,37 +1592,43 @@ private module OutNodes { } } - private class SummaryOutNode extends SummaryNode, OutNode { - SummaryOutNode() { FlowSummaryImpl::Private::summaryOutNode(_, this, _) } + private class SummaryOutNode extends FlowSummaryNode, OutNode { + private DataFlowCall call; + private ReturnKind kind_; - override DataFlowCall getCall(ReturnKind kind) { - FlowSummaryImpl::Private::summaryOutNode(result, this, kind) + SummaryOutNode() { + FlowSummaryImpl::Private::summaryOutNode(call, this.getSummaryNode(), kind_) } + + override DataFlowCall getCall(ReturnKind kind) { result = call and kind = kind_ } } } import OutNodes /** A data-flow node used to model flow summaries. */ -class SummaryNode extends NodeImpl, TSummaryNode { - private FlowSummaryImpl::Public::SummarizedCallable c; - private FlowSummaryImpl::Private::SummaryNodeState state; +class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { + FlowSummaryImpl::Private::SummaryNode getSummaryNode() { this = TFlowSummaryNode(result) } - SummaryNode() { this = TSummaryNode(c, state) } + FlowSummaryImpl::Public::SummarizedCallable getSummarizedCallable() { + result = this.getSummaryNode().getSummarizedCallable() + } - override DataFlowCallable getEnclosingCallableImpl() { result.asSummarizedCallable() = c } + override DataFlowCallable getEnclosingCallableImpl() { + result.asSummarizedCallable() = this.getSummarizedCallable() + } override DataFlowType getDataFlowType() { - result = FlowSummaryImpl::Private::summaryNodeType(this) + result = FlowSummaryImpl::Private::summaryNodeType(this.getSummaryNode()) } override DotNet::Type getTypeImpl() { none() } override ControlFlow::Node getControlFlowNodeImpl() { none() } - override Location getLocationImpl() { result = c.getLocation() } + override Location getLocationImpl() { result = this.getSummarizedCallable().getLocation() } - override string toStringImpl() { result = "[summary] " + state + " in " + c } + override string toStringImpl() { result = this.getSummaryNode().toString() } } /** A field or a property. */ @@ -1718,13 +1707,8 @@ predicate jumpStep(Node pred, Node succ) { flr.hasNonlocalValue() ) or - exists(JumpReturnKind jrk, NonDelegateDataFlowCall call | - FlowSummaryImpl::Private::summaryReturnNode(pred, jrk) and - jrk.getTarget() = call.getATarget(_) and - succ = getAnOutNode(call, jrk.getTargetReturnKind()) - ) - or - FlowSummaryImpl::Private::Steps::summaryJumpStep(pred, succ) + FlowSummaryImpl::Private::Steps::summaryJumpStep(pred.(FlowSummaryNode).getSummaryNode(), + succ.(FlowSummaryNode).getSummaryNode()) } private class StoreStepConfiguration extends ControlFlowReachabilityConfiguration { @@ -1784,7 +1768,8 @@ predicate storeStep(Node node1, Content c, Node node2) { c = getResultContent() ) or - FlowSummaryImpl::Private::Steps::summaryStoreStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) } private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration { @@ -1907,7 +1892,8 @@ predicate readStep(Node node1, Content c, Node node2) { ) ) or - FlowSummaryImpl::Private::Steps::summaryReadStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) } /** @@ -1920,7 +1906,7 @@ predicate clearsContent(Node n, Content c) { or fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false) or - FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) or exists(WithExpr we, ObjectInitializer oi, FieldOrProperty f | oi = we.getInitializer() and @@ -1935,7 +1921,7 @@ predicate clearsContent(Node n, Content c) { * at node `n`. */ predicate expectsContent(Node n, ContentSet c) { - FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) } /** @@ -1984,6 +1970,21 @@ private class DataFlowUnknownType extends DataFlowType { DataFlowUnknownType() { this = Gvn::getGlobalValueNumber(any(UnknownType ut)) } } +private predicate uselessTypebound(DataFlowType t) { + t instanceof DataFlowUnknownType or + t instanceof Gvn::TypeParameterGvnType +} + +pragma[nomagic] +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { + t1 != t2 and + t1 = getANonTypeParameterSubTypeRestricted(t2) + or + t1 instanceof RelevantDataFlowType and + not uselessTypebound(t1) and + uselessTypebound(t2) +} + /** * Holds if `t1` and `t2` are compatible, that is, whether data can flow from * a node of type `t1` to a node of type `t2`. @@ -2115,15 +2116,15 @@ private module PostUpdateNodes { override string toStringImpl() { result = "[post] " + cfn.toString() } } - private class SummaryPostUpdateNode extends SummaryNode, PostUpdateNode { + private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { + private FlowSummaryImpl::Private::SummaryNode preUpdateNode; + SummaryPostUpdateNode() { - FlowSummaryImpl::Private::summaryPostUpdateNode(this, _) and + FlowSummaryImpl::Private::summaryPostUpdateNode(this.getSummaryNode(), preUpdateNode) and not summaryPostUpdateNodeIsOutOrRef(this, _) } - override Node getPreUpdateNode() { - FlowSummaryImpl::Private::summaryPostUpdateNode(this, result) - } + override Node getPreUpdateNode() { result.(FlowSummaryNode).getSummaryNode() = preUpdateNode } } } @@ -2139,6 +2140,12 @@ class CastNode extends Node { } } +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { none() } + class DataFlowExpr = DotNet::Expr; /** Holds if `e` is an expression that always has the same Boolean value `val`. */ @@ -2218,7 +2225,7 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { call.getControlFlowNode()) ) or - receiver = call.(SummaryCall).getReceiver() + receiver.(FlowSummaryNode).getSummaryNode() = call.(SummaryCall).getReceiver() ) and exists(kind) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index e6379f6a170..7977e18120f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -23,29 +23,30 @@ module Public { * content type, or a return kind. */ class SummaryComponent extends TSummaryComponent { - /** Gets a textual representation of this summary component. */ - string toString() { - exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) - or - exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) - or - exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + /** Gets a textual representation of this component used for MaD models. */ + string getMadRepresentation() { + result = getMadRepresentationSpecific(this) or exists(ArgumentPosition pos | - this = TParameterSummaryComponent(pos) and result = "parameter " + pos + this = TParameterSummaryComponent(pos) and + result = "Parameter[" + getArgumentPosition(pos) + "]" ) or exists(ParameterPosition pos | - this = TArgumentSummaryComponent(pos) and result = "argument " + pos + this = TArgumentSummaryComponent(pos) and + result = "Argument[" + getParameterPosition(pos) + "]" ) or - exists(ReturnKind rk | this = TReturnSummaryComponent(rk) and result = "return (" + rk + ")") - or - exists(SummaryComponent::SyntheticGlobal sg | - this = TSyntheticGlobalSummaryComponent(sg) and - result = "synthetic global (" + sg + ")" + exists(string synthetic | + this = TSyntheticGlobalSummaryComponent(synthetic) and + result = "SyntheticGlobal[" + synthetic + "]" ) + or + this = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" } + + /** Gets a textual representation of this summary component. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing summary components. */ @@ -110,7 +111,6 @@ module Public { } /** Gets the stack obtained by dropping the first `i` elements, if any. */ - pragma[assume_small_delta] SummaryComponentStack drop(int i) { i = 0 and result = this or @@ -125,19 +125,22 @@ module Public { this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() } - /** Gets a textual representation of this stack. */ - string toString() { + /** Gets a textual representation of this stack used for MaD models. */ + string getMadRepresentation() { exists(SummaryComponent head, SummaryComponentStack tail | head = this.head() and tail = this.tail() and - result = tail + "." + head + result = tail.getMadRepresentation() + "." + head.getMadRepresentation() ) or exists(SummaryComponent c | this = TSingletonSummaryComponentStack(c) and - result = c.toString() + result = c.getMadRepresentation() ) } + + /** Gets a textual representation of this stack. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing stacks of summary components. */ @@ -166,37 +169,6 @@ module Public { SummaryComponentStack return(ReturnKind rk) { result = singleton(SummaryComponent::return(rk)) } } - /** Gets a textual representation of this component used for flow summaries. */ - private string getComponent(SummaryComponent sc) { - result = getComponentSpecific(sc) - or - exists(ArgumentPosition pos | - sc = TParameterSummaryComponent(pos) and - result = "Parameter[" + getArgumentPosition(pos) + "]" - ) - or - exists(ParameterPosition pos | - sc = TArgumentSummaryComponent(pos) and - result = "Argument[" + getParameterPosition(pos) + "]" - ) - or - sc = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" - } - - /** Gets a textual representation of this stack used for flow summaries. */ - string getComponentStack(SummaryComponentStack stack) { - exists(SummaryComponent head, SummaryComponentStack tail | - head = stack.head() and - tail = stack.tail() and - result = getComponentStack(tail) + "." + getComponent(head) - ) - or - exists(SummaryComponent c | - stack = TSingletonSummaryComponentStack(c) and - result = getComponent(c) - ) - } - /** * A class that exists for QL technical reasons only (the IPA type used * to represent component stacks needs to be bounded). @@ -505,6 +477,9 @@ module Private { or // Add the post-update node corresponding to the requested argument node outputState(c, s) and isCallbackParameter(s) + or + // Add the parameter node for parameter side-effects + outputState(c, s) and s = SummaryComponentStack::argument(_) } private newtype TSummaryNodeState = @@ -530,7 +505,7 @@ module Private { * this state represents that the components in `s` _remain to be written_ to * the output. */ - class SummaryNodeState extends TSummaryNodeState { + private class SummaryNodeState extends TSummaryNodeState { /** Holds if this state is a valid input state for `c`. */ pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { @@ -559,6 +534,42 @@ module Private { } } + private newtype TSummaryNode = + TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { + summaryNodeRange(c, state) + } or + TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { + summaryParameterNodeRange(c, pos) + } + + abstract class SummaryNode extends TSummaryNode { + abstract string toString(); + + abstract SummarizedCallable getSummarizedCallable(); + } + + private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { + private SummarizedCallable c; + private SummaryNodeState state; + + SummaryInternalNode() { this = TSummaryInternalNode(c, state) } + + override string toString() { result = "[summary] " + state + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + + private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { + private SummarizedCallable c; + private ParameterPosition pos; + + SummaryParamNode() { this = TSummaryParameterNode(c, pos) } + + override string toString() { result = "[summary param] " + pos + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + /** * Holds if `state` represents having read from a parameter at position * `pos` in `c`. In this case we are not synthesizing a data-flow node, @@ -574,7 +585,7 @@ module Private { * Holds if a synthesized summary node is needed for the state `state` in summarized * callable `c`. */ - predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { state.isInputState(c, _) and not parameterReadState(c, state, _) or @@ -582,22 +593,22 @@ module Private { } pragma[noinline] - private Node summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isInputState(c, s) | - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) or exists(ParameterPosition pos | parameterReadState(c, state, pos) and - result.(ParamNode).isParameterOf(inject(c), pos) + result = TSummaryParameterNode(c, pos) ) ) } pragma[noinline] - private Node summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isOutputState(c, s) and - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) ) } @@ -605,12 +616,14 @@ module Private { * Holds if a write targets `post`, which is a post-update node for a * parameter at position `pos` in `c`. */ - private predicate isParameterPostUpdate(Node post, SummarizedCallable c, ParameterPosition pos) { + private predicate isParameterPostUpdate( + SummaryNode post, SummarizedCallable c, ParameterPosition pos + ) { post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) } /** Holds if a parameter node at position `pos` is required for `c`. */ - predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { parameterReadState(c, _, pos) or // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context @@ -618,7 +631,7 @@ module Private { } private predicate callbackOutput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ReturnKind rk + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and @@ -626,7 +639,7 @@ module Private { } private predicate callbackInput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ArgumentPosition pos + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and @@ -634,7 +647,7 @@ module Private { } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ - predicate summaryCallbackRange(SummarizedCallable c, Node receiver) { + predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { callbackOutput(c, _, receiver, _) or callbackInput(c, _, receiver, _) @@ -647,10 +660,10 @@ module Private { * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and * `getCallbackReturnType()`. */ - DataFlowType summaryNodeType(Node n) { - exists(Node pre | + DataFlowType summaryNodeType(SummaryNode n) { + exists(SummaryNode pre | summaryPostUpdateNode(n, pre) and - result = getNodeType(pre) + result = summaryNodeType(pre) ) or exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | @@ -662,12 +675,12 @@ module Private { ) or head = TWithoutContentSummaryComponent(_) and - result = getNodeType(summaryNodeInputState(c, s.tail())) + result = summaryNodeType(summaryNodeInputState(c, s.tail())) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = - getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), rk) ) or @@ -675,6 +688,11 @@ module Private { head = TSyntheticGlobalSummaryComponent(sg) and result = getSyntheticGlobalType(sg) ) + or + exists(ParameterPosition pos | + head = TArgumentSummaryComponent(pos) and + result = getParameterType(c, pos) + ) ) or n = summaryNodeOutputState(c, s) and @@ -691,7 +709,7 @@ module Private { or exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = - getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), pos) ) or @@ -703,9 +721,14 @@ module Private { ) } + /** Holds if summary node `p` is a parameter with position `pos`. */ + predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { + p = TSummaryParameterNode(_, pos) + } + /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ - predicate summaryOutNode(DataFlowCall c, Node out, ReturnKind rk) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryOutNode(DataFlowCall c, SummaryNode out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackOutput(callable, s, receiver, rk) and out = summaryNodeInputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -713,8 +736,8 @@ module Private { } /** Holds if summary node `arg` is at position `pos` in the call `c`. */ - predicate summaryArgumentNode(DataFlowCall c, Node arg, ArgumentPosition pos) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryArgumentNode(DataFlowCall c, SummaryNode arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackInput(callable, s, receiver, pos) and arg = summaryNodeOutputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -722,10 +745,10 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, Node pre) { + predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and - pre.(ParamNode).isParameterOf(inject(c), pos) + pre = TSummaryParameterNode(c, pos) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -736,7 +759,7 @@ module Private { } /** Holds if summary node `ret` is a return node of kind `rk`. */ - predicate summaryReturnNode(Node ret, ReturnKind rk) { + predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { exists(SummaryComponentStack s | ret = summaryNodeOutputState(_, s) and s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) @@ -748,7 +771,9 @@ module Private { * node, and back out to `p`. */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { - exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(inject(c), ppos) | + exists(SummarizedCallable c, ParameterPosition ppos | + p.isParameterOf(inject(c), pragma[only_bind_into](ppos)) + | exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -763,7 +788,7 @@ module Private { * Holds if there is a local step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryLocalStep(Node pred, Node succ, boolean preservesValue) { + predicate summaryLocalStep(SummaryNode pred, SummaryNode succ, boolean preservesValue) { exists( SummarizedCallable c, SummaryComponentStack inputContents, SummaryComponentStack outputContents @@ -789,7 +814,7 @@ module Private { * Holds if there is a read step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryReadStep(Node pred, ContentSet c, Node succ) { + predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and @@ -801,7 +826,7 @@ module Private { * Holds if there is a store step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { + predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and succ = summaryNodeOutputState(sc, s.tail()) and @@ -813,7 +838,7 @@ module Private { * Holds if there is a jump step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryJumpStep(Node pred, Node succ) { + predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { exists(SummaryComponentStack s | s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and pred = summaryNodeOutputState(_, s) and @@ -840,9 +865,9 @@ module Private { * `a` on line 2 to the post-update node for `a` on that line (via an intermediate * node where field `b` is cleared). */ - predicate summaryClearsContent(Node n, ContentSet c) { + predicate summaryClearsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withoutContent(c) ) @@ -852,9 +877,9 @@ module Private { * Holds if the value that is being tracked is expected to be stored inside * content `c` at `n`. */ - predicate summaryExpectsContent(Node n, ContentSet c) { + predicate summaryExpectsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withContent(c) ) @@ -862,17 +887,17 @@ module Private { pragma[noinline] private predicate viableParam( - DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p ) { exists(DataFlowCallable c | c = inject(sc) and - p.isParameterOf(c, ppos) and + p = TSummaryParameterNode(sc, ppos) and c = viableCallable(call) ) } pragma[nomagic] - private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { + private SummaryParamNode summaryArgParam(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { exists(ParameterPosition ppos | argumentPositionMatch(call, arg, ppos) and viableParam(call, sc, ppos, result) @@ -884,12 +909,12 @@ module Private { * local steps. `clearsOrExpects` records whether any node on the path from `p` to * `n` either clears or expects contents. */ - private predicate paramReachesLocal(ParamNode p, Node n, boolean clearsOrExpects) { + private predicate paramReachesLocal(SummaryParamNode p, SummaryNode n, boolean clearsOrExpects) { viableParam(_, _, _, p) and n = p and clearsOrExpects = false or - exists(Node mid, boolean clearsOrExpectsMid | + exists(SummaryNode mid, boolean clearsOrExpectsMid | paramReachesLocal(p, mid, clearsOrExpectsMid) and summaryLocalStep(mid, n, true) and if @@ -909,21 +934,33 @@ module Private { */ pragma[nomagic] predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { - exists(ParamNode p, ParameterPosition ppos, Node ret | + exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | paramReachesLocal(p, ret, true) and - p = summaryArgParam0(_, arg, sc) and - p.isParameterOf(_, pragma[only_bind_into](ppos)) and + p = summaryArgParam(_, arg, sc) and + p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) ) } + pragma[nomagic] + private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { + summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) + or + exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | + paramReachesLocal(p, pre, _) and + summaryPostUpdateNode(ret, pre) and + p = TSummaryParameterNode(_, pos) and + rk.(ParamUpdateReturnKind).getPosition() = pos + ) + } + bindingset[ret] - private ParamNode summaryArgParam( - ArgNode arg, ReturnNodeExt ret, OutNodeExt out, SummarizedCallable sc + private SummaryParamNode summaryArgParamRetOut( + ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc ) { exists(DataFlowCall call, ReturnKindExt rk | - result = summaryArgParam0(call, arg, sc) and - ret.getKind() = pragma[only_bind_into](rk) and + result = summaryArgParam(call, arg, sc) and + summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and out = pragma[only_bind_into](rk).getAnOutNode(call) ) } @@ -936,9 +973,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnKind rk, ReturnNode ret, DataFlowCall call | - summaryLocalStep(summaryArgParam0(call, arg, sc), ret, true) and - ret.getKind() = pragma[only_bind_into](rk) and + exists(ReturnKind rk, SummaryNode ret, DataFlowCall call | + summaryLocalStep(summaryArgParam(call, arg, sc), ret, true) and + summaryReturnNode(ret, pragma[only_bind_into](rk)) and out = getAnOutNode(call, pragma[only_bind_into](rk)) ) } @@ -951,7 +988,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnNodeExt ret | summaryLocalStep(summaryArgParam(arg, ret, out, sc), ret, false)) + exists(SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), ret, false) + ) } /** @@ -962,8 +1001,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryReadStep(summaryArgParam(arg, ret, out, sc), c, mid) and + exists(SummaryNode mid, SummaryNode ret | + summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and summaryLocalStep(mid, ret, _) ) } @@ -976,8 +1015,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, ret, out, sc), mid, _) and + exists(SummaryNode mid, SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), mid, _) and summaryStoreStep(mid, c, ret) ) } @@ -1310,8 +1349,8 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() // Callable information - + getComponentStack(input) + ";" // input - + getComponentStack(output) + ";" // output + + input.getMadRepresentation() + ";" // input + + output.getMadRepresentation() + ";" // output + renderKind(preservesValue) + ";" // kind + renderProvenance(c) // provenance ) @@ -1344,11 +1383,11 @@ module Private { } private newtype TNodeOrCall = - MkNode(Node n) { + MkNode(SummaryNode n) { exists(RelevantSummarizedCallable c | - n = summaryNode(c, _) + n = TSummaryInternalNode(c, _) or - n.(ParamNode).isParameterOf(inject(c), _) + n = TSummaryParameterNode(c, _) ) } or MkCall(DataFlowCall call) { @@ -1357,7 +1396,7 @@ module Private { } private class NodeOrCall extends TNodeOrCall { - Node asNode() { this = MkNode(result) } + SummaryNode asNode() { this = MkNode(result) } DataFlowCall asCall() { this = MkCall(result) } @@ -1377,9 +1416,11 @@ module Private { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - or - this.asCall().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll index 97a27c65ef0..2145073b9f9 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImplSpecific.qll @@ -19,16 +19,20 @@ class SummarizedCallableBase extends Callable { SummarizedCallableBase() { this.isUnboundDeclaration() } } +/** + * A module for importing frameworks that define synthetic globals. + */ +private module SyntheticGlobals { + private import semmle.code.csharp.frameworks.EntityFramework +} + DataFlowCallable inject(SummarizedCallable c) { result.asSummarizedCallable() = c } /** Gets the parameter position of the instance parameter. */ ArgumentPosition callbackSelfParameterPosition() { none() } // disables implicit summary flow to `this` for callbacks -/** Gets the synthesized summary data-flow node for the given values. */ -Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = TSummaryNode(c, state) } - /** Gets the synthesized data-flow call for `receiver`. */ -SummaryCall summaryDataFlowCall(Node receiver) { receiver = result.getReceiver() } +SummaryCall summaryDataFlowCall(SummaryNode receiver) { receiver = result.getReceiver() } /** Gets the type of content `c`. */ DataFlowType getContentType(Content c) { @@ -44,7 +48,21 @@ DataFlowType getContentType(Content c) { ) } -private DataFlowType getReturnTypeBase(DotNet::Callable c, ReturnKind rk) { +/** Gets the type of the parameter at the given position. */ +DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos) { + exists(Type t | result = Gvn::getGlobalValueNumber(t) | + exists(int i | + pos.getPosition() = i and + t = c.getParameter(i).getType() + ) + or + pos.isThisParameter() and + t = c.getDeclaringType() + ) +} + +/** Gets the return type of kind `rk` for callable `c`. */ +DataFlowType getReturnType(DotNet::Callable c, ReturnKind rk) { exists(Type t | result = Gvn::getGlobalValueNumber(t) | rk instanceof NormalReturnKind and ( @@ -58,15 +76,6 @@ private DataFlowType getReturnTypeBase(DotNet::Callable c, ReturnKind rk) { ) } -/** Gets the return type of kind `rk` for callable `c`. */ -bindingset[c] -DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { - result = getReturnTypeBase(c, rk) - or - rk = - any(JumpReturnKind jrk | result = getReturnTypeBase(jrk.getTarget(), jrk.getTargetReturnKind())) -} - /** * Gets the type of the parameter matching arguments at position `pos` in a * synthesized call that targets a callback of type `t`. @@ -177,7 +186,7 @@ SummaryComponent interpretComponentSpecific(AccessPathToken c) { ) } -/** Gets the textual representation of the content in the format used for flow summaries. */ +/** Gets the textual representation of the content in the format used for MaD models. */ private string getContentSpecific(Content c) { c = TElementContent() and result = "Element" or @@ -188,8 +197,8 @@ private string getContentSpecific(Content c) { exists(SyntheticField f | c = TSyntheticFieldContent(f) and result = "SyntheticField[" + f + "]") } -/** Gets the textual representation of a summary component in the format used for flow summaries. */ -string getComponentSpecific(SummaryComponent sc) { +/** Gets the textual representation of a summary component in the format used for MaD models. */ +string getMadRepresentationSpecific(SummaryComponent sc) { exists(Content c | sc = TContentSummaryComponent(c) and result = getContentSpecific(c)) or sc = TWithoutContentSummaryComponent(_) and result = "WithoutElement" diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index 7a6ca4891a7..53b61ed5974 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -156,7 +156,8 @@ private module Cached { // tracking configurations where the source is a collection readStep(nodeFrom, TElementContent(), nodeTo) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, false) + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo.(FlowSummaryNode).getSummaryNode(), false) or nodeTo = nodeFrom.(DataFlow::NonLocalJumpNode).getAJumpSuccessor(false) } diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll index e0dfc0d542d..4987ab45448 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll @@ -4,6 +4,7 @@ import csharp private import DataFlow +private import semmle.code.csharp.commons.QualifiedName private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.data.Entity private import semmle.code.csharp.frameworks.system.collections.Generic @@ -236,7 +237,7 @@ module EntityFramework { * } * ``` */ - private Property getADbSetProperty(Class elementType) { + Property getADbSetProperty(Class elementType) { exists(ConstructedClass c | result.getType() = c and c.getUnboundDeclaration() instanceof DbSet and @@ -351,22 +352,104 @@ module EntityFramework { /** Holds if component stack `head :: tail` is required for the output specification. */ predicate requiresComponentStackOut( - Content head, Type headType, SummaryComponentStack tail, int dist + Content head, Type headType, SummaryComponentStack tail, int dist, + DbContextClassSetProperty dbSetProp ) { - exists(Property dbSetProp, PropertyContent c1 | + exists(PropertyContent c1 | dbSetProp = this.getADbSetProperty(headType) and this.stepRev(c1, _, head, headType, 0) and c1.getProperty() = dbSetProp and - tail = SummaryComponentStack::jump(dbSetProp.getGetter()) and + tail = SummaryComponentStack::return() and dist = 0 ) or exists(Content tailHead, SummaryComponentStack tailTail, Type tailType | - this.requiresComponentStackOut(tailHead, tailType, tailTail, dist - 1) and + this.requiresComponentStackOut(tailHead, tailType, tailTail, dist - 1, dbSetProp) and tail = SummaryComponentStack::push(SummaryComponent::content(tailHead), tailTail) and this.stepRev(tailHead, tailType, head, headType, dist) ) } + + /** + * Holds if `input` is a valid summary component stack for property `mapped` for this. + */ + pragma[noinline] + predicate input(SummaryComponentStack input, Property mapped) { + exists(PropertyContent head, SummaryComponentStack tail | + this.requiresComponentStackIn(head, _, tail, _) and + head.getProperty() = mapped and + mapped = this.getAColumnProperty(_) and + input = SummaryComponentStack::push(SummaryComponent::content(head), tail) + ) + } + + /** + * Holds if `output` is a valid summary component stack for the getter of `dbSet` + * for property `mapped` for this. + */ + pragma[noinline] + private predicate output( + SummaryComponentStack output, Property mapped, DbContextClassSetProperty dbSet + ) { + exists(PropertyContent head, SummaryComponentStack tail | + this.requiresComponentStackOut(head, _, tail, _, dbSet) and + head.getProperty() = mapped and + mapped = this.getAColumnProperty(_) and + output = SummaryComponentStack::push(SummaryComponent::content(head), tail) + ) + } + + /** + * Gets the synthetic name for the getter of `dbSet` for property `mapped` for this, + * where `output` is a valid summary component stack for the getter of `dbSet` + * for the property `mapped`. + */ + pragma[nomagic] + string getSyntheticName( + SummaryComponentStack output, Property mapped, DbContextClassSetProperty dbSet + ) { + this = dbSet.getDbContextClass() and + this.output(output, mapped, dbSet) and + result = dbSet.getFullName() + "#" + output.getMadRepresentation() + } + } + + private class DbContextClassSetProperty extends Property { + private DbContextClass c; + + DbContextClassSetProperty() { this = c.getADbSetProperty(_) } + + /** + * Gets the fully qualified name for this. + */ + string getFullName() { + exists(string qualifier, string type, string name | + this.hasQualifiedName(qualifier, type, name) + | + result = getQualifiedName(qualifier, type, name) + ) + } + + /** + * Gets the context class where this is a DbSet property. + */ + DbContextClass getDbContextClass() { result = c } + } + + private class DbContextClassSetPropertySynthetic extends EFSummarizedCallable { + private DbContextClassSetProperty p; + + DbContextClassSetPropertySynthetic() { this = p.getGetter() } + + override predicate propagatesFlow( + SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue + ) { + exists(string name, DbContextClass c | + preservesValue = true and + name = c.getSyntheticName(output, _, p) and + input = SummaryComponentStack::syntheticGlobal(name) + ) + } } private class DbContextSaveChanges extends EFSummarizedCallable { @@ -374,44 +457,32 @@ module EntityFramework { DbContextSaveChanges() { this = c.getASaveChanges() } - pragma[noinline] - private predicate input(SummaryComponentStack input, Property mapped) { - exists(PropertyContent head, SummaryComponentStack tail | - c.requiresComponentStackIn(head, _, tail, _) and - head.getProperty() = mapped and - mapped = c.getAColumnProperty(_) and - input = SummaryComponentStack::push(SummaryComponent::content(head), tail) - ) - } - - pragma[noinline] - private predicate output(SummaryComponentStack output, Property mapped) { - exists(PropertyContent head, SummaryComponentStack tail | - c.requiresComponentStackOut(head, _, tail, _) and - head.getProperty() = mapped and - mapped = c.getAColumnProperty(_) and - output = SummaryComponentStack::push(SummaryComponent::content(head), tail) - ) - } - override predicate propagatesFlow( SummaryComponentStack input, SummaryComponentStack output, boolean preservesValue ) { - exists(Property mapped | + exists(string name, Property mapped | preservesValue = true and - this.input(input, mapped) and - this.output(output, mapped) + c.input(input, mapped) and + name = c.getSyntheticName(_, mapped, _) and + output = SummaryComponentStack::syntheticGlobal(name) ) } } + /** + * Add all possible synthetic global names. + */ + private class EFSummarizedCallableSyntheticGlobal extends SummaryComponent::SyntheticGlobal { + EFSummarizedCallableSyntheticGlobal() { this = any(DbContextClass c).getSyntheticName(_, _, _) } + } + private class DbContextSaveChangesRequiredSummaryComponentStack extends RequiredSummaryComponentStack { override predicate required(SummaryComponent head, SummaryComponentStack tail) { exists(Content c | head = SummaryComponent::content(c) | any(DbContextClass cls).requiresComponentStackIn(c, _, tail, _) or - any(DbContextClass cls).requiresComponentStackOut(c, _, tail, _) + any(DbContextClass cls).requiresComponentStackOut(c, _, tail, _, _) ) } } diff --git a/csharp/ql/lib/semmle/code/csharp/security/auth/MissingFunctionLevelAccessControlQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/auth/MissingFunctionLevelAccessControlQuery.qll new file mode 100644 index 00000000000..7623cb6b9f7 --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/security/auth/MissingFunctionLevelAccessControlQuery.qll @@ -0,0 +1,183 @@ +/** Definitions for the missing function level access control query */ + +import csharp +import semmle.code.csharp.frameworks.microsoft.AspNetCore +import semmle.code.csharp.frameworks.system.web.UI +import semmle.code.asp.WebConfig + +/** A method representing an action for a web endpoint. */ +abstract class ActionMethod extends Method { + /** + * Gets a string that can indicate what this method does to determine if it should have an auth check; + * such as its method name, class name, or file path. + */ + string getADescription() { + result = + [ + this.getName(), this.getDeclaringType().getBaseClass*().getName(), + this.getDeclaringType().getFile().getRelativePath() + ] + } + + /** Holds if this method may need an authorization check. */ + predicate needsAuth() { + this.getADescription() + .regexpReplaceAll("([a-z])([A-Z])", "$1_$2") + // separate camelCase words + .toLowerCase() + .regexpMatch(".*(edit|delete|modify|admin|superuser).*") + } + + /** Gets a callable for which if it contains an auth check, this method should be considered authenticated. */ + Callable getAnAuthorizingCallable() { result = this } + + /** + * Gets a possible url route that could refer to this action, + * which would be covered by `` configurations specifying a prefix of it. + */ + string getARoute() { result = this.getDeclaringType().getFile().getRelativePath() } +} + +/** An action method in the MVC framework. */ +private class MvcActionMethod extends ActionMethod { + MvcActionMethod() { this = any(MicrosoftAspNetCoreMvcController c).getAnActionMethod() } +} + +/** An action method on a subclass of `System.Web.UI.Page`. */ +private class WebFormActionMethod extends ActionMethod { + WebFormActionMethod() { + this.getDeclaringType().getBaseClass+() instanceof SystemWebUIPageClass and + this.getAParameter().getType().getName().matches("%EventArgs") + } + + override Callable getAnAuthorizingCallable() { + result = super.getAnAuthorizingCallable() + or + result.getDeclaringType() = this.getDeclaringType() and + result.getName() = "Page_Load" + } + + override string getARoute() { + exists(string physicalRoute | physicalRoute = super.getARoute() | + result = physicalRoute + or + exists(string absolutePhysical | + virtualRouteMapping(result, absolutePhysical) and + physicalRouteMatches(absolutePhysical, physicalRoute) + ) + ) + } +} + +/** + * Holds if `virtualRoute` is a URL path + * that can map to the corresponding `physicalRoute` filepath + * through a call to `MapPageRoute` + */ +private predicate virtualRouteMapping(string virtualRoute, string physicalRoute) { + exists(MethodCall mapPageRouteCall, StringLiteral virtualLit, StringLiteral physicalLit | + mapPageRouteCall + .getTarget() + .hasQualifiedName("System.Web.Routing", "RouteCollection", "MapPageRoute") and + virtualLit = mapPageRouteCall.getArgument(1) and + physicalLit = mapPageRouteCall.getArgument(2) and + virtualLit.getValue() = virtualRoute and + physicalLit.getValue() = physicalRoute + ) +} + +/** Holds if the filepath `route` can refer to `actual` after expanding a '~". */ +bindingset[route, actual] +private predicate physicalRouteMatches(string route, string actual) { + route = actual + or + route.charAt(0) = "~" and + exists(string dir | actual = dir + route.suffix(1) + ".cs") +} + +/** An expression that indicates that some authorization/authentication check is being performed. */ +class AuthExpr extends Expr { + AuthExpr() { + this.(MethodCall) + .getTarget() + .hasQualifiedName("System.Security.Principal", "IPrincipal", "IsInRole") + or + this.(PropertyAccess) + .getTarget() + .hasQualifiedName("System.Security.Principal", "IIdentity", ["IsAuthenticated", "Name"]) + or + this.(MethodCall).getTarget().getName().toLowerCase().matches("%auth%") + or + this.(PropertyAccess).getTarget().getName().toLowerCase().matches("%auth%") + } +} + +/** Holds if `m` is a method that should have an auth check, and does indeed have one. */ +predicate hasAuthViaCode(ActionMethod m) { + m.needsAuth() and + exists(Callable caller, AuthExpr auth | + m.getAnAuthorizingCallable().calls*(caller) and + auth.getEnclosingCallable() = caller + ) +} + +/** An `` XML element. */ +class AuthorizationXmlElement extends XmlElement { + AuthorizationXmlElement() { + this.getParent() instanceof SystemWebXmlElement and + this.getName().toLowerCase() = "authorization" + } + + /** Holds if this element has a `` element to deny access to a resource. */ + predicate hasDenyElement() { this.getAChild().getName().toLowerCase() = "deny" } + + /** Gets the physical filepath of this element. */ + string getPhysicalPath() { result = this.getFile().getParentContainer().getRelativePath() } + + /** Gets the path specified by a `` tag containing this element, if any. */ + string getLocationTagPath() { + exists(LocationXmlElement loc, XmlAttribute path | + loc = this.getParent().(SystemWebXmlElement).getParent() and + path = loc.getAnAttribute() and + path.getName().toLowerCase() = "path" and + result = path.getValue() + ) + } + + /** Gets a route prefix that this configuration can refer to. */ + string getARoute() { + result = this.getLocationTagPath() + or + result = this.getPhysicalPath() + "/" + this.getLocationTagPath() + or + not exists(this.getLocationTagPath()) and + result = this.getPhysicalPath() + } +} + +/** + * Holds if the given action has an xml `authorization` tag that refers to it. + */ +predicate hasAuthViaXml(ActionMethod m) { + exists(AuthorizationXmlElement el, string rest | + el.hasDenyElement() and + m.getARoute() = el.getARoute() + rest + ) +} + +/** Holds if the given action has an attribute that indications authorization. */ +predicate hasAuthViaAttribute(ActionMethod m) { + exists(Attribute attr | attr.getType().getName().toLowerCase().matches("%auth%") | + attr = m.getAnAttribute() or + attr = m.getDeclaringType().getABaseType*().getAnAttribute() + ) +} + +/** Holds if `m` is a method that should have an auth check, but is missing it. */ +predicate missingAuth(ActionMethod m) { + m.needsAuth() and + not hasAuthViaCode(m) and + not hasAuthViaXml(m) and + not hasAuthViaAttribute(m) and + exists(m.getBody().getAChildStmt()) // exclude empty methods +} diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll index 265cae5f08a..90615faac9f 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll @@ -6,6 +6,7 @@ import csharp private import semmle.code.csharp.security.dataflow.flowsources.Remote private import semmle.code.csharp.frameworks.system.Diagnostics private import semmle.code.csharp.security.Sanitizers +private import semmle.code.csharp.dataflow.ExternalFlow /** * A source specific to command injection vulnerabilities. @@ -66,6 +67,11 @@ module CommandInjection = TaintTracking::Global; /** A source of remote user input. */ class RemoteSource extends Source instanceof RemoteFlowSource { } +/** Command Injection sinks defined through Models as Data. */ +private class ExternalCommandInjectionExprSink extends Sink { + ExternalCommandInjectionExprSink() { sinkNode(this, "command-injection") } +} + /** * A sink in `System.Diagnostic.Process` or its related classes. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll index 3f9c5947b68..c059cb7523c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll @@ -8,6 +8,7 @@ private import semmle.code.csharp.security.dataflow.flowsources.Remote private import semmle.code.csharp.frameworks.system.DirectoryServices private import semmle.code.csharp.frameworks.system.directoryservices.Protocols private import semmle.code.csharp.security.Sanitizers +private import semmle.code.csharp.dataflow.ExternalFlow /** * A data flow source for unvalidated user input that is used to construct LDAP queries. @@ -68,6 +69,11 @@ module LdapInjection = TaintTracking::Global; /** A source of remote user input. */ class RemoteSource extends Source instanceof RemoteFlowSource { } +/** LDAP sinks defined through Models as Data. */ +private class ExternalLdapExprSink extends Sink { + ExternalLdapExprSink() { sinkNode(this, "ldap-injection") } +} + /** * An argument that sets the `Path` property of a `DirectoryEntry` object that is a sink for LDAP * injection. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index f145b18dfeb..e219b5db589 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -8,6 +8,7 @@ private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink +private import semmle.code.csharp.dataflow.ExternalFlow /** * A data flow source for untrusted user input used in log entries. @@ -72,6 +73,11 @@ private class LogForgingLogMessageSink extends Sink, LogMessageSink { } */ private class LogForgingTraceMessageSink extends Sink, TraceMessageSink { } +/** Log Forging sinks defined through Models as Data. */ +private class ExternalLoggingExprSink extends Sink { + ExternalLoggingExprSink() { sinkNode(this, "log-injection") } +} + /** * A call to String replace or remove that is considered to sanitize replaced string. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 44b90cf3096..56c409b38b5 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -9,6 +9,7 @@ private import semmle.code.csharp.frameworks.system.Web private import semmle.code.csharp.frameworks.system.web.Mvc private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.frameworks.microsoft.AspNetCore +private import semmle.code.csharp.dataflow.ExternalFlow /** * A data flow source for unvalidated URL redirect vulnerabilities. @@ -70,6 +71,11 @@ module UrlRedirect = TaintTracking::Global; /** A source of remote user input. */ class RemoteSource extends Source instanceof RemoteFlowSource { } +/** URL Redirection sinks defined through Models as Data. */ +private class ExternalUrlRedirectExprSink extends Sink { + ExternalUrlRedirectExprSink() { sinkNode(this, "url-redirection") } +} + /** * A URL argument to a call to `HttpResponse.Redirect()` or `Controller.Redirect()`, that is a * sink for URL redirects. diff --git a/csharp/ql/lib/semmle/code/dotnet/Generics.qll b/csharp/ql/lib/semmle/code/dotnet/Generics.qll index f84718d4b82..67b8fb2f5d0 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Generics.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Generics.qll @@ -41,7 +41,7 @@ abstract class ConstructedGeneric extends Generic { UnboundGeneric getUnboundGeneric() { none() } /** Gets the total number of type arguments. */ - int getNumberOfTypeArguments() { result = count(int i | exists(this.getTypeArgument(i))) } + final int getNumberOfTypeArguments() { result = count(int i | exists(this.getTypeArgument(i))) } } /** diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index ba01a4cd7d5..302ba09808f 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.7.0 + +### New Queries + +* Added a new query, `cs/web/missing-function-level-access-control`, to find instances of missing authorization checks. + +### Bug Fixes + +* The query "Arbitrary file write during zip extraction ("Zip Slip")" (`cs/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." + ## 0.6.4 No user-facing changes. diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp index 61f7fc89267..9d9aedbdeac 100644 --- a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp @@ -3,16 +3,15 @@ "qhelp.dtd"> -

Extracting files from a malicious zip archive without validating that the destination file path -is within the destination directory can cause files outside the destination directory to be -overwritten, due to the possible presence of directory traversal elements (..) in -archive paths.

+

Extracting files from a malicious zip file, or similar type of archive, +is at risk of directory traversal attacks if filenames from the archive are +not properly validated.

Zip archives contain archive entries representing each file in the archive. These entries include a file path for the entry, but these file paths are not restricted and may contain unexpected special elements such as the directory traversal element (..). If these -file paths are used to determine an output file to write the contents of the archive item to, then -the file may be written to an unexpected location. This can result in sensitive information being +file paths are used to create a filesystem path, then a file operation may happen in an +unexpected location. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql b/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql index 7650e915b0e..a794ecdf79c 100644 --- a/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql +++ b/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql @@ -1,8 +1,8 @@ /** - * @name Arbitrary file write during zip extraction ("Zip Slip") - * @description Extracting files from a malicious zip archive without validating that the - * destination file path is within the destination directory can cause files outside - * the destination directory to be overwritten. + * @name Arbitrary file access during archive extraction ("Zip Slip") + * @description Extracting files from a malicious ZIP file, or similar type of archive, without + * validating that the destination file path is within the destination directory + * can allow an attacker to unexpectedly gain access to resources. * @kind path-problem * @id cs/zipslip * @problem.severity error diff --git a/csharp/ql/src/Security Features/CWE-285/MVC.cs b/csharp/ql/src/Security Features/CWE-285/MVC.cs new file mode 100644 index 00000000000..291c4544456 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-285/MVC.cs @@ -0,0 +1,13 @@ +public class ProfileController : Controller { + + // BAD: No authorization is used. + public ActionResult Edit(int id) { + ... + } + + // GOOD: The `Authorize` attribute is used. + [Authorize] + public ActionResult Delete(int id) { + ... + } +} \ No newline at end of file diff --git a/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.qhelp b/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.qhelp new file mode 100644 index 00000000000..d65d6010a2f --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.qhelp @@ -0,0 +1,54 @@ + + + + +

+Sensitive actions, such as editing or deleting content, or accessing admin pages, should have authorization checks +to ensure that they cannot be used by malicious actors. +

+ +
+ + +

+Ensure that proper authorization checks are made for sensitive actions. +For WebForms applications, the authorization tag in Web.config XML files +can be used to implement access control. The System.Web.UI.Page.User property can also be +used to verify a user's role. +For MVC applications, the Authorize attribute can be used to require authorization on specific +action methods. +

+ +
+ + +

+In the following WebForms example, the case marked BAD has no authorization checks whereas the +case marked GOOD uses User.IsInRole to check for the user's role. +

+ + + +

+The following Web.config file uses the authorization tag to deny access to anonymous users, +in a location tag to have that configuration apply to a specific path. +

+ + + +

+In the following MVC example, the case marked BAD has no authorization +checks whereas the case marked GOOD uses the Authorize attribute. +

+ + + +
+ +
  • Page.User Property - Microsoft Learn.
  • +
  • Control authorization permissions in an ASP.NET application - Microsoft Learn.
  • +
  • Simple authorization in ASP.NET Core - Microsoft Learn.
  • +
    +
    diff --git a/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql b/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql new file mode 100644 index 00000000000..52c02c05445 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql @@ -0,0 +1,20 @@ +/** + * @name Missing function level access control + * @description Sensitive actions should have authorization checks to prevent them from being used by malicious actors. + * @kind problem + * @problem.severity warning + * @security-severity 7.5 + * @precision medium + * @id cs/web/missing-function-level-access-control + * @tags security + * external/cwe/cwe-285 + * external/cwe/cwe-284 + * external/cwe/cwe-862 + */ + +import csharp +import semmle.code.csharp.security.auth.MissingFunctionLevelAccessControlQuery + +from Method m +where missingAuth(m) +select m, "This action is missing an authorization check." diff --git a/csharp/ql/src/Security Features/CWE-285/Web.config b/csharp/ql/src/Security Features/CWE-285/Web.config new file mode 100644 index 00000000000..8e83c8d38e9 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-285/Web.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/csharp/ql/src/Security Features/CWE-285/WebForms.cs b/csharp/ql/src/Security Features/CWE-285/WebForms.cs new file mode 100644 index 00000000000..49dce6097f1 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-285/WebForms.cs @@ -0,0 +1,14 @@ +class ProfilePage : System.Web.UI.Page { + // BAD: No authorization is used + protected void btn1_Edit_Click(object sender, EventArgs e) { + ... + } + + // GOOD: `User.IsInRole` checks the current user's role. + protected void btn2_Delete_Click(object sender, EventArgs e) { + if (!User.IsInRole("admin")) { + return; + } + ... + } +} \ No newline at end of file diff --git a/csharp/ql/src/Telemetry/ExternalApi.qll b/csharp/ql/src/Telemetry/ExternalApi.qll index 9358e9ce8e4..7be4f104837 100644 --- a/csharp/ql/src/Telemetry/ExternalApi.qll +++ b/csharp/ql/src/Telemetry/ExternalApi.qll @@ -50,7 +50,7 @@ class ExternalApi extends DotNet::Callable { bindingset[this] private string getSignature() { result = - this.getDeclaringType().getUnboundDeclaration() + "." + this.getName() + "(" + + nestedName(this.getDeclaringType().getUnboundDeclaration()) + "." + this.getName() + "(" + parameterQualifiedTypeNamesToString(this) + ")" } @@ -118,10 +118,25 @@ class ExternalApi extends DotNet::Callable { } } +/** + * Gets the nested name of the declaration. + * + * If the declaration is not a nested type, the result is the same as \`getName()\`. + * Otherwise the name of the nested type is prefixed with a \`+\` and appended to + * the name of the enclosing type, which might be a nested type as well. + */ +private string nestedName(Declaration declaration) { + not exists(declaration.getDeclaringType().getUnboundDeclaration()) and + result = declaration.getName() + or + nestedName(declaration.getDeclaringType().getUnboundDeclaration()) + "+" + declaration.getName() = + result +} + /** * Gets the limit for the number of results produced by a telemetry query. */ -int resultLimit() { result = 1000 } +int resultLimit() { result = 100 } /** * Holds if it is relevant to count usages of `api`. diff --git a/csharp/ql/src/change-notes/released/0.7.0.md b/csharp/ql/src/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..552b6f631d7 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.7.0.md @@ -0,0 +1,9 @@ +## 0.7.0 + +### New Queries + +* Added a new query, `cs/web/missing-function-level-access-control`, to find instances of missing authorization checks. + +### Bug Fixes + +* The query "Arbitrary file write during zip extraction ("Zip Slip")" (`cs/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll index 85a28fbc677..ec003891774 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll @@ -176,7 +176,6 @@ private predicate binaryValueNumber0( ) } -pragma[assume_small_delta] private predicate binaryValueNumber( BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand @@ -202,7 +201,6 @@ private predicate pointerArithmeticValueNumber0( ) } -pragma[assume_small_delta] private predicate pointerArithmeticValueNumber( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand @@ -249,7 +247,6 @@ private predicate loadTotalOverlapValueNumber0( ) } -pragma[assume_small_delta] private predicate loadTotalOverlapValueNumber( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll index 85a28fbc677..ec003891774 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -176,7 +176,6 @@ private predicate binaryValueNumber0( ) } -pragma[assume_small_delta] private predicate binaryValueNumber( BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand @@ -202,7 +201,6 @@ private predicate pointerArithmeticValueNumber0( ) } -pragma[assume_small_delta] private predicate pointerArithmeticValueNumber( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand @@ -249,7 +247,6 @@ private predicate loadTotalOverlapValueNumber0( ) } -pragma[assume_small_delta] private predicate loadTotalOverlapValueNumber( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 6ee46bb7a94..3a159ef7586 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.6.4 +version: 0.7.0 groups: - csharp - queries diff --git a/csharp/ql/test/TestUtilities/InlineFlowTest.qll b/csharp/ql/test/TestUtilities/InlineFlowTest.qll index a31d531e1b6..718752a978a 100644 --- a/csharp/ql/test/TestUtilities/InlineFlowTest.qll +++ b/csharp/ql/test/TestUtilities/InlineFlowTest.qll @@ -4,11 +4,12 @@ * Example for a test.ql: * ```ql * import csharp - * import DefaultValueFlow::PathGraph * import TestUtilities.InlineFlowTest + * import DefaultFlowTest + * import PathGraph * - * from DefaultValueFlow::PathNode source, DefaultValueFlow::PathNode sink - * where DefaultValueFlow::flowPath(source, sink) + * from PathNode source, PathNode sink + * where flowPath(source, sink) * select sink, source, sink, "$@", source, source.toString() * * ``` @@ -32,14 +33,10 @@ * } * ``` * - * If you're not interested in a specific flow type, you can disable either value or taint flow expectations as follows: - * ```ql - * class HasFlowTest extends InlineFlowTest { - * override DataFlow::Configuration getTaintFlowConfig() { none() } - * - * override DataFlow::Configuration getValueFlowConfig() { none() } - * } - * ``` + * If you are only interested in value flow, then instead of importing `DefaultFlowTest`, you can import + * `ValueFlowTest`. Similarly, if you are only interested in taint flow, then instead of + * importing `DefaultFlowTest`, you can import `TaintFlowTest`. In both cases + * `DefaultFlowConfig` can be replaced by another implementation of `DataFlow::ConfigSig`. * * If you need more fine-grained tuning, consider implementing a test using `InlineExpectationsTest`. */ @@ -47,8 +44,8 @@ import csharp import TestUtilities.InlineExpectationsTest -private predicate defaultSource(DataFlow::Node src) { - src.asExpr().(MethodCall).getTarget().getUndecoratedName() = ["Source", "Taint"] +private predicate defaultSource(DataFlow::Node source) { + source.asExpr().(MethodCall).getTarget().getUndecoratedName() = ["Source", "Taint"] } private predicate defaultSink(DataFlow::Node sink) { @@ -58,42 +55,66 @@ private predicate defaultSink(DataFlow::Node sink) { } module DefaultFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { defaultSource(n) } + predicate isSource(DataFlow::Node source) { defaultSource(source) } - predicate isSink(DataFlow::Node n) { defaultSink(n) } + predicate isSink(DataFlow::Node sink) { defaultSink(sink) } int fieldFlowBranchLimit() { result = 1000 } } -module DefaultValueFlow = DataFlow::Global; +private module NoFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { none() } -module DefaultTaintFlow = TaintTracking::Global; + predicate isSink(DataFlow::Node sink) { none() } +} private string getSourceArgString(DataFlow::Node src) { defaultSource(src) and src.asExpr().(MethodCall).getAnArgument().getValue() = result } -class InlineFlowTest extends InlineExpectationsTest { - InlineFlowTest() { this = "HasFlowTest" } +module FlowTest { + module ValueFlow = DataFlow::Global; - override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + module TaintFlow = TaintTracking::Global; - override predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasValueFlow" and - exists(DataFlow::Node src, DataFlow::Node sink | DefaultValueFlow::flow(src, sink) | - sink.getLocation() = location and - element = sink.toString() and - if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" - ) - or - tag = "hasTaintFlow" and - exists(DataFlow::Node src, DataFlow::Node sink | - DefaultTaintFlow::flow(src, sink) and not DefaultValueFlow::flow(src, sink) - | - sink.getLocation() = location and - element = sink.toString() and - if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" - ) + private module InlineTest implements TestSig { + string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node src, DataFlow::Node sink | ValueFlow::flow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" + ) + or + tag = "hasTaintFlow" and + exists(DataFlow::Node src, DataFlow::Node sink | + TaintFlow::flow(src, sink) and not ValueFlow::flow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" + ) + } + } + + import MakeTest + import DataFlow::MergePathGraph + + predicate flowPath(PathNode source, PathNode sink) { + ValueFlow::flowPath(source.asPathNode1(), sink.asPathNode1()) or + TaintFlow::flowPath(source.asPathNode2(), sink.asPathNode2()) } } + +module DefaultFlowTest = FlowTest; + +module ValueFlowTest { + import FlowTest +} + +module TaintFlowTest { + import FlowTest +} diff --git a/csharp/ql/test/experimental/CWE-918/RequestForgery.cs b/csharp/ql/test/experimental/CWE-918/RequestForgery.cs index 32347505b35..02e851d8df1 100644 --- a/csharp/ql/test/experimental/CWE-918/RequestForgery.cs +++ b/csharp/ql/test/experimental/CWE-918/RequestForgery.cs @@ -1,5 +1,3 @@ -// semmle-extractor-options: ${testdir}/../../resources/stubs/System.Web.cs /r:System.Threading.Tasks.dll /r:System.Collections.Specialized.dll /r:System.Runtime.dll /r:System.Private.Uri.dll - using System; using System.Threading.Tasks; using System.Web.Mvc; @@ -38,21 +36,3 @@ namespace RequestForgery.Controllers } } } -// Missing stubs: -namespace System.Net.Http -{ - public class HttpClient - { - public async Task SendAsync(HttpRequestMessage request) => throw null; - } - - public class HttpRequestMessage - { - public HttpRequestMessage(HttpMethod method, string requestUri) => throw null; - } - - public class HttpMethod - { - public static readonly HttpMethod Get; - } -} diff --git a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected index fb85f080a4c..4c499ad4be6 100644 --- a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected +++ b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected @@ -1,8 +1,8 @@ edges -| RequestForgery.cs:14:52:14:54 | url : String | RequestForgery.cs:16:66:16:68 | access to parameter url | +| RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | nodes -| RequestForgery.cs:14:52:14:54 | url : String | semmle.label | url : String | -| RequestForgery.cs:16:66:16:68 | access to parameter url | semmle.label | access to parameter url | +| RequestForgery.cs:12:52:12:54 | url : String | semmle.label | url : String | +| RequestForgery.cs:14:66:14:68 | access to parameter url | semmle.label | access to parameter url | subpaths #select -| RequestForgery.cs:16:66:16:68 | access to parameter url | RequestForgery.cs:14:52:14:54 | url : String | RequestForgery.cs:16:66:16:68 | access to parameter url | The URL of this request depends on a $@. | RequestForgery.cs:14:52:14:54 | url | user-provided value | +| RequestForgery.cs:14:66:14:68 | access to parameter url | RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | The URL of this request depends on a $@. | RequestForgery.cs:12:52:12:54 | url | user-provided value | diff --git a/csharp/ql/test/experimental/CWE-918/options b/csharp/ql/test/experimental/CWE-918/options new file mode 100644 index 00000000000..09b08bf4d27 --- /dev/null +++ b/csharp/ql/test/experimental/CWE-918/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../resources/stubs/System.Web.cs \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index d5bbeef765a..1aabed1e806 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -214,8 +214,8 @@ edges | CollectionFlow.cs:385:58:385:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:385:67:385:70 | access to parameter dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:385:67:385:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:385:67:385:73 | access to indexer : A | | CollectionFlow.cs:387:59:387:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:387:68:387:71 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:387:68:387:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:387:68:387:79 | call to method First> : Object [property Value] : A | -| CollectionFlow.cs:387:68:387:79 | call to method First> : Object [property Value] : A | CollectionFlow.cs:387:68:387:85 | access to property Value : A | +| CollectionFlow.cs:387:68:387:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:387:68:387:79 | call to method First> : KeyValuePair [property Value] : A | +| CollectionFlow.cs:387:68:387:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:387:68:387:85 | access to property Value : A | | CollectionFlow.cs:389:60:389:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:389:69:389:72 | access to parameter dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:389:69:389:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:389:69:389:79 | access to property Values : ICollection [element] : A | | CollectionFlow.cs:389:69:389:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:389:69:389:87 | call to method First : A | @@ -223,8 +223,8 @@ edges | CollectionFlow.cs:391:67:391:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:391:67:391:75 | access to property Keys : ICollection [element] : A | | CollectionFlow.cs:391:67:391:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:391:67:391:83 | call to method First : A | | CollectionFlow.cs:393:57:393:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:393:66:393:69 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:393:66:393:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:393:66:393:77 | call to method First> : Object [property Key] : A | -| CollectionFlow.cs:393:66:393:77 | call to method First> : Object [property Key] : A | CollectionFlow.cs:393:66:393:81 | access to property Key : A | +| CollectionFlow.cs:393:66:393:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:393:66:393:77 | call to method First> : KeyValuePair [property Key] : A | +| CollectionFlow.cs:393:66:393:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:393:66:393:81 | access to property Key : A | | CollectionFlow.cs:395:49:395:52 | args : A[] [element] : A | CollectionFlow.cs:395:63:395:66 | access to parameter args : A[] [element] : A | | CollectionFlow.cs:395:49:395:52 | args : null [element] : A | CollectionFlow.cs:395:63:395:66 | access to parameter args : null [element] : A | | CollectionFlow.cs:395:63:395:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:395:63:395:69 | access to array element | @@ -440,7 +440,7 @@ nodes | CollectionFlow.cs:385:67:385:73 | access to indexer : A | semmle.label | access to indexer : A | | CollectionFlow.cs:387:59:387:62 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:387:68:387:71 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:387:68:387:79 | call to method First> : Object [property Value] : A | semmle.label | call to method First> : Object [property Value] : A | +| CollectionFlow.cs:387:68:387:79 | call to method First> : KeyValuePair [property Value] : A | semmle.label | call to method First> : KeyValuePair [property Value] : A | | CollectionFlow.cs:387:68:387:85 | access to property Value : A | semmle.label | access to property Value : A | | CollectionFlow.cs:389:60:389:63 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:389:69:389:72 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | @@ -452,7 +452,7 @@ nodes | CollectionFlow.cs:391:67:391:83 | call to method First : A | semmle.label | call to method First : A | | CollectionFlow.cs:393:57:393:60 | dict : Dictionary [element, property Key] : A | semmle.label | dict : Dictionary [element, property Key] : A | | CollectionFlow.cs:393:66:393:69 | access to parameter dict : Dictionary [element, property Key] : A | semmle.label | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:393:66:393:77 | call to method First> : Object [property Key] : A | semmle.label | call to method First> : Object [property Key] : A | +| CollectionFlow.cs:393:66:393:77 | call to method First> : KeyValuePair [property Key] : A | semmle.label | call to method First> : KeyValuePair [property Key] : A | | CollectionFlow.cs:393:66:393:81 | access to property Key : A | semmle.label | access to property Key : A | | CollectionFlow.cs:395:49:395:52 | args : A[] [element] : A | semmle.label | args : A[] [element] : A | | CollectionFlow.cs:395:49:395:52 | args : null [element] : A | semmle.label | args : null [element] : A | diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected index 723086b649f..610ff1f06d9 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected @@ -51,5 +51,5 @@ viableLambda | DelegateFlow.cs:125:9:125:25 | function pointer call | file://:0:0:0:0 | (none) | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:40 | call to method M19 | DelegateFlow.cs:135:29:135:36 | (...) => ... | | DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:24 | (...) => ... | -| file://:0:0:0:0 | [summary] call to parameter position 0 of Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | -| file://:0:0:0:0 | [summary] call to parameter position 0 of Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | +| file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | +| file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs index 05772dfb29a..7a0e896e54d 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs @@ -149,9 +149,9 @@ namespace My.Qltest static T Apply(Func f, S s) => throw null; - static S[] Map(S[] elements, Func f) => throw null; + static T[] Map(S[] elements, Func f) => throw null; - static void Apply2(Action f, S s1, S s2) => throw null; + static void Apply2(Action f, D d1, D d2) => throw null; static void Parse(string s, out int i) => throw null; @@ -235,4 +235,4 @@ namespace My.Qltest static void Sink(object o) { } } -} \ No newline at end of file +} diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index 09ce9945cdf..c69a86a5cb3 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -12,10 +12,10 @@ edges | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | | ExternalFlow.cs:30:26:30:37 | object creation of type Object : Object | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | -| ExternalFlow.cs:36:19:36:62 | (...) ... : Object [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | +| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | -| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : Object [field Field] : Object | +| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | | ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | | ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:27 | access to field Field | @@ -38,8 +38,7 @@ edges | ExternalFlow.cs:72:23:72:23 | o : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | -| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element : Object | -| ExternalFlow.cs:78:18:78:24 | access to array element : Object | ExternalFlow.cs:78:18:78:24 | (...) ... | +| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element | | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | | ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | @@ -91,7 +90,7 @@ nodes | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | semmle.label | this access : D [field Field] : Object | | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | semmle.label | call to method StepFieldGetter | | ExternalFlow.cs:36:18:36:69 | access to field Field | semmle.label | access to field Field | -| ExternalFlow.cs:36:19:36:62 | (...) ... : Object [field Field] : Object | semmle.label | (...) ... : Object [field Field] : Object | +| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | semmle.label | (...) ... : D [field Field] : Object | | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | semmle.label | [post] this access : D [field Field] : Object | | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | semmle.label | call to method StepFieldSetter : D [field Field2, field Field] : Object | | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | semmle.label | access to field Field2 : Object [field Field] : Object | @@ -124,8 +123,7 @@ nodes | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | semmle.label | call to method Map : T[] [element] : Object | | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | semmle.label | access to local variable objs : T[] [element] : Object | -| ExternalFlow.cs:78:18:78:24 | (...) ... | semmle.label | (...) ... | -| ExternalFlow.cs:78:18:78:24 | access to array element : Object | semmle.label | access to array element : Object | +| ExternalFlow.cs:78:18:78:24 | access to array element | semmle.label | access to array element | | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | semmle.label | { ..., ... } : null [element] : Object | | ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | semmle.label | call to method Map : T[] [element] : Object | @@ -184,7 +182,7 @@ subpaths | ExternalFlow.cs:60:47:60:47 | access to parameter o | ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | ExternalFlow.cs:60:47:60:47 | access to parameter o | $@ | ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:66:18:66:18 | access to local variable o | ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | ExternalFlow.cs:66:18:66:18 | access to local variable o | $@ | ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:72:35:72:35 | access to parameter o | ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | $@ | ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | object creation of type Object : Object | -| ExternalFlow.cs:78:18:78:24 | (...) ... | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:78:18:78:24 | (...) ... | $@ | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | object creation of type Object : Object | +| ExternalFlow.cs:78:18:78:24 | access to array element | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:78:18:78:24 | access to array element | $@ | ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:85:18:85:25 | access to array element | ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:85:18:85:25 | access to array element | $@ | ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:92:18:92:18 | (...) ... | ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:92:18:92:18 | (...) ... | $@ | ExternalFlow.cs:90:21:90:34 | object creation of type String : String | object creation of type String : String | | ExternalFlow.cs:102:22:102:22 | access to parameter d | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | $@ | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | object creation of type Object : Object | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml index f626949e6f4..a2bf0d8b525 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.ext.yml @@ -16,8 +16,8 @@ extensions: - ["My.Qltest", "D", false, "StepElementSetter", "(System.Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["My.Qltest", "D", false, "Apply<,>", "(System.Func,S)", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "manual"] - ["My.Qltest", "D", false, "Apply<,>", "(System.Func,S)", "", "Argument[0].ReturnValue", "ReturnValue", "value", "manual"] - - ["My.Qltest", "D", false, "Apply2<>", "(System.Action,S,S)", "", "Argument[1].Field[My.Qltest.D.Field]", "Argument[0].Parameter[0]", "value", "manual"] - - ["My.Qltest", "D", false, "Apply2<>", "(System.Action,S,S)", "", "Argument[2].Field[My.Qltest.D.Field2]", "Argument[0].Parameter[0]", "value", "manual"] + - ["My.Qltest", "D", false, "Apply2", "(System.Action,My.Qltest.D,My.Qltest.D)", "", "Argument[1].Field[My.Qltest.D.Field]", "Argument[0].Parameter[0]", "value", "manual"] + - ["My.Qltest", "D", false, "Apply2", "(System.Action,My.Qltest.D,My.Qltest.D)", "", "Argument[2].Field[My.Qltest.D.Field2]", "Argument[0].Parameter[0]", "value", "manual"] - ["My.Qltest", "D", false, "Map<,>", "(S[],System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - ["My.Qltest", "D", false, "Map<,>", "(S[],System.Func)", "", "Argument[1].ReturnValue", "ReturnValue.Element", "value", "manual"] - ["My.Qltest", "D", false, "Parse", "(System.String,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index aa9ac0493aa..7466125341d 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -1,1100 +1,2196 @@ failures +testFailures edges | A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | +| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | | A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | | A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | +| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | | A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | | A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | | A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | | A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | | A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | +| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | | A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | +| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | | A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | | A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | | A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | +| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | | A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | +| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | | A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | +| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | +| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | | A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | | A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | +| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | +| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | +| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | | A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | | A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | +| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | +| A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | | A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | | A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | | A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | | A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | +| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | | A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | +| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | +| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | | A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | | A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | | A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | | A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | +| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | | A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | +| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | | A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | | A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | +| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | +| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | | A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | +| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | +| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | | A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | | A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | +| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | +| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | | A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | | A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | +| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | +| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | | A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | | A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | +| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | +| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | | A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | | A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | +| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | +| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | | A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | | A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | +| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | | A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | | A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | +| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | | A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | | A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | | A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | +| A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | +| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | | A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | +| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | +| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | +| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | +| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | | B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | +| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | | B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | | B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | | B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | +| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | +| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | | B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | | B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | +| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | | B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | | B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | +| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | +| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | | B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | | B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | +| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | +| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | +| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | +| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | +| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | +| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | +| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | +| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | | C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | +| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | +| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | | C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | | C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | | C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | | C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | | C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | | C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | | C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | +| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | +| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | +| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | +| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | +| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | +| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | +| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | +| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | +| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | +| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | +| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | +| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | | D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | | D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | +| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | +| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | +| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | +| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | | D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | | D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | +| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | +| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | | D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | | D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | +| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | | D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | +| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | | D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | | D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | | D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | | D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | | D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | | D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | | D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | | D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | | D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | | D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | | D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | | E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | +| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | | E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | +| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | +| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | | E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | +| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | | F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | +| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | +| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | | F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | | F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | +| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | +| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | | F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | | F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | +| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | | F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | | F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | | F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | +| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | +| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | | F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | +| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | | F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | +| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | | F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | +| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | | G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | +| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | +| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | +| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | +| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | | G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | | G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | +| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | +| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | | G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | +| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | +| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | | G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | +| H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | +| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | +| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | | H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | +| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | | H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | | H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | +| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | +| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | | H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | +| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | +| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | +| H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | +| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | | H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | | H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | +| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | +| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | | H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | +| H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | | H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | +| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | | H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | +| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | | H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | +| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | | H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | +| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | | H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | +| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | | H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | +| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | | H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | | H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | +| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | | H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | | H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | +| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | | H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | +| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | +| H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | | H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | +| H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | | H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | +| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | +| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | | H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | | H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | | H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | | H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | +| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | | H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | +| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | +| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | +| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | +| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | | I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | | I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | +| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | | I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | +| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | +| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | | I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | +| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | | I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | | I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | +| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | +| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | +| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | | J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | | J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | +| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | +| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | | J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | | J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | +| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | +| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | | J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | | J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | +| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | | J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | | J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | +| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | | J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | | J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | +| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | +| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | | J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | | J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | | J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | | J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | +| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | +| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | | J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | | J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | | J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | | J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | +| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | +| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | | J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | | J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | +| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | +| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | | J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | +| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | +| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | | J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | nodes | A.cs:5:17:5:28 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:5:17:5:28 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | semmle.label | call to method Make : B [field c] : C | | A.cs:6:17:6:25 | call to method Make : B [field c] : C | semmle.label | call to method Make : B [field c] : C | | A.cs:6:24:6:24 | access to local variable c : C | semmle.label | access to local variable c : C | +| A.cs:6:24:6:24 | access to local variable c : C | semmle.label | access to local variable c : C | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | | A.cs:7:14:7:16 | access to field c | semmle.label | access to field c | +| A.cs:7:14:7:16 | access to field c | semmle.label | access to field c | +| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | semmle.label | [post] access to local variable b : B [field c] : C1 | | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | semmle.label | [post] access to local variable b : B [field c] : C1 | | A.cs:13:15:13:29 | call to method Source : C1 | semmle.label | call to method Source : C1 | +| A.cs:13:15:13:29 | call to method Source : C1 | semmle.label | call to method Source : C1 | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | semmle.label | access to local variable b : B [field c] : C1 | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | semmle.label | access to local variable b : B [field c] : C1 | | A.cs:14:14:14:20 | call to method Get | semmle.label | call to method Get | +| A.cs:14:14:14:20 | call to method Get | semmle.label | call to method Get | +| A.cs:15:14:15:42 | call to method Get | semmle.label | call to method Get | | A.cs:15:14:15:42 | call to method Get | semmle.label | call to method Get | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | semmle.label | object creation of type B : B [field c] : C | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | semmle.label | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | semmle.label | call to method Source : C | | A.cs:15:21:15:34 | call to method Source : C | semmle.label | call to method Source : C | | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | semmle.label | call to method SetOnB : B [field c] : C2 | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | semmle.label | call to method SetOnB : B [field c] : C2 | +| A.cs:22:25:22:37 | call to method Source : C2 | semmle.label | call to method Source : C2 | | A.cs:22:25:22:37 | call to method Source : C2 | semmle.label | call to method Source : C2 | | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | +| A.cs:24:14:24:17 | access to field c | semmle.label | access to field c | | A.cs:24:14:24:17 | access to field c | semmle.label | access to field c | | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | semmle.label | call to method SetOnBWrap : B [field c] : C2 | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | semmle.label | call to method SetOnBWrap : B [field c] : C2 | +| A.cs:31:29:31:41 | call to method Source : C2 | semmle.label | call to method Source : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | semmle.label | call to method Source : C2 | | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | +| A.cs:33:14:33:17 | access to field c | semmle.label | access to field c | | A.cs:33:14:33:17 | access to field c | semmle.label | access to field c | | A.cs:36:33:36:33 | c : C2 | semmle.label | c : C2 | +| A.cs:36:33:36:33 | c : C2 | semmle.label | c : C2 | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | semmle.label | call to method SetOnB : B [field c] : C2 | | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | semmle.label | call to method SetOnB : B [field c] : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:38:29:38:29 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | semmle.label | ... ? ... : ... : B [field c] : C2 | | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | semmle.label | ... ? ... : ... : B [field c] : C2 | | A.cs:42:29:42:29 | c : C2 | semmle.label | c : C2 | +| A.cs:42:29:42:29 | c : C2 | semmle.label | c : C2 | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | semmle.label | [post] access to local variable b2 : B [field c] : C2 | | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | semmle.label | [post] access to local variable b2 : B [field c] : C2 | | A.cs:47:20:47:20 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:47:20:47:20 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | semmle.label | access to local variable b2 : B [field c] : C2 | | A.cs:55:17:55:28 | call to method Source : A | semmle.label | call to method Source : A | +| A.cs:55:17:55:28 | call to method Source : A | semmle.label | call to method Source : A | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | semmle.label | [post] access to local variable c1 : C1 [field a] : A | | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | semmle.label | [post] access to local variable c1 : C1 [field a] : A | | A.cs:57:16:57:16 | access to local variable a : A | semmle.label | access to local variable a : A | +| A.cs:57:16:57:16 | access to local variable a : A | semmle.label | access to local variable a : A | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | semmle.label | access to local variable c1 : C1 [field a] : A | | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | semmle.label | access to local variable c1 : C1 [field a] : A | | A.cs:60:22:60:22 | c : C1 [field a] : A | semmle.label | c : C1 [field a] : A | +| A.cs:60:22:60:22 | c : C1 [field a] : A | semmle.label | c : C1 [field a] : A | +| A.cs:64:18:64:26 | access to field a | semmle.label | access to field a | | A.cs:64:18:64:26 | access to field a | semmle.label | access to field a | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | semmle.label | (...) ... : C1 [field a] : A | +| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | semmle.label | (...) ... : C1 [field a] : A | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:83:15:83:26 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:83:15:83:26 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | semmle.label | [post] access to local variable b : B [field c] : C | | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | semmle.label | [post] access to local variable b : B [field c] : C | | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | +| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | +| A.cs:89:14:89:16 | access to field c | semmle.label | access to field c | | A.cs:89:14:89:16 | access to field c | semmle.label | access to field c | | A.cs:95:20:95:20 | b : B | semmle.label | b : B | +| A.cs:95:20:95:20 | b : B | semmle.label | b : B | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:97:13:97:13 | access to parameter b : B | semmle.label | access to parameter b : B | +| A.cs:97:13:97:13 | access to parameter b : B | semmle.label | access to parameter b : B | | A.cs:97:19:97:32 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:97:19:97:32 | call to method Source : C | semmle.label | call to method Source : C | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | semmle.label | [post] this access : D [field b, field c] : C | | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | semmle.label | [post] this access : D [field b, field c] : C | | A.cs:98:13:98:16 | [post] this access : D [field b] : B | semmle.label | [post] this access : D [field b] : B | | A.cs:98:13:98:16 | [post] this access : D [field b] : B | semmle.label | [post] this access : D [field b] : B | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | semmle.label | [post] this access : D [field b] : B | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | semmle.label | [post] this access : D [field b] : B | +| A.cs:98:22:98:43 | ... ? ... : ... : B | semmle.label | ... ? ... : ... : B | +| A.cs:98:22:98:43 | ... ? ... : ... : B | semmle.label | ... ? ... : ... : B | | A.cs:98:22:98:43 | ... ? ... : ... : B | semmle.label | ... ? ... : ... : B | | A.cs:98:22:98:43 | ... ? ... : ... : B | semmle.label | ... ? ... : ... : B | | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | semmle.label | ... ? ... : ... : B [field c] : C | +| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | semmle.label | ... ? ... : ... : B [field c] : C | +| A.cs:98:30:98:43 | call to method Source : B | semmle.label | call to method Source : B | | A.cs:98:30:98:43 | call to method Source : B | semmle.label | call to method Source : B | | A.cs:104:17:104:30 | call to method Source : B | semmle.label | call to method Source : B | +| A.cs:104:17:104:30 | call to method Source : B | semmle.label | call to method Source : B | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | semmle.label | object creation of type D : D [field b, field c] : C | | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | semmle.label | object creation of type D : D [field b, field c] : C | | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | semmle.label | object creation of type D : D [field b] : B | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | semmle.label | object creation of type D : D [field b] : B | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | semmle.label | [post] access to local variable b : B [field c] : C | | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | semmle.label | [post] access to local variable b : B [field c] : C | | A.cs:105:23:105:23 | access to local variable b : B | semmle.label | access to local variable b : B | +| A.cs:105:23:105:23 | access to local variable b : B | semmle.label | access to local variable b : B | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | semmle.label | access to local variable d : D [field b] : B | | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | semmle.label | access to local variable d : D [field b] : B | | A.cs:106:14:106:16 | access to field b | semmle.label | access to field b | +| A.cs:106:14:106:16 | access to field b | semmle.label | access to field b | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | semmle.label | access to local variable d : D [field b, field c] : C | | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | semmle.label | access to local variable d : D [field b, field c] : C | | A.cs:107:14:107:16 | access to field b : B [field c] : C | semmle.label | access to field b : B [field c] : C | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | semmle.label | access to field b : B [field c] : C | +| A.cs:107:14:107:18 | access to field c | semmle.label | access to field c | | A.cs:107:14:107:18 | access to field c | semmle.label | access to field c | | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | +| A.cs:108:14:108:16 | access to field c | semmle.label | access to field c | | A.cs:108:14:108:16 | access to field c | semmle.label | access to field c | | A.cs:113:17:113:29 | call to method Source : B | semmle.label | call to method Source : B | +| A.cs:113:17:113:29 | call to method Source : B | semmle.label | call to method Source : B | +| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | semmle.label | object creation of type MyList : MyList [field head] : B | | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | semmle.label | object creation of type MyList : MyList [field head] : B | | A.cs:114:29:114:29 | access to local variable b : B | semmle.label | access to local variable b : B | +| A.cs:114:29:114:29 | access to local variable b : B | semmle.label | access to local variable b : B | +| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | semmle.label | object creation of type MyList : MyList [field next, field head] : B | | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | semmle.label | object creation of type MyList : MyList [field next, field head] : B | | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | semmle.label | access to local variable l1 : MyList [field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | semmle.label | access to local variable l1 : MyList [field head] : B | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | semmle.label | object creation of type MyList : MyList [field next, field next, field head] : B | | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | semmle.label | object creation of type MyList : MyList [field next, field next, field head] : B | | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | semmle.label | access to local variable l2 : MyList [field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | semmle.label | access to local variable l2 : MyList [field next, field head] : B | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | semmle.label | access to local variable l3 : MyList [field next, field next, field head] : B | | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | semmle.label | access to local variable l3 : MyList [field next, field next, field head] : B | | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | semmle.label | access to field next : MyList [field next, field head] : B | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | semmle.label | access to field next : MyList [field next, field head] : B | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | semmle.label | access to field next : MyList [field head] : B | | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | semmle.label | access to field next : MyList [field head] : B | | A.cs:119:14:119:30 | access to field head | semmle.label | access to field head | +| A.cs:119:14:119:30 | access to field head | semmle.label | access to field head | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | semmle.label | access to local variable l : MyList [field next, field head] : B | | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | semmle.label | access to local variable l : MyList [field next, field head] : B | | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | semmle.label | access to local variable l : MyList [field next, field next, field head] : B | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | semmle.label | access to local variable l : MyList [field next, field next, field head] : B | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | semmle.label | access to field next : MyList [field head] : B | | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | semmle.label | access to field next : MyList [field head] : B | | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | semmle.label | access to field next : MyList [field next, field head] : B | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | semmle.label | access to field next : MyList [field next, field head] : B | +| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | semmle.label | access to local variable l : MyList [field head] : B | | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | semmle.label | access to local variable l : MyList [field head] : B | | A.cs:123:18:123:23 | access to field head | semmle.label | access to field head | +| A.cs:123:18:123:23 | access to field head | semmle.label | access to field head | +| A.cs:141:20:141:20 | c : C | semmle.label | c : C | | A.cs:141:20:141:20 | c : C | semmle.label | c : C | | A.cs:143:13:143:16 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | +| A.cs:143:13:143:16 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | +| A.cs:143:22:143:22 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:143:22:143:22 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:145:27:145:27 | c : C | semmle.label | c : C | +| A.cs:145:27:145:27 | c : C | semmle.label | c : C | +| A.cs:145:27:145:27 | c : C1 | semmle.label | c : C1 | | A.cs:145:27:145:27 | c : C1 | semmle.label | c : C1 | | A.cs:145:27:145:27 | c : C2 | semmle.label | c : C2 | +| A.cs:145:27:145:27 | c : C2 | semmle.label | c : C2 | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | | A.cs:145:32:145:35 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | semmle.label | [post] this access : B [field c] : C1 | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | semmle.label | [post] this access : B [field c] : C1 | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | semmle.label | [post] this access : B [field c] : C2 | | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | semmle.label | [post] this access : B [field c] : C2 | | A.cs:145:41:145:41 | access to parameter c : C | semmle.label | access to parameter c : C | +| A.cs:145:41:145:41 | access to parameter c : C | semmle.label | access to parameter c : C | +| A.cs:145:41:145:41 | access to parameter c : C1 | semmle.label | access to parameter c : C1 | | A.cs:145:41:145:41 | access to parameter c : C1 | semmle.label | access to parameter c : C1 | | A.cs:145:41:145:41 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:145:41:145:41 | access to parameter c : C2 | semmle.label | access to parameter c : C2 | +| A.cs:146:18:146:20 | this : B [field c] : C | semmle.label | this : B [field c] : C | | A.cs:146:18:146:20 | this : B [field c] : C | semmle.label | this : B [field c] : C | | A.cs:146:18:146:20 | this : B [field c] : C1 | semmle.label | this : B [field c] : C1 | +| A.cs:146:18:146:20 | this : B [field c] : C1 | semmle.label | this : B [field c] : C1 | +| A.cs:146:33:146:36 | this access : B [field c] : C | semmle.label | this access : B [field c] : C | | A.cs:146:33:146:36 | this access : B [field c] : C | semmle.label | this access : B [field c] : C | | A.cs:146:33:146:36 | this access : B [field c] : C1 | semmle.label | this access : B [field c] : C1 | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | semmle.label | this access : B [field c] : C1 | +| A.cs:146:33:146:38 | access to field c : C | semmle.label | access to field c : C | | A.cs:146:33:146:38 | access to field c : C | semmle.label | access to field c : C | | A.cs:146:33:146:38 | access to field c : C1 | semmle.label | access to field c : C1 | +| A.cs:146:33:146:38 | access to field c : C1 | semmle.label | access to field c : C1 | +| A.cs:147:32:147:32 | c : C | semmle.label | c : C | | A.cs:147:32:147:32 | c : C | semmle.label | c : C | | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | semmle.label | object creation of type B : B [field c] : C | +| A.cs:149:20:149:27 | object creation of type B : B [field c] : C | semmle.label | object creation of type B : B [field c] : C | +| A.cs:149:26:149:26 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:149:26:149:26 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:157:25:157:28 | head : B | semmle.label | head : B | +| A.cs:157:25:157:28 | head : B | semmle.label | head : B | +| A.cs:157:38:157:41 | next : MyList [field head] : B | semmle.label | next : MyList [field head] : B | | A.cs:157:38:157:41 | next : MyList [field head] : B | semmle.label | next : MyList [field head] : B | | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | semmle.label | next : MyList [field next, field head] : B | +| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | semmle.label | next : MyList [field next, field head] : B | +| A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | semmle.label | [post] this access : MyList [field head] : B | | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | semmle.label | [post] this access : MyList [field head] : B | | A.cs:159:25:159:28 | access to parameter head : B | semmle.label | access to parameter head : B | +| A.cs:159:25:159:28 | access to parameter head : B | semmle.label | access to parameter head : B | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | semmle.label | [post] this access : MyList [field next, field head] : B | | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | semmle.label | [post] this access : MyList [field next, field head] : B | | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | semmle.label | [post] this access : MyList [field next, field next, field head] : B | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | semmle.label | [post] this access : MyList [field next, field next, field head] : B | +| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | semmle.label | access to parameter next : MyList [field head] : B | | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | semmle.label | access to parameter next : MyList [field head] : B | | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | semmle.label | access to parameter next : MyList [field next, field head] : B | +| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | semmle.label | access to parameter next : MyList [field next, field head] : B | +| B.cs:5:17:5:31 | call to method Source : Elem | semmle.label | call to method Source : Elem | | B.cs:5:17:5:31 | call to method Source : Elem | semmle.label | call to method Source : Elem | | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | semmle.label | object creation of type Box1 : Box1 [field elem1] : Elem | +| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | semmle.label | object creation of type Box1 : Box1 [field elem1] : Elem | +| B.cs:6:27:6:27 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | B.cs:6:27:6:27 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | semmle.label | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | semmle.label | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | semmle.label | access to local variable b1 : Box1 [field elem1] : Elem | | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | semmle.label | access to local variable b1 : Box1 [field elem1] : Elem | | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | semmle.label | access to local variable b2 : Box2 [field box1, field elem1] : Elem | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | semmle.label | access to local variable b2 : Box2 [field box1, field elem1] : Elem | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | semmle.label | access to field box1 : Box1 [field elem1] : Elem | | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | semmle.label | access to field box1 : Box1 [field elem1] : Elem | | B.cs:8:14:8:26 | access to field elem1 | semmle.label | access to field elem1 | +| B.cs:8:14:8:26 | access to field elem1 | semmle.label | access to field elem1 | +| B.cs:14:17:14:31 | call to method Source : Elem | semmle.label | call to method Source : Elem | | B.cs:14:17:14:31 | call to method Source : Elem | semmle.label | call to method Source : Elem | | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | semmle.label | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | semmle.label | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | B.cs:15:33:15:33 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | semmle.label | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | semmle.label | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | semmle.label | access to local variable b1 : Box1 [field elem2] : Elem | | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | semmle.label | access to local variable b1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | semmle.label | access to local variable b2 : Box2 [field box1, field elem2] : Elem | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | semmle.label | access to local variable b2 : Box2 [field box1, field elem2] : Elem | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | semmle.label | access to field box1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | semmle.label | access to field box1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:26 | access to field elem2 | semmle.label | access to field elem2 | +| B.cs:18:14:18:26 | access to field elem2 | semmle.label | access to field elem2 | +| B.cs:29:26:29:27 | e1 : Elem | semmle.label | e1 : Elem | | B.cs:29:26:29:27 | e1 : Elem | semmle.label | e1 : Elem | | B.cs:29:35:29:36 | e2 : Elem | semmle.label | e2 : Elem | +| B.cs:29:35:29:36 | e2 : Elem | semmle.label | e2 : Elem | +| B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | semmle.label | [post] this access : Box1 [field elem1] : Elem | | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | semmle.label | [post] this access : Box1 [field elem1] : Elem | | B.cs:31:26:31:27 | access to parameter e1 : Elem | semmle.label | access to parameter e1 : Elem | +| B.cs:31:26:31:27 | access to parameter e1 : Elem | semmle.label | access to parameter e1 : Elem | +| B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | semmle.label | [post] this access : Box1 [field elem2] : Elem | | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | semmle.label | [post] this access : Box1 [field elem2] : Elem | | B.cs:32:26:32:27 | access to parameter e2 : Elem | semmle.label | access to parameter e2 : Elem | +| B.cs:32:26:32:27 | access to parameter e2 : Elem | semmle.label | access to parameter e2 : Elem | +| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | semmle.label | b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | semmle.label | b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | semmle.label | b1 : Box1 [field elem2] : Elem | +| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | semmle.label | b1 : Box1 [field elem2] : Elem | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | semmle.label | [post] this access : Box2 [field box1, field elem1] : Elem | | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | semmle.label | [post] this access : Box2 [field box1, field elem1] : Elem | | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | semmle.label | [post] this access : Box2 [field box1, field elem2] : Elem | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | semmle.label | [post] this access : Box2 [field box1, field elem2] : Elem | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | semmle.label | access to parameter b1 : Box1 [field elem1] : Elem | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | semmle.label | access to parameter b1 : Box1 [field elem1] : Elem | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | semmle.label | access to parameter b1 : Box1 [field elem2] : Elem | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | semmle.label | access to parameter b1 : Box1 [field elem2] : Elem | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | semmle.label | [post] this access : C [field s1] : Elem | | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | semmle.label | [post] this access : C [field s1] : Elem | | C.cs:3:23:3:37 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:3:23:3:37 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | semmle.label | [post] this access : C [field s2] : Elem | | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | semmle.label | [post] this access : C [field s2] : Elem | | C.cs:4:32:4:46 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:4:32:4:46 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:6:30:6:44 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C.cs:6:30:6:44 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | semmle.label | [post] this access : C [property s5] : Elem | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | semmle.label | [post] this access : C [property s5] : Elem | +| C.cs:7:37:7:51 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C.cs:7:37:7:51 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C.cs:8:30:8:44 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:8:30:8:44 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | semmle.label | object creation of type C : C [field s1] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | semmle.label | object creation of type C : C [field s1] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | semmle.label | object creation of type C : C [field s2] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | semmle.label | object creation of type C : C [field s2] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | semmle.label | object creation of type C : C [field s3] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | semmle.label | object creation of type C : C [field s3] : Elem | | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | semmle.label | object creation of type C : C [property s5] : Elem | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | semmle.label | object creation of type C : C [property s5] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | semmle.label | access to local variable c : C [field s1] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | semmle.label | access to local variable c : C [field s1] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | semmle.label | access to local variable c : C [field s2] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | semmle.label | access to local variable c : C [field s2] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | semmle.label | access to local variable c : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | semmle.label | access to local variable c : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | +| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | semmle.label | [post] this access : C [field s3] : Elem | | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | semmle.label | [post] this access : C [field s3] : Elem | | C.cs:18:19:18:33 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:18:19:18:33 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C.cs:21:17:21:18 | this : C [field s1] : Elem | semmle.label | this : C [field s1] : Elem | | C.cs:21:17:21:18 | this : C [field s1] : Elem | semmle.label | this : C [field s1] : Elem | | C.cs:21:17:21:18 | this : C [field s2] : Elem | semmle.label | this : C [field s2] : Elem | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | semmle.label | this : C [field s2] : Elem | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | semmle.label | this : C [field s3] : Elem | | C.cs:21:17:21:18 | this : C [field s3] : Elem | semmle.label | this : C [field s3] : Elem | | C.cs:21:17:21:18 | this : C [property s5] : Elem | semmle.label | this : C [property s5] : Elem | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | semmle.label | this : C [property s5] : Elem | +| C.cs:23:14:23:15 | access to field s1 | semmle.label | access to field s1 | | C.cs:23:14:23:15 | access to field s1 | semmle.label | access to field s1 | | C.cs:23:14:23:15 | this access : C [field s1] : Elem | semmle.label | this access : C [field s1] : Elem | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | semmle.label | this access : C [field s1] : Elem | +| C.cs:24:14:24:15 | access to field s2 | semmle.label | access to field s2 | | C.cs:24:14:24:15 | access to field s2 | semmle.label | access to field s2 | | C.cs:24:14:24:15 | this access : C [field s2] : Elem | semmle.label | this access : C [field s2] : Elem | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | semmle.label | this access : C [field s2] : Elem | +| C.cs:25:14:25:15 | access to field s3 | semmle.label | access to field s3 | | C.cs:25:14:25:15 | access to field s3 | semmle.label | access to field s3 | | C.cs:25:14:25:15 | this access : C [field s3] : Elem | semmle.label | this access : C [field s3] : Elem | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | semmle.label | this access : C [field s3] : Elem | +| C.cs:26:14:26:15 | access to field s4 | semmle.label | access to field s4 | | C.cs:26:14:26:15 | access to field s4 | semmle.label | access to field s4 | | C.cs:27:14:27:15 | access to property s5 | semmle.label | access to property s5 | +| C.cs:27:14:27:15 | access to property s5 | semmle.label | access to property s5 | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | semmle.label | this access : C [property s5] : Elem | | C.cs:27:14:27:15 | this access : C [property s5] : Elem | semmle.label | this access : C [property s5] : Elem | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | +| C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | +| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | +| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | +| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | | C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | +| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | +| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | +| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | +| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | +| C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | | C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | +| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | +| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | +| D.cs:8:22:8:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:8:22:8:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:9:9:9:11 | value : Object | semmle.label | value : Object | +| D.cs:9:9:9:11 | value : Object | semmle.label | value : Object | +| D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | | D.cs:9:39:9:43 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:9:39:9:43 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | +| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | +| D.cs:14:22:14:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:14:22:14:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:15:9:15:11 | value : Object | semmle.label | value : Object | +| D.cs:15:9:15:11 | value : Object | semmle.label | value : Object | +| D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | | D.cs:15:34:15:38 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:15:34:15:38 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:18:28:18:29 | o1 : Object | semmle.label | o1 : Object | | D.cs:18:28:18:29 | o1 : Object | semmle.label | o1 : Object | | D.cs:18:39:18:40 | o2 : Object | semmle.label | o2 : Object | +| D.cs:18:39:18:40 | o2 : Object | semmle.label | o2 : Object | +| D.cs:18:50:18:51 | o3 : Object | semmle.label | o3 : Object | | D.cs:18:50:18:51 | o3 : Object | semmle.label | o3 : Object | | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | semmle.label | [post] access to local variable ret : D [property AutoProp] : Object | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | semmle.label | [post] access to local variable ret : D [property AutoProp] : Object | +| D.cs:21:24:21:25 | access to parameter o1 : Object | semmle.label | access to parameter o1 : Object | | D.cs:21:24:21:25 | access to parameter o1 : Object | semmle.label | access to parameter o1 : Object | | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | semmle.label | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | semmle.label | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | semmle.label | access to parameter o2 : Object | | D.cs:22:27:22:28 | access to parameter o2 : Object | semmle.label | access to parameter o2 : Object | | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | semmle.label | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | semmle.label | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | semmle.label | access to parameter o3 : Object | | D.cs:23:27:23:28 | access to parameter o3 : Object | semmle.label | access to parameter o3 : Object | | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | semmle.label | access to local variable ret : D [field trivialPropField] : Object | | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | semmle.label | access to local variable ret : D [field trivialPropField] : Object | +| D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | semmle.label | access to local variable ret : D [field trivialPropField] : Object | +| D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | semmle.label | access to local variable ret : D [field trivialPropField] : Object | +| D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | semmle.label | access to local variable ret : D [property AutoProp] : Object | | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | semmle.label | access to local variable ret : D [property AutoProp] : Object | | D.cs:29:17:29:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:29:17:29:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | semmle.label | call to method Create : D [property AutoProp] : Object | | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | semmle.label | call to method Create : D [property AutoProp] : Object | | D.cs:31:24:31:24 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| D.cs:31:24:31:24 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | semmle.label | access to local variable d : D [property AutoProp] : Object | | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | semmle.label | access to local variable d : D [property AutoProp] : Object | | D.cs:32:14:32:23 | access to property AutoProp | semmle.label | access to property AutoProp | +| D.cs:32:14:32:23 | access to property AutoProp | semmle.label | access to property AutoProp | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | semmle.label | call to method Create : D [field trivialPropField] : Object | | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | semmle.label | call to method Create : D [field trivialPropField] : Object | | D.cs:37:26:37:42 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:37:26:37:42 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:39:14:39:26 | access to property TrivialProp | semmle.label | access to property TrivialProp | +| D.cs:39:14:39:26 | access to property TrivialProp | semmle.label | access to property TrivialProp | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:40:14:40:31 | access to field trivialPropField | semmle.label | access to field trivialPropField | +| D.cs:40:14:40:31 | access to field trivialPropField | semmle.label | access to field trivialPropField | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:41:14:41:26 | access to property ComplexProp | semmle.label | access to property ComplexProp | +| D.cs:41:14:41:26 | access to property ComplexProp | semmle.label | access to property ComplexProp | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | semmle.label | call to method Create : D [field trivialPropField] : Object | | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | semmle.label | call to method Create : D [field trivialPropField] : Object | | D.cs:43:32:43:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:43:32:43:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:45:14:45:26 | access to property TrivialProp | semmle.label | access to property TrivialProp | +| D.cs:45:14:45:26 | access to property TrivialProp | semmle.label | access to property TrivialProp | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:46:14:46:31 | access to field trivialPropField | semmle.label | access to field trivialPropField | +| D.cs:46:14:46:31 | access to field trivialPropField | semmle.label | access to field trivialPropField | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | semmle.label | access to local variable d : D [field trivialPropField] : Object | | D.cs:47:14:47:26 | access to property ComplexProp | semmle.label | access to property ComplexProp | +| D.cs:47:14:47:26 | access to property ComplexProp | semmle.label | access to property ComplexProp | +| E.cs:8:29:8:29 | o : Object | semmle.label | o : Object | | E.cs:8:29:8:29 | o : Object | semmle.label | o : Object | | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | semmle.label | [post] access to local variable ret : S [field Field] : Object | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | semmle.label | [post] access to local variable ret : S [field Field] : Object | +| E.cs:11:21:11:21 | access to parameter o : Object | semmle.label | access to parameter o : Object | | E.cs:11:21:11:21 | access to parameter o : Object | semmle.label | access to parameter o : Object | | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | semmle.label | access to local variable ret : S [field Field] : Object | +| E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | semmle.label | access to local variable ret : S [field Field] : Object | +| E.cs:22:17:22:33 | call to method Source : Object | semmle.label | call to method Source : Object | | E.cs:22:17:22:33 | call to method Source : Object | semmle.label | call to method Source : Object | | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | semmle.label | call to method CreateS : S [field Field] : Object | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | semmle.label | call to method CreateS : S [field Field] : Object | +| E.cs:23:25:23:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | | E.cs:23:25:23:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | semmle.label | access to local variable s : S [field Field] : Object | +| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | semmle.label | access to local variable s : S [field Field] : Object | +| E.cs:24:14:24:20 | access to field Field | semmle.label | access to field Field | | E.cs:24:14:24:20 | access to field Field | semmle.label | access to field Field | | F.cs:6:28:6:29 | o1 : Object | semmle.label | o1 : Object | +| F.cs:6:28:6:29 | o1 : Object | semmle.label | o1 : Object | +| F.cs:6:39:6:40 | o2 : Object | semmle.label | o2 : Object | | F.cs:6:39:6:40 | o2 : Object | semmle.label | o2 : Object | | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | semmle.label | object creation of type F : F [field Field1] : Object | +| F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | semmle.label | object creation of type F : F [field Field1] : Object | +| F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | semmle.label | object creation of type F : F [field Field2] : Object | | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | semmle.label | object creation of type F : F [field Field2] : Object | | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | semmle.label | { ..., ... } : F [field Field1] : Object | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | semmle.label | { ..., ... } : F [field Field1] : Object | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | semmle.label | { ..., ... } : F [field Field2] : Object | | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | semmle.label | { ..., ... } : F [field Field2] : Object | | F.cs:6:65:6:66 | access to parameter o1 : Object | semmle.label | access to parameter o1 : Object | +| F.cs:6:65:6:66 | access to parameter o1 : Object | semmle.label | access to parameter o1 : Object | +| F.cs:6:78:6:79 | access to parameter o2 : Object | semmle.label | access to parameter o2 : Object | | F.cs:6:78:6:79 | access to parameter o2 : Object | semmle.label | access to parameter o2 : Object | | F.cs:10:17:10:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:10:17:10:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | semmle.label | call to method Create : F [field Field1] : Object | | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | semmle.label | call to method Create : F [field Field1] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| F.cs:11:24:11:24 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | semmle.label | access to local variable f : F [field Field1] : Object | | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | semmle.label | access to local variable f : F [field Field1] : Object | | F.cs:12:14:12:21 | access to field Field1 | semmle.label | access to field Field1 | +| F.cs:12:14:12:21 | access to field Field1 | semmle.label | access to field Field1 | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | semmle.label | call to method Create : F [field Field2] : Object | | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | semmle.label | call to method Create : F [field Field2] : Object | | F.cs:15:26:15:42 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:15:26:15:42 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | semmle.label | access to local variable f : F [field Field2] : Object | | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | semmle.label | access to local variable f : F [field Field2] : Object | | F.cs:17:14:17:21 | access to field Field2 | semmle.label | access to field Field2 | +| F.cs:17:14:17:21 | access to field Field2 | semmle.label | access to field Field2 | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | semmle.label | { ..., ... } : F [field Field1] : Object | | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | semmle.label | { ..., ... } : F [field Field1] : Object | | F.cs:19:32:19:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:19:32:19:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | semmle.label | access to local variable f : F [field Field1] : Object | | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | semmle.label | access to local variable f : F [field Field1] : Object | | F.cs:20:14:20:21 | access to field Field1 | semmle.label | access to field Field1 | +| F.cs:20:14:20:21 | access to field Field1 | semmle.label | access to field Field1 | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | semmle.label | { ..., ... } : F [field Field2] : Object | | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | semmle.label | { ..., ... } : F [field Field2] : Object | | F.cs:23:32:23:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:23:32:23:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | semmle.label | access to local variable f : F [field Field2] : Object | | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | semmle.label | access to local variable f : F [field Field2] : Object | | F.cs:25:14:25:21 | access to field Field2 | semmle.label | access to field Field2 | +| F.cs:25:14:25:21 | access to field Field2 | semmle.label | access to field Field2 | +| F.cs:30:17:30:33 | call to method Source : Object | semmle.label | call to method Source : Object | | F.cs:30:17:30:33 | call to method Source : Object | semmle.label | call to method Source : Object | | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | semmle.label | { ..., ... } : <>__AnonType0 [property X] : Object | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | semmle.label | { ..., ... } : <>__AnonType0 [property X] : Object | +| F.cs:32:27:32:27 | access to local variable o : Object | semmle.label | access to local variable o : Object | | F.cs:32:27:32:27 | access to local variable o : Object | semmle.label | access to local variable o : Object | | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a : <>__AnonType0 [property X] : Object | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a : <>__AnonType0 [property X] : Object | +| F.cs:33:14:33:16 | access to property X | semmle.label | access to property X | | F.cs:33:14:33:16 | access to property X | semmle.label | access to property X | | G.cs:7:18:7:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:7:18:7:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:9:23:9:23 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:9:23:9:23 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:15:18:15:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | | G.cs:15:18:15:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:17:24:17:24 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:23:18:23:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:23:18:23:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:25:28:25:28 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:25:28:25:28 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:31:18:31:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | | G.cs:31:18:31:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | semmle.label | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | semmle.label | b2 : Box2 [field Box1, field Elem] : Elem | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | semmle.label | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | semmle.label | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:35 | call to method GetElem | semmle.label | call to method GetElem | | G.cs:39:14:39:35 | call to method GetElem | semmle.label | call to method GetElem | | G.cs:44:18:44:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:44:18:44:32 | call to method Source : Elem | semmle.label | call to method Source : Elem | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | semmle.label | [post] access to field Box1 : Box1 [field Elem] : Elem | | G.cs:46:30:46:30 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:46:30:46:30 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this access : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this access : G [field boxfield, field Box1, field Elem] : Elem | | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | semmle.label | access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | semmle.label | access to field boxfield : Box2 [field Box1, field Elem] : Elem | | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | semmle.label | this access : G [field boxfield, field Box1, field Elem] : Elem | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:52:14:52:31 | access to field Elem | semmle.label | access to field Elem | +| G.cs:52:14:52:31 | access to field Elem | semmle.label | access to field Elem | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | semmle.label | this : Box1 [field Elem] : Elem | | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | semmle.label | this : Box1 [field Elem] : Elem | | G.cs:63:34:63:37 | access to field Elem : Elem | semmle.label | access to field Elem : Elem | +| G.cs:63:34:63:37 | access to field Elem : Elem | semmle.label | access to field Elem : Elem | +| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | semmle.label | this access : Box1 [field Elem] : Elem | | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | semmle.label | this access : Box1 [field Elem] : Elem | | G.cs:64:34:64:34 | e : Elem | semmle.label | e : Elem | +| G.cs:64:34:64:34 | e : Elem | semmle.label | e : Elem | +| G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | semmle.label | [post] this access : Box1 [field Elem] : Elem | | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | semmle.label | [post] this access : Box1 [field Elem] : Elem | | G.cs:64:46:64:46 | access to parameter e : Elem | semmle.label | access to parameter e : Elem | +| G.cs:64:46:64:46 | access to parameter e : Elem | semmle.label | access to parameter e : Elem | +| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | semmle.label | this : Box2 [field Box1, field Elem] : Elem | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | semmle.label | this : Box2 [field Box1, field Elem] : Elem | | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | semmle.label | this access : Box2 [field Box1, field Elem] : Elem | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | semmle.label | this access : Box2 [field Box1, field Elem] : Elem | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:13:15:13:15 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | semmle.label | [post] access to local variable ret : A [field FieldA] : Object | | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | semmle.label | [post] access to local variable ret : A [field FieldA] : Object | | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:16:22:16:29 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | | H.cs:16:22:16:29 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | semmle.label | access to local variable ret : A [field FieldA] : Object | +| H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | semmle.label | access to local variable ret : A [field FieldA] : Object | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:23:20:23:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:23:20:23:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | semmle.label | call to method Clone : A [field FieldA] : Object | | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | semmle.label | call to method Clone : A [field FieldA] : Object | | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | semmle.label | access to local variable clone : A [field FieldA] : Object | | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | semmle.label | access to local variable clone : A [field FieldA] : Object | | H.cs:25:14:25:25 | access to field FieldA | semmle.label | access to field FieldA | +| H.cs:25:14:25:25 | access to field FieldA | semmle.label | access to field FieldA | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | semmle.label | a : A [field FieldA] : A | | H.cs:33:19:33:19 | a : A [field FieldA] : A | semmle.label | a : A [field FieldA] : A | | H.cs:33:19:33:19 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | semmle.label | [post] access to local variable b : B [field FieldB] : A | | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | semmle.label | [post] access to local variable b : B [field FieldB] : A | | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | semmle.label | [post] access to local variable b : B [field FieldB] : Object | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | semmle.label | [post] access to local variable b : B [field FieldB] : Object | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | semmle.label | access to parameter a : A [field FieldA] : A | | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | semmle.label | access to parameter a : A [field FieldA] : A | | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:36:20:36:27 | access to field FieldA : A | semmle.label | access to field FieldA : A | | H.cs:36:20:36:27 | access to field FieldA : A | semmle.label | access to field FieldA : A | | H.cs:36:20:36:27 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | +| H.cs:36:20:36:27 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | +| H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | semmle.label | access to local variable b : B [field FieldB] : A | | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | semmle.label | access to local variable b : B [field FieldB] : A | | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | +| H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:43:20:43:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:43:20:43:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | +| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:45:14:45:21 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:45:14:45:21 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:53:25:53:25 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:55:21:55:28 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | +| H.cs:55:21:55:28 | access to field FieldA : Object | semmle.label | access to field FieldA : Object | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | | H.cs:63:20:63:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:63:20:63:36 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | semmle.label | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | semmle.label | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | semmle.label | access to local variable b1 : B [field FieldB] : Object | | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | semmle.label | access to local variable b1 : B [field FieldB] : Object | | H.cs:65:14:65:22 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:65:14:65:22 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:77:30:77:30 | o : Object | semmle.label | o : Object | | H.cs:77:30:77:30 | o : Object | semmle.label | o : Object | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | semmle.label | [post] access to parameter a : A [field FieldA] : Object | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | semmle.label | [post] access to parameter a : A [field FieldA] : Object | +| H.cs:79:20:79:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | | H.cs:79:20:79:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | +| H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:88:20:88:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | semmle.label | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | semmle.label | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:89:14:89:21 | access to field FieldA | semmle.label | access to field FieldA | +| H.cs:89:14:89:21 | access to field FieldA | semmle.label | access to field FieldA | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | semmle.label | access to local variable b1 : B [field FieldB] : Object | | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | semmle.label | access to local variable b1 : B [field FieldB] : Object | | H.cs:90:14:90:22 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:90:14:90:22 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:102:23:102:23 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | semmle.label | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | semmle.label | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | +| H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | semmle.label | (...) ... : A [field FieldA] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | semmle.label | (...) ... : A [field FieldA] : Object | | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | semmle.label | access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | semmle.label | access to local variable temp : B [field FieldB, field FieldA] : Object | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | semmle.label | access to field FieldB : A [field FieldA] : Object | | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | semmle.label | access to field FieldB : A [field FieldA] : Object | | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:112:20:112:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:112:20:112:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | semmle.label | call to method TransformWrap : B [field FieldB] : Object | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | semmle.label | call to method TransformWrap : B [field FieldB] : Object | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | +| H.cs:114:14:114:21 | access to field FieldB | semmle.label | access to field FieldB | | H.cs:114:14:114:21 | access to field FieldB | semmle.label | access to field FieldB | | H.cs:122:18:122:18 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | semmle.label | call to method Transform : B [field FieldB] : Object | | H.cs:124:16:124:34 | access to field FieldB : Object | semmle.label | access to field FieldB : Object | +| H.cs:124:16:124:34 | access to field FieldB : Object | semmle.label | access to field FieldB : Object | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | semmle.label | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:130:20:130:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:130:20:130:36 | call to method Source : Object | semmle.label | call to method Source : Object | | H.cs:131:14:131:19 | call to method Get | semmle.label | call to method Get | +| H.cs:131:14:131:19 | call to method Get | semmle.label | call to method Get | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | semmle.label | access to local variable a : A [field FieldA] : Object | | H.cs:138:27:138:27 | o : A | semmle.label | o : A | +| H.cs:138:27:138:27 | o : A | semmle.label | o : A | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | semmle.label | [post] access to local variable a : A [field FieldA] : A | | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | semmle.label | [post] access to local variable a : A [field FieldA] : A | | H.cs:141:20:141:25 | ... as ... : A | semmle.label | ... as ... : A | +| H.cs:141:20:141:25 | ... as ... : A | semmle.label | ... as ... : A | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | semmle.label | call to method Transform : B [field FieldB] : A | | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | semmle.label | call to method Transform : B [field FieldB] : A | | H.cs:142:16:142:34 | access to field FieldB : A | semmle.label | access to field FieldB : A | +| H.cs:142:16:142:34 | access to field FieldB : A | semmle.label | access to field FieldB : A | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | semmle.label | access to local variable a : A [field FieldA] : A | | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | semmle.label | access to local variable a : A [field FieldA] : A | | H.cs:147:17:147:39 | call to method Through : A | semmle.label | call to method Through : A | +| H.cs:147:17:147:39 | call to method Through : A | semmle.label | call to method Through : A | +| H.cs:147:25:147:38 | call to method Source : A | semmle.label | call to method Source : A | | H.cs:147:25:147:38 | call to method Source : A | semmle.label | call to method Source : A | | H.cs:148:14:148:14 | access to local variable a | semmle.label | access to local variable a | +| H.cs:148:14:148:14 | access to local variable a | semmle.label | access to local variable a | +| H.cs:153:32:153:32 | o : Object | semmle.label | o : Object | | H.cs:153:32:153:32 | o : Object | semmle.label | o : Object | | H.cs:155:17:155:30 | call to method Source : B | semmle.label | call to method Source : B | +| H.cs:155:17:155:30 | call to method Source : B | semmle.label | call to method Source : B | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | semmle.label | [post] access to local variable b : B [field FieldB] : Object | | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | semmle.label | [post] access to local variable b : B [field FieldB] : Object | | H.cs:156:9:156:9 | access to local variable b : B | semmle.label | access to local variable b : B | +| H.cs:156:9:156:9 | access to local variable b : B | semmle.label | access to local variable b : B | +| H.cs:156:20:156:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | | H.cs:156:20:156:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | semmle.label | [post] access to parameter a : A [field FieldA, field FieldB] : Object | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | semmle.label | [post] access to parameter a : A [field FieldA, field FieldB] : Object | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | semmle.label | [post] access to parameter a : A [field FieldA] : B | | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | semmle.label | [post] access to parameter a : A [field FieldA] : B | | H.cs:157:20:157:20 | access to local variable b : B | semmle.label | access to local variable b : B | +| H.cs:157:20:157:20 | access to local variable b : B | semmle.label | access to local variable b : B | +| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:163:17:163:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:163:17:163:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | semmle.label | [post] access to local variable a : A [field FieldA, field FieldB] : Object | | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | semmle.label | [post] access to local variable a : A [field FieldA, field FieldB] : Object | | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | semmle.label | [post] access to local variable a : A [field FieldA] : B | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | semmle.label | [post] access to local variable a : A [field FieldA] : B | +| H.cs:164:22:164:22 | access to local variable o : Object | semmle.label | access to local variable o : Object | | H.cs:164:22:164:22 | access to local variable o : Object | semmle.label | access to local variable o : Object | | H.cs:165:17:165:27 | (...) ... : B | semmle.label | (...) ... : B | +| H.cs:165:17:165:27 | (...) ... : B | semmle.label | (...) ... : B | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | semmle.label | (...) ... : B [field FieldB] : Object | | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | semmle.label | (...) ... : B [field FieldB] : Object | | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | semmle.label | access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | semmle.label | access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | semmle.label | access to local variable a : A [field FieldA] : B | | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | semmle.label | access to local variable a : A [field FieldA] : B | | H.cs:165:20:165:27 | access to field FieldA : B | semmle.label | access to field FieldA : B | +| H.cs:165:20:165:27 | access to field FieldA : B | semmle.label | access to field FieldA : B | +| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | semmle.label | access to field FieldA : B [field FieldB] : Object | | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | semmle.label | access to field FieldA : B [field FieldB] : Object | | H.cs:166:14:166:14 | access to local variable b | semmle.label | access to local variable b | +| H.cs:166:14:166:14 | access to local variable b | semmle.label | access to local variable b | +| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:167:14:167:21 | access to field FieldB | semmle.label | access to field FieldB | +| H.cs:167:14:167:21 | access to field FieldB | semmle.label | access to field FieldB | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | semmle.label | [post] this access : I [field Field1] : Object | | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | semmle.label | [post] this access : I [field Field1] : Object | | I.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| I.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| I.cs:13:17:13:33 | call to method Source : Object | semmle.label | call to method Source : Object | | I.cs:13:17:13:33 | call to method Source : Object | semmle.label | call to method Source : Object | | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | semmle.label | [post] access to local variable i : I [field Field1] : Object | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | semmle.label | [post] access to local variable i : I [field Field1] : Object | +| I.cs:15:20:15:20 | access to local variable o : Object | semmle.label | access to local variable o : Object | | I.cs:15:20:15:20 | access to local variable o : Object | semmle.label | access to local variable o : Object | | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:18:14:18:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:18:14:18:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | semmle.label | object creation of type I : I [field Field1] : Object | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | semmle.label | object creation of type I : I [field Field1] : Object | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:23:14:23:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:23:14:23:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | semmle.label | [pre-initializer] object creation of type I : I [field Field1] : Object | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | semmle.label | [pre-initializer] object creation of type I : I [field Field1] : Object | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:27:14:27:21 | access to field Field1 | semmle.label | access to field Field1 | +| I.cs:27:14:27:21 | access to field Field1 | semmle.label | access to field Field1 | +| I.cs:31:13:31:29 | call to method Source : Object | semmle.label | call to method Source : Object | | I.cs:31:13:31:29 | call to method Source : Object | semmle.label | call to method Source : Object | | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | semmle.label | [post] access to local variable i : I [field Field1] : Object | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | semmle.label | [post] access to local variable i : I [field Field1] : Object | +| I.cs:32:20:32:20 | access to local variable o : Object | semmle.label | access to local variable o : Object | | I.cs:32:20:32:20 | access to local variable o : Object | semmle.label | access to local variable o : Object | | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | semmle.label | access to local variable i : I [field Field1] : Object | | I.cs:37:23:37:23 | i : I [field Field1] : Object | semmle.label | i : I [field Field1] : Object | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | semmle.label | i : I [field Field1] : Object | +| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | semmle.label | access to parameter i : I [field Field1] : Object | | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | semmle.label | access to parameter i : I [field Field1] : Object | | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | semmle.label | access to parameter i : I [field Field1] : Object | +| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | semmle.label | access to parameter i : I [field Field1] : Object | +| I.cs:40:14:40:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:40:14:40:21 | access to field Field1 | semmle.label | access to field Field1 | | J.cs:14:26:14:30 | field : Object | semmle.label | field : Object | +| J.cs:14:26:14:30 | field : Object | semmle.label | field : Object | +| J.cs:14:40:14:43 | prop : Object | semmle.label | prop : Object | | J.cs:14:40:14:43 | prop : Object | semmle.label | prop : Object | | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | semmle.label | [post] this access : Struct [field Field] : Object | +| J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | semmle.label | [post] this access : Struct [field Field] : Object | +| J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | semmle.label | [post] this access : Struct [property Prop] : Object | | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | semmle.label | [post] this access : Struct [property Prop] : Object | | J.cs:14:66:14:70 | access to parameter field : Object | semmle.label | access to parameter field : Object | +| J.cs:14:66:14:70 | access to parameter field : Object | semmle.label | access to parameter field : Object | +| J.cs:14:73:14:76 | access to parameter prop : Object | semmle.label | access to parameter prop : Object | | J.cs:14:73:14:76 | access to parameter prop : Object | semmle.label | access to parameter prop : Object | | J.cs:21:17:21:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:21:17:21:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | semmle.label | object creation of type RecordClass : RecordClass [property Prop1] : Object | | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | semmle.label | object creation of type RecordClass : RecordClass [property Prop1] : Object | | J.cs:22:34:22:34 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:22:34:22:34 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r1 : RecordClass [property Prop1] : Object | | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r1 : RecordClass [property Prop1] : Object | | J.cs:23:14:23:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:23:14:23:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r2 : RecordClass [property Prop1] : Object | | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r2 : RecordClass [property Prop1] : Object | | J.cs:27:14:27:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:27:14:27:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | semmle.label | ... with { ... } : RecordClass [property Prop2] : Object | | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | semmle.label | ... with { ... } : RecordClass [property Prop2] : Object | | J.cs:30:36:30:52 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:30:36:30:52 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r3 : RecordClass [property Prop1] : Object | | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | semmle.label | access to local variable r3 : RecordClass [property Prop1] : Object | | J.cs:31:14:31:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:31:14:31:21 | access to property Prop1 | semmle.label | access to property Prop1 | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | semmle.label | access to local variable r3 : RecordClass [property Prop2] : Object | | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | semmle.label | access to local variable r3 : RecordClass [property Prop2] : Object | | J.cs:32:14:32:21 | access to property Prop2 | semmle.label | access to property Prop2 | +| J.cs:32:14:32:21 | access to property Prop2 | semmle.label | access to property Prop2 | +| J.cs:41:17:41:33 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:41:17:41:33 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | semmle.label | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | semmle.label | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:42:35:42:35 | access to local variable o : Object | semmle.label | access to local variable o : Object | | J.cs:42:35:42:35 | access to local variable o : Object | semmle.label | access to local variable o : Object | | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r1 : RecordStruct [property Prop1] : Object | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r1 : RecordStruct [property Prop1] : Object | +| J.cs:43:14:43:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:43:14:43:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r2 : RecordStruct [property Prop1] : Object | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r2 : RecordStruct [property Prop1] : Object | +| J.cs:47:14:47:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:47:14:47:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | semmle.label | ... with { ... } : RecordStruct [property Prop2] : Object | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | semmle.label | ... with { ... } : RecordStruct [property Prop2] : Object | +| J.cs:50:36:50:52 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:50:36:50:52 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r3 : RecordStruct [property Prop1] : Object | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | semmle.label | access to local variable r3 : RecordStruct [property Prop1] : Object | +| J.cs:51:14:51:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:51:14:51:21 | access to property Prop1 | semmle.label | access to property Prop1 | | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | semmle.label | access to local variable r3 : RecordStruct [property Prop2] : Object | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | semmle.label | access to local variable r3 : RecordStruct [property Prop2] : Object | +| J.cs:52:14:52:21 | access to property Prop2 | semmle.label | access to property Prop2 | | J.cs:52:14:52:21 | access to property Prop2 | semmle.label | access to property Prop2 | | J.cs:61:17:61:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:61:17:61:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | semmle.label | object creation of type Struct : Struct [field Field] : Object | | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | semmle.label | object creation of type Struct : Struct [field Field] : Object | | J.cs:62:29:62:29 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | semmle.label | access to local variable s2 : Struct [field Field] : Object | | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | semmle.label | access to local variable s2 : Struct [field Field] : Object | | J.cs:65:14:65:21 | access to field Field | semmle.label | access to field Field | +| J.cs:65:14:65:21 | access to field Field | semmle.label | access to field Field | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | semmle.label | ... with { ... } : Struct [property Prop] : Object | | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | semmle.label | ... with { ... } : Struct [property Prop] : Object | | J.cs:68:35:68:51 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:68:35:68:51 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | semmle.label | access to local variable s3 : Struct [field Field] : Object | | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | semmle.label | access to local variable s3 : Struct [field Field] : Object | | J.cs:69:14:69:21 | access to field Field | semmle.label | access to field Field | +| J.cs:69:14:69:21 | access to field Field | semmle.label | access to field Field | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | semmle.label | access to local variable s3 : Struct [property Prop] : Object | | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | semmle.label | access to local variable s3 : Struct [property Prop] : Object | | J.cs:70:14:70:20 | access to property Prop | semmle.label | access to property Prop | +| J.cs:70:14:70:20 | access to property Prop | semmle.label | access to property Prop | +| J.cs:79:17:79:33 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:79:17:79:33 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | semmle.label | object creation of type Struct : Struct [property Prop] : Object | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | semmle.label | object creation of type Struct : Struct [property Prop] : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | semmle.label | access to local variable o : Object | | J.cs:80:35:80:35 | access to local variable o : Object | semmle.label | access to local variable o : Object | | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | semmle.label | access to local variable s2 : Struct [property Prop] : Object | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | semmle.label | access to local variable s2 : Struct [property Prop] : Object | +| J.cs:84:14:84:20 | access to property Prop | semmle.label | access to property Prop | | J.cs:84:14:84:20 | access to property Prop | semmle.label | access to property Prop | | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | semmle.label | ... with { ... } : Struct [field Field] : Object | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | semmle.label | ... with { ... } : Struct [field Field] : Object | +| J.cs:86:36:86:52 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:86:36:86:52 | call to method Source : Object | semmle.label | call to method Source : Object | | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | semmle.label | access to local variable s3 : Struct [field Field] : Object | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | semmle.label | access to local variable s3 : Struct [field Field] : Object | +| J.cs:87:14:87:21 | access to field Field | semmle.label | access to field Field | | J.cs:87:14:87:21 | access to field Field | semmle.label | access to field Field | | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | semmle.label | access to local variable s3 : Struct [property Prop] : Object | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | semmle.label | access to local variable s3 : Struct [property Prop] : Object | +| J.cs:88:14:88:20 | access to property Prop | semmle.label | access to property Prop | | J.cs:88:14:88:20 | access to property Prop | semmle.label | access to property Prop | | J.cs:97:17:97:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:97:17:97:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | semmle.label | { ..., ... } : <>__AnonType0 [property X] : Object | | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | semmle.label | { ..., ... } : <>__AnonType0 [property X] : Object | | J.cs:99:28:99:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:99:28:99:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a2 : <>__AnonType0 [property X] : Object | | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a2 : <>__AnonType0 [property X] : Object | | J.cs:102:14:102:17 | access to property X | semmle.label | access to property X | +| J.cs:102:14:102:17 | access to property X | semmle.label | access to property X | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | semmle.label | ... with { ... } : <>__AnonType0 [property Y] : Object | | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | semmle.label | ... with { ... } : <>__AnonType0 [property Y] : Object | | J.cs:105:32:105:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:105:32:105:48 | call to method Source : Object | semmle.label | call to method Source : Object | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a3 : <>__AnonType0 [property X] : Object | | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | semmle.label | access to local variable a3 : <>__AnonType0 [property X] : Object | | J.cs:106:14:106:17 | access to property X | semmle.label | access to property X | +| J.cs:106:14:106:17 | access to property X | semmle.label | access to property X | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | semmle.label | access to local variable a3 : <>__AnonType0 [property Y] : Object | | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | semmle.label | access to local variable a3 : <>__AnonType0 [property Y] : Object | | J.cs:107:14:107:17 | access to property Y | semmle.label | access to property Y | +| J.cs:107:14:107:17 | access to property Y | semmle.label | access to property Y | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | semmle.label | [post] access to local variable a : Int32[] [element] : Int32 | | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | semmle.label | [post] access to local variable a : Int32[] [element] : Int32 | | J.cs:119:20:119:34 | call to method Source : Int32 | semmle.label | call to method Source : Int32 | +| J.cs:119:20:119:34 | call to method Source : Int32 | semmle.label | call to method Source : Int32 | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | semmle.label | access to local variable a : Int32[] [element] : Int32 | | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | semmle.label | access to local variable a : Int32[] [element] : Int32 | | J.cs:125:14:125:17 | (...) ... | semmle.label | (...) ... | +| J.cs:125:14:125:17 | (...) ... | semmle.label | (...) ... | +| J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | | J.cs:125:14:125:17 | access to array element : Int32 | semmle.label | access to array element : Int32 | subpaths | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | | A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | A.cs:14:14:14:20 | call to method Get | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | A.cs:14:14:14:20 | call to method Get | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | A.cs:15:14:15:42 | call to method Get | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | A.cs:15:14:15:42 | call to method Get | | A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | | A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | | A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | | A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | | A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | | A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | | B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | | B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | | D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | | D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | | D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | | D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | D.cs:39:14:39:26 | access to property TrivialProp | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | D.cs:39:14:39:26 | access to property TrivialProp | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | D.cs:41:14:41:26 | access to property ComplexProp | | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | D.cs:41:14:41:26 | access to property ComplexProp | | D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | D.cs:45:14:45:26 | access to property TrivialProp | | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | D.cs:45:14:45:26 | access to property TrivialProp | | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | D.cs:47:14:47:26 | access to property ComplexProp | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | D.cs:47:14:47:26 | access to property ComplexProp | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | | F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | | G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | G.cs:39:14:39:35 | call to method GetElem | | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | G.cs:39:14:39:35 | call to method GetElem | | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | H.cs:131:14:131:19 | call to method Get | | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | H.cs:131:14:131:19 | call to method Get | | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | H.cs:142:16:142:34 | access to field FieldB : A | H.cs:147:17:147:39 | call to method Through : A | | H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | H.cs:142:16:142:34 | access to field FieldB : A | H.cs:147:17:147:39 | call to method Through : A | | H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | | J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | | J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | #select | A.cs:7:14:7:16 | access to field c | A.cs:5:17:5:28 | call to method Source : C | A.cs:7:14:7:16 | access to field c | $@ | A.cs:5:17:5:28 | call to method Source : C | call to method Source : C | +| A.cs:7:14:7:16 | access to field c | A.cs:5:17:5:28 | call to method Source : C | A.cs:7:14:7:16 | access to field c | $@ | A.cs:5:17:5:28 | call to method Source : C | call to method Source : C | +| A.cs:14:14:14:20 | call to method Get | A.cs:13:15:13:29 | call to method Source : C1 | A.cs:14:14:14:20 | call to method Get | $@ | A.cs:13:15:13:29 | call to method Source : C1 | call to method Source : C1 | | A.cs:14:14:14:20 | call to method Get | A.cs:13:15:13:29 | call to method Source : C1 | A.cs:14:14:14:20 | call to method Get | $@ | A.cs:13:15:13:29 | call to method Source : C1 | call to method Source : C1 | | A.cs:15:14:15:42 | call to method Get | A.cs:15:21:15:34 | call to method Source : C | A.cs:15:14:15:42 | call to method Get | $@ | A.cs:15:21:15:34 | call to method Source : C | call to method Source : C | +| A.cs:15:14:15:42 | call to method Get | A.cs:15:21:15:34 | call to method Source : C | A.cs:15:14:15:42 | call to method Get | $@ | A.cs:15:21:15:34 | call to method Source : C | call to method Source : C | +| A.cs:24:14:24:17 | access to field c | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:24:14:24:17 | access to field c | $@ | A.cs:22:25:22:37 | call to method Source : C2 | call to method Source : C2 | | A.cs:24:14:24:17 | access to field c | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:24:14:24:17 | access to field c | $@ | A.cs:22:25:22:37 | call to method Source : C2 | call to method Source : C2 | | A.cs:33:14:33:17 | access to field c | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:33:14:33:17 | access to field c | $@ | A.cs:31:29:31:41 | call to method Source : C2 | call to method Source : C2 | +| A.cs:33:14:33:17 | access to field c | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:33:14:33:17 | access to field c | $@ | A.cs:31:29:31:41 | call to method Source : C2 | call to method Source : C2 | +| A.cs:64:18:64:26 | access to field a | A.cs:55:17:55:28 | call to method Source : A | A.cs:64:18:64:26 | access to field a | $@ | A.cs:55:17:55:28 | call to method Source : A | call to method Source : A | | A.cs:64:18:64:26 | access to field a | A.cs:55:17:55:28 | call to method Source : A | A.cs:64:18:64:26 | access to field a | $@ | A.cs:55:17:55:28 | call to method Source : A | call to method Source : A | | A.cs:89:14:89:16 | access to field c | A.cs:83:15:83:26 | call to method Source : C | A.cs:89:14:89:16 | access to field c | $@ | A.cs:83:15:83:26 | call to method Source : C | call to method Source : C | +| A.cs:89:14:89:16 | access to field c | A.cs:83:15:83:26 | call to method Source : C | A.cs:89:14:89:16 | access to field c | $@ | A.cs:83:15:83:26 | call to method Source : C | call to method Source : C | +| A.cs:106:14:106:16 | access to field b | A.cs:98:30:98:43 | call to method Source : B | A.cs:106:14:106:16 | access to field b | $@ | A.cs:98:30:98:43 | call to method Source : B | call to method Source : B | | A.cs:106:14:106:16 | access to field b | A.cs:98:30:98:43 | call to method Source : B | A.cs:106:14:106:16 | access to field b | $@ | A.cs:98:30:98:43 | call to method Source : B | call to method Source : B | | A.cs:106:14:106:16 | access to field b | A.cs:104:17:104:30 | call to method Source : B | A.cs:106:14:106:16 | access to field b | $@ | A.cs:104:17:104:30 | call to method Source : B | call to method Source : B | +| A.cs:106:14:106:16 | access to field b | A.cs:104:17:104:30 | call to method Source : B | A.cs:106:14:106:16 | access to field b | $@ | A.cs:104:17:104:30 | call to method Source : B | call to method Source : B | +| A.cs:107:14:107:18 | access to field c | A.cs:97:19:97:32 | call to method Source : C | A.cs:107:14:107:18 | access to field c | $@ | A.cs:97:19:97:32 | call to method Source : C | call to method Source : C | | A.cs:107:14:107:18 | access to field c | A.cs:97:19:97:32 | call to method Source : C | A.cs:107:14:107:18 | access to field c | $@ | A.cs:97:19:97:32 | call to method Source : C | call to method Source : C | | A.cs:108:14:108:16 | access to field c | A.cs:97:19:97:32 | call to method Source : C | A.cs:108:14:108:16 | access to field c | $@ | A.cs:97:19:97:32 | call to method Source : C | call to method Source : C | +| A.cs:108:14:108:16 | access to field c | A.cs:97:19:97:32 | call to method Source : C | A.cs:108:14:108:16 | access to field c | $@ | A.cs:97:19:97:32 | call to method Source : C | call to method Source : C | +| A.cs:119:14:119:30 | access to field head | A.cs:113:17:113:29 | call to method Source : B | A.cs:119:14:119:30 | access to field head | $@ | A.cs:113:17:113:29 | call to method Source : B | call to method Source : B | | A.cs:119:14:119:30 | access to field head | A.cs:113:17:113:29 | call to method Source : B | A.cs:119:14:119:30 | access to field head | $@ | A.cs:113:17:113:29 | call to method Source : B | call to method Source : B | | A.cs:123:18:123:23 | access to field head | A.cs:113:17:113:29 | call to method Source : B | A.cs:123:18:123:23 | access to field head | $@ | A.cs:113:17:113:29 | call to method Source : B | call to method Source : B | +| A.cs:123:18:123:23 | access to field head | A.cs:113:17:113:29 | call to method Source : B | A.cs:123:18:123:23 | access to field head | $@ | A.cs:113:17:113:29 | call to method Source : B | call to method Source : B | +| B.cs:8:14:8:26 | access to field elem1 | B.cs:5:17:5:31 | call to method Source : Elem | B.cs:8:14:8:26 | access to field elem1 | $@ | B.cs:5:17:5:31 | call to method Source : Elem | call to method Source : Elem | | B.cs:8:14:8:26 | access to field elem1 | B.cs:5:17:5:31 | call to method Source : Elem | B.cs:8:14:8:26 | access to field elem1 | $@ | B.cs:5:17:5:31 | call to method Source : Elem | call to method Source : Elem | | B.cs:18:14:18:26 | access to field elem2 | B.cs:14:17:14:31 | call to method Source : Elem | B.cs:18:14:18:26 | access to field elem2 | $@ | B.cs:14:17:14:31 | call to method Source : Elem | call to method Source : Elem | +| B.cs:18:14:18:26 | access to field elem2 | B.cs:14:17:14:31 | call to method Source : Elem | B.cs:18:14:18:26 | access to field elem2 | $@ | B.cs:14:17:14:31 | call to method Source : Elem | call to method Source : Elem | +| C.cs:23:14:23:15 | access to field s1 | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:23:14:23:15 | access to field s1 | $@ | C.cs:3:23:3:37 | call to method Source : Elem | call to method Source : Elem | | C.cs:23:14:23:15 | access to field s1 | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:23:14:23:15 | access to field s1 | $@ | C.cs:3:23:3:37 | call to method Source : Elem | call to method Source : Elem | | C.cs:24:14:24:15 | access to field s2 | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:24:14:24:15 | access to field s2 | $@ | C.cs:4:32:4:46 | call to method Source : Elem | call to method Source : Elem | +| C.cs:24:14:24:15 | access to field s2 | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:24:14:24:15 | access to field s2 | $@ | C.cs:4:32:4:46 | call to method Source : Elem | call to method Source : Elem | +| C.cs:25:14:25:15 | access to field s3 | C.cs:18:19:18:33 | call to method Source : Elem | C.cs:25:14:25:15 | access to field s3 | $@ | C.cs:18:19:18:33 | call to method Source : Elem | call to method Source : Elem | | C.cs:25:14:25:15 | access to field s3 | C.cs:18:19:18:33 | call to method Source : Elem | C.cs:25:14:25:15 | access to field s3 | $@ | C.cs:18:19:18:33 | call to method Source : Elem | call to method Source : Elem | | C.cs:26:14:26:15 | access to field s4 | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | $@ | C.cs:6:30:6:44 | call to method Source : Elem | call to method Source : Elem | +| C.cs:26:14:26:15 | access to field s4 | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | $@ | C.cs:6:30:6:44 | call to method Source : Elem | call to method Source : Elem | +| C.cs:27:14:27:15 | access to property s5 | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:27:14:27:15 | access to property s5 | $@ | C.cs:7:37:7:51 | call to method Source : Elem | call to method Source : Elem | | C.cs:27:14:27:15 | access to property s5 | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:27:14:27:15 | access to property s5 | $@ | C.cs:7:37:7:51 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | +| C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | +| C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | | C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | | C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | +| C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | +| D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:39:14:39:26 | access to property TrivialProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:39:14:39:26 | access to property TrivialProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | +| D.cs:39:14:39:26 | access to property TrivialProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:39:14:39:26 | access to property TrivialProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | +| D.cs:40:14:40:31 | access to field trivialPropField | D.cs:37:26:37:42 | call to method Source : Object | D.cs:40:14:40:31 | access to field trivialPropField | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | | D.cs:40:14:40:31 | access to field trivialPropField | D.cs:37:26:37:42 | call to method Source : Object | D.cs:40:14:40:31 | access to field trivialPropField | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | | D.cs:41:14:41:26 | access to property ComplexProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:41:14:41:26 | access to property ComplexProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | +| D.cs:41:14:41:26 | access to property ComplexProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:41:14:41:26 | access to property ComplexProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | +| D.cs:45:14:45:26 | access to property TrivialProp | D.cs:43:32:43:48 | call to method Source : Object | D.cs:45:14:45:26 | access to property TrivialProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | D.cs:45:14:45:26 | access to property TrivialProp | D.cs:43:32:43:48 | call to method Source : Object | D.cs:45:14:45:26 | access to property TrivialProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | D.cs:46:14:46:31 | access to field trivialPropField | D.cs:43:32:43:48 | call to method Source : Object | D.cs:46:14:46:31 | access to field trivialPropField | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | +| D.cs:46:14:46:31 | access to field trivialPropField | D.cs:43:32:43:48 | call to method Source : Object | D.cs:46:14:46:31 | access to field trivialPropField | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | +| D.cs:47:14:47:26 | access to property ComplexProp | D.cs:43:32:43:48 | call to method Source : Object | D.cs:47:14:47:26 | access to property ComplexProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | D.cs:47:14:47:26 | access to property ComplexProp | D.cs:43:32:43:48 | call to method Source : Object | D.cs:47:14:47:26 | access to property ComplexProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | +| E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | +| F.cs:12:14:12:21 | access to field Field1 | F.cs:10:17:10:33 | call to method Source : Object | F.cs:12:14:12:21 | access to field Field1 | $@ | F.cs:10:17:10:33 | call to method Source : Object | call to method Source : Object | | F.cs:12:14:12:21 | access to field Field1 | F.cs:10:17:10:33 | call to method Source : Object | F.cs:12:14:12:21 | access to field Field1 | $@ | F.cs:10:17:10:33 | call to method Source : Object | call to method Source : Object | | F.cs:17:14:17:21 | access to field Field2 | F.cs:15:26:15:42 | call to method Source : Object | F.cs:17:14:17:21 | access to field Field2 | $@ | F.cs:15:26:15:42 | call to method Source : Object | call to method Source : Object | +| F.cs:17:14:17:21 | access to field Field2 | F.cs:15:26:15:42 | call to method Source : Object | F.cs:17:14:17:21 | access to field Field2 | $@ | F.cs:15:26:15:42 | call to method Source : Object | call to method Source : Object | +| F.cs:20:14:20:21 | access to field Field1 | F.cs:19:32:19:48 | call to method Source : Object | F.cs:20:14:20:21 | access to field Field1 | $@ | F.cs:19:32:19:48 | call to method Source : Object | call to method Source : Object | | F.cs:20:14:20:21 | access to field Field1 | F.cs:19:32:19:48 | call to method Source : Object | F.cs:20:14:20:21 | access to field Field1 | $@ | F.cs:19:32:19:48 | call to method Source : Object | call to method Source : Object | | F.cs:25:14:25:21 | access to field Field2 | F.cs:23:32:23:48 | call to method Source : Object | F.cs:25:14:25:21 | access to field Field2 | $@ | F.cs:23:32:23:48 | call to method Source : Object | call to method Source : Object | +| F.cs:25:14:25:21 | access to field Field2 | F.cs:23:32:23:48 | call to method Source : Object | F.cs:25:14:25:21 | access to field Field2 | $@ | F.cs:23:32:23:48 | call to method Source : Object | call to method Source : Object | +| F.cs:33:14:33:16 | access to property X | F.cs:30:17:30:33 | call to method Source : Object | F.cs:33:14:33:16 | access to property X | $@ | F.cs:30:17:30:33 | call to method Source : Object | call to method Source : Object | | F.cs:33:14:33:16 | access to property X | F.cs:30:17:30:33 | call to method Source : Object | F.cs:33:14:33:16 | access to property X | $@ | F.cs:30:17:30:33 | call to method Source : Object | call to method Source : Object | | G.cs:39:14:39:35 | call to method GetElem | G.cs:7:18:7:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:7:18:7:32 | call to method Source : Elem | call to method Source : Elem | +| G.cs:39:14:39:35 | call to method GetElem | G.cs:7:18:7:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:7:18:7:32 | call to method Source : Elem | call to method Source : Elem | +| G.cs:39:14:39:35 | call to method GetElem | G.cs:15:18:15:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:15:18:15:32 | call to method Source : Elem | call to method Source : Elem | | G.cs:39:14:39:35 | call to method GetElem | G.cs:15:18:15:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:15:18:15:32 | call to method Source : Elem | call to method Source : Elem | | G.cs:39:14:39:35 | call to method GetElem | G.cs:23:18:23:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:23:18:23:32 | call to method Source : Elem | call to method Source : Elem | +| G.cs:39:14:39:35 | call to method GetElem | G.cs:23:18:23:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:23:18:23:32 | call to method Source : Elem | call to method Source : Elem | +| G.cs:39:14:39:35 | call to method GetElem | G.cs:31:18:31:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:31:18:31:32 | call to method Source : Elem | call to method Source : Elem | | G.cs:39:14:39:35 | call to method GetElem | G.cs:31:18:31:32 | call to method Source : Elem | G.cs:39:14:39:35 | call to method GetElem | $@ | G.cs:31:18:31:32 | call to method Source : Elem | call to method Source : Elem | | G.cs:52:14:52:31 | access to field Elem | G.cs:44:18:44:32 | call to method Source : Elem | G.cs:52:14:52:31 | access to field Elem | $@ | G.cs:44:18:44:32 | call to method Source : Elem | call to method Source : Elem | +| G.cs:52:14:52:31 | access to field Elem | G.cs:44:18:44:32 | call to method Source : Elem | G.cs:52:14:52:31 | access to field Elem | $@ | G.cs:44:18:44:32 | call to method Source : Elem | call to method Source : Elem | +| H.cs:25:14:25:25 | access to field FieldA | H.cs:23:20:23:36 | call to method Source : Object | H.cs:25:14:25:25 | access to field FieldA | $@ | H.cs:23:20:23:36 | call to method Source : Object | call to method Source : Object | | H.cs:25:14:25:25 | access to field FieldA | H.cs:23:20:23:36 | call to method Source : Object | H.cs:25:14:25:25 | access to field FieldA | $@ | H.cs:23:20:23:36 | call to method Source : Object | call to method Source : Object | | H.cs:45:14:45:21 | access to field FieldB | H.cs:43:20:43:36 | call to method Source : Object | H.cs:45:14:45:21 | access to field FieldB | $@ | H.cs:43:20:43:36 | call to method Source : Object | call to method Source : Object | +| H.cs:45:14:45:21 | access to field FieldB | H.cs:43:20:43:36 | call to method Source : Object | H.cs:45:14:45:21 | access to field FieldB | $@ | H.cs:43:20:43:36 | call to method Source : Object | call to method Source : Object | +| H.cs:65:14:65:22 | access to field FieldB | H.cs:63:20:63:36 | call to method Source : Object | H.cs:65:14:65:22 | access to field FieldB | $@ | H.cs:63:20:63:36 | call to method Source : Object | call to method Source : Object | | H.cs:65:14:65:22 | access to field FieldB | H.cs:63:20:63:36 | call to method Source : Object | H.cs:65:14:65:22 | access to field FieldB | $@ | H.cs:63:20:63:36 | call to method Source : Object | call to method Source : Object | | H.cs:89:14:89:21 | access to field FieldA | H.cs:88:20:88:36 | call to method Source : Object | H.cs:89:14:89:21 | access to field FieldA | $@ | H.cs:88:20:88:36 | call to method Source : Object | call to method Source : Object | +| H.cs:89:14:89:21 | access to field FieldA | H.cs:88:20:88:36 | call to method Source : Object | H.cs:89:14:89:21 | access to field FieldA | $@ | H.cs:88:20:88:36 | call to method Source : Object | call to method Source : Object | +| H.cs:90:14:90:22 | access to field FieldB | H.cs:88:20:88:36 | call to method Source : Object | H.cs:90:14:90:22 | access to field FieldB | $@ | H.cs:88:20:88:36 | call to method Source : Object | call to method Source : Object | | H.cs:90:14:90:22 | access to field FieldB | H.cs:88:20:88:36 | call to method Source : Object | H.cs:90:14:90:22 | access to field FieldB | $@ | H.cs:88:20:88:36 | call to method Source : Object | call to method Source : Object | | H.cs:114:14:114:21 | access to field FieldB | H.cs:112:20:112:36 | call to method Source : Object | H.cs:114:14:114:21 | access to field FieldB | $@ | H.cs:112:20:112:36 | call to method Source : Object | call to method Source : Object | +| H.cs:114:14:114:21 | access to field FieldB | H.cs:112:20:112:36 | call to method Source : Object | H.cs:114:14:114:21 | access to field FieldB | $@ | H.cs:112:20:112:36 | call to method Source : Object | call to method Source : Object | +| H.cs:131:14:131:19 | call to method Get | H.cs:130:20:130:36 | call to method Source : Object | H.cs:131:14:131:19 | call to method Get | $@ | H.cs:130:20:130:36 | call to method Source : Object | call to method Source : Object | | H.cs:131:14:131:19 | call to method Get | H.cs:130:20:130:36 | call to method Source : Object | H.cs:131:14:131:19 | call to method Get | $@ | H.cs:130:20:130:36 | call to method Source : Object | call to method Source : Object | | H.cs:148:14:148:14 | access to local variable a | H.cs:147:25:147:38 | call to method Source : A | H.cs:148:14:148:14 | access to local variable a | $@ | H.cs:147:25:147:38 | call to method Source : A | call to method Source : A | +| H.cs:148:14:148:14 | access to local variable a | H.cs:147:25:147:38 | call to method Source : A | H.cs:148:14:148:14 | access to local variable a | $@ | H.cs:147:25:147:38 | call to method Source : A | call to method Source : A | +| H.cs:166:14:166:14 | access to local variable b | H.cs:155:17:155:30 | call to method Source : B | H.cs:166:14:166:14 | access to local variable b | $@ | H.cs:155:17:155:30 | call to method Source : B | call to method Source : B | | H.cs:166:14:166:14 | access to local variable b | H.cs:155:17:155:30 | call to method Source : B | H.cs:166:14:166:14 | access to local variable b | $@ | H.cs:155:17:155:30 | call to method Source : B | call to method Source : B | | H.cs:167:14:167:21 | access to field FieldB | H.cs:163:17:163:35 | call to method Source : Object | H.cs:167:14:167:21 | access to field FieldB | $@ | H.cs:163:17:163:35 | call to method Source : Object | call to method Source : Object | +| H.cs:167:14:167:21 | access to field FieldB | H.cs:163:17:163:35 | call to method Source : Object | H.cs:167:14:167:21 | access to field FieldB | $@ | H.cs:163:17:163:35 | call to method Source : Object | call to method Source : Object | +| I.cs:18:14:18:21 | access to field Field1 | I.cs:13:17:13:33 | call to method Source : Object | I.cs:18:14:18:21 | access to field Field1 | $@ | I.cs:13:17:13:33 | call to method Source : Object | call to method Source : Object | | I.cs:18:14:18:21 | access to field Field1 | I.cs:13:17:13:33 | call to method Source : Object | I.cs:18:14:18:21 | access to field Field1 | $@ | I.cs:13:17:13:33 | call to method Source : Object | call to method Source : Object | | I.cs:23:14:23:21 | access to field Field1 | I.cs:7:18:7:34 | call to method Source : Object | I.cs:23:14:23:21 | access to field Field1 | $@ | I.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| I.cs:23:14:23:21 | access to field Field1 | I.cs:7:18:7:34 | call to method Source : Object | I.cs:23:14:23:21 | access to field Field1 | $@ | I.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| I.cs:27:14:27:21 | access to field Field1 | I.cs:7:18:7:34 | call to method Source : Object | I.cs:27:14:27:21 | access to field Field1 | $@ | I.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | | I.cs:27:14:27:21 | access to field Field1 | I.cs:7:18:7:34 | call to method Source : Object | I.cs:27:14:27:21 | access to field Field1 | $@ | I.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | | I.cs:40:14:40:21 | access to field Field1 | I.cs:31:13:31:29 | call to method Source : Object | I.cs:40:14:40:21 | access to field Field1 | $@ | I.cs:31:13:31:29 | call to method Source : Object | call to method Source : Object | +| I.cs:40:14:40:21 | access to field Field1 | I.cs:31:13:31:29 | call to method Source : Object | I.cs:40:14:40:21 | access to field Field1 | $@ | I.cs:31:13:31:29 | call to method Source : Object | call to method Source : Object | +| J.cs:23:14:23:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:23:14:23:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | | J.cs:23:14:23:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:23:14:23:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | | J.cs:27:14:27:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:27:14:27:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | +| J.cs:27:14:27:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:27:14:27:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | +| J.cs:31:14:31:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:31:14:31:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | | J.cs:31:14:31:21 | access to property Prop1 | J.cs:21:17:21:33 | call to method Source : Object | J.cs:31:14:31:21 | access to property Prop1 | $@ | J.cs:21:17:21:33 | call to method Source : Object | call to method Source : Object | | J.cs:32:14:32:21 | access to property Prop2 | J.cs:30:36:30:52 | call to method Source : Object | J.cs:32:14:32:21 | access to property Prop2 | $@ | J.cs:30:36:30:52 | call to method Source : Object | call to method Source : Object | +| J.cs:32:14:32:21 | access to property Prop2 | J.cs:30:36:30:52 | call to method Source : Object | J.cs:32:14:32:21 | access to property Prop2 | $@ | J.cs:30:36:30:52 | call to method Source : Object | call to method Source : Object | +| J.cs:43:14:43:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:43:14:43:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | | J.cs:43:14:43:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:43:14:43:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | | J.cs:47:14:47:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:47:14:47:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | +| J.cs:47:14:47:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:47:14:47:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | +| J.cs:51:14:51:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:51:14:51:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | | J.cs:51:14:51:21 | access to property Prop1 | J.cs:41:17:41:33 | call to method Source : Object | J.cs:51:14:51:21 | access to property Prop1 | $@ | J.cs:41:17:41:33 | call to method Source : Object | call to method Source : Object | | J.cs:52:14:52:21 | access to property Prop2 | J.cs:50:36:50:52 | call to method Source : Object | J.cs:52:14:52:21 | access to property Prop2 | $@ | J.cs:50:36:50:52 | call to method Source : Object | call to method Source : Object | +| J.cs:52:14:52:21 | access to property Prop2 | J.cs:50:36:50:52 | call to method Source : Object | J.cs:52:14:52:21 | access to property Prop2 | $@ | J.cs:50:36:50:52 | call to method Source : Object | call to method Source : Object | +| J.cs:65:14:65:21 | access to field Field | J.cs:61:17:61:33 | call to method Source : Object | J.cs:65:14:65:21 | access to field Field | $@ | J.cs:61:17:61:33 | call to method Source : Object | call to method Source : Object | | J.cs:65:14:65:21 | access to field Field | J.cs:61:17:61:33 | call to method Source : Object | J.cs:65:14:65:21 | access to field Field | $@ | J.cs:61:17:61:33 | call to method Source : Object | call to method Source : Object | | J.cs:69:14:69:21 | access to field Field | J.cs:61:17:61:33 | call to method Source : Object | J.cs:69:14:69:21 | access to field Field | $@ | J.cs:61:17:61:33 | call to method Source : Object | call to method Source : Object | +| J.cs:69:14:69:21 | access to field Field | J.cs:61:17:61:33 | call to method Source : Object | J.cs:69:14:69:21 | access to field Field | $@ | J.cs:61:17:61:33 | call to method Source : Object | call to method Source : Object | +| J.cs:70:14:70:20 | access to property Prop | J.cs:68:35:68:51 | call to method Source : Object | J.cs:70:14:70:20 | access to property Prop | $@ | J.cs:68:35:68:51 | call to method Source : Object | call to method Source : Object | | J.cs:70:14:70:20 | access to property Prop | J.cs:68:35:68:51 | call to method Source : Object | J.cs:70:14:70:20 | access to property Prop | $@ | J.cs:68:35:68:51 | call to method Source : Object | call to method Source : Object | | J.cs:84:14:84:20 | access to property Prop | J.cs:79:17:79:33 | call to method Source : Object | J.cs:84:14:84:20 | access to property Prop | $@ | J.cs:79:17:79:33 | call to method Source : Object | call to method Source : Object | +| J.cs:84:14:84:20 | access to property Prop | J.cs:79:17:79:33 | call to method Source : Object | J.cs:84:14:84:20 | access to property Prop | $@ | J.cs:79:17:79:33 | call to method Source : Object | call to method Source : Object | +| J.cs:87:14:87:21 | access to field Field | J.cs:86:36:86:52 | call to method Source : Object | J.cs:87:14:87:21 | access to field Field | $@ | J.cs:86:36:86:52 | call to method Source : Object | call to method Source : Object | | J.cs:87:14:87:21 | access to field Field | J.cs:86:36:86:52 | call to method Source : Object | J.cs:87:14:87:21 | access to field Field | $@ | J.cs:86:36:86:52 | call to method Source : Object | call to method Source : Object | | J.cs:88:14:88:20 | access to property Prop | J.cs:79:17:79:33 | call to method Source : Object | J.cs:88:14:88:20 | access to property Prop | $@ | J.cs:79:17:79:33 | call to method Source : Object | call to method Source : Object | +| J.cs:88:14:88:20 | access to property Prop | J.cs:79:17:79:33 | call to method Source : Object | J.cs:88:14:88:20 | access to property Prop | $@ | J.cs:79:17:79:33 | call to method Source : Object | call to method Source : Object | +| J.cs:102:14:102:17 | access to property X | J.cs:97:17:97:33 | call to method Source : Object | J.cs:102:14:102:17 | access to property X | $@ | J.cs:97:17:97:33 | call to method Source : Object | call to method Source : Object | | J.cs:102:14:102:17 | access to property X | J.cs:97:17:97:33 | call to method Source : Object | J.cs:102:14:102:17 | access to property X | $@ | J.cs:97:17:97:33 | call to method Source : Object | call to method Source : Object | | J.cs:106:14:106:17 | access to property X | J.cs:97:17:97:33 | call to method Source : Object | J.cs:106:14:106:17 | access to property X | $@ | J.cs:97:17:97:33 | call to method Source : Object | call to method Source : Object | +| J.cs:106:14:106:17 | access to property X | J.cs:97:17:97:33 | call to method Source : Object | J.cs:106:14:106:17 | access to property X | $@ | J.cs:97:17:97:33 | call to method Source : Object | call to method Source : Object | +| J.cs:107:14:107:17 | access to property Y | J.cs:105:32:105:48 | call to method Source : Object | J.cs:107:14:107:17 | access to property Y | $@ | J.cs:105:32:105:48 | call to method Source : Object | call to method Source : Object | | J.cs:107:14:107:17 | access to property Y | J.cs:105:32:105:48 | call to method Source : Object | J.cs:107:14:107:17 | access to property Y | $@ | J.cs:105:32:105:48 | call to method Source : Object | call to method Source : Object | | J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | +| J.cs:125:14:125:17 | (...) ... | J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:125:14:125:17 | (...) ... | $@ | J.cs:119:20:119:34 | call to method Source : Int32 | call to method Source : Int32 | diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.ql b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.ql index b01c0f7fcaf..9336e1b28be 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.ql @@ -3,9 +3,10 @@ */ import csharp -import DefaultValueFlow::PathGraph import TestUtilities.InlineFlowTest +import DefaultFlowTest +import PathGraph -from DefaultValueFlow::PathNode source, DefaultValueFlow::PathNode sink -where DefaultValueFlow::flowPath(source, sink) +from PathNode source, PathNode sink +where flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index bce1914e42b..767e66301ce 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -267,7 +267,7 @@ edges | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:31:514:32 | [post] access to local variable y1 : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:36:514:37 | [post] access to local variable y2 : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:42:514:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | +| GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:544:20:544:20 | [post] access to local variable x : SimpleClass [field field] : String | @@ -286,8 +286,8 @@ edges | GlobalDataFlow.cs:515:15:515:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:515:15:515:22 | access to field field | | GlobalDataFlow.cs:516:15:516:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:22 | access to field field | | GlobalDataFlow.cs:517:15:517:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:22 | access to field field | -| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:21 | access to field field | +| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | +| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:21 | access to field field | | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:534:15:534:15 | access to local variable y : SimpleClass [field field] : String | | GlobalDataFlow.cs:533:15:533:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | @@ -579,8 +579,8 @@ nodes | GlobalDataFlow.cs:516:15:516:22 | access to field field | semmle.label | access to field field | | GlobalDataFlow.cs:517:15:517:16 | access to local variable y3 : SimpleClass [field field] : String | semmle.label | access to local variable y3 : SimpleClass [field field] : String | | GlobalDataFlow.cs:517:15:517:22 | access to field field | semmle.label | access to field field | -| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | semmle.label | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | semmle.label | access to local variable x : SimpleClass [field field] : String | +| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | semmle.label | [post] access to local variable x : SubSimpleClass [field field] : String | +| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | semmle.label | access to local variable x : SubSimpleClass [field field] : String | | GlobalDataFlow.cs:526:15:526:21 | access to field field | semmle.label | access to field field | | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | semmle.label | [post] access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | semmle.label | [post] access to local variable y : SimpleClass [field field] : String | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 5dae90d82a6..dec8a134712 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -293,7 +293,7 @@ edges | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:31:514:32 | [post] access to local variable y1 : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:36:514:37 | [post] access to local variable y2 : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:514:42:514:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | +| GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | | GlobalDataFlow.cs:500:9:500:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:544:20:544:20 | [post] access to local variable x : SimpleClass [field field] : String | @@ -312,8 +312,8 @@ edges | GlobalDataFlow.cs:515:15:515:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:515:15:515:22 | access to field field | | GlobalDataFlow.cs:516:15:516:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:22 | access to field field | | GlobalDataFlow.cs:517:15:517:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:22 | access to field field | -| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:21 | access to field field | +| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | +| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:526:15:526:21 | access to field field | | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:534:15:534:15 | access to local variable y : SimpleClass [field field] : String | | GlobalDataFlow.cs:533:15:533:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | @@ -633,8 +633,8 @@ nodes | GlobalDataFlow.cs:516:15:516:22 | access to field field | semmle.label | access to field field | | GlobalDataFlow.cs:517:15:517:16 | access to local variable y3 : SimpleClass [field field] : String | semmle.label | access to local variable y3 : SimpleClass [field field] : String | | GlobalDataFlow.cs:517:15:517:22 | access to field field | semmle.label | access to field field | -| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SimpleClass [field field] : String | semmle.label | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SimpleClass [field field] : String | semmle.label | access to local variable x : SimpleClass [field field] : String | +| GlobalDataFlow.cs:525:33:525:33 | [post] access to local variable x : SubSimpleClass [field field] : String | semmle.label | [post] access to local variable x : SubSimpleClass [field field] : String | +| GlobalDataFlow.cs:526:15:526:15 | access to local variable x : SubSimpleClass [field field] : String | semmle.label | access to local variable x : SubSimpleClass [field field] : String | | GlobalDataFlow.cs:526:15:526:21 | access to field field | semmle.label | access to field field | | GlobalDataFlow.cs:532:20:532:20 | [post] access to parameter x : SimpleClass [field field] : String | semmle.label | [post] access to parameter x : SimpleClass [field field] : String | | GlobalDataFlow.cs:532:25:532:25 | [post] access to local variable y : SimpleClass [field field] : String | semmle.label | [post] access to local variable y : SimpleClass [field field] : String | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 46defadf531..70b7ae5b121 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1087,7 +1087,7 @@ summary | System.Collections.Generic;List<>;false;Add;(System.Object);;Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;Add;(T);;Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this].Element;value;manual | -| System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | System.Collections.Generic;List<>;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections.Generic;List<>;false;CopyTo;(T[]);;Argument[this];Argument[0].Element;taint;df-generated | @@ -1101,13 +1101,11 @@ summary | System.Collections.Generic;List<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual | | System.Collections.Generic;List<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.List<>+Enumerator.Current];value;manual | | System.Collections.Generic;List<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Collections.Generic;List<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;List<>;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;List;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Generic;List<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Generic;List<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Generic;List<>;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections.Generic;List<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | @@ -1231,7 +1229,7 @@ summary | System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Generic;SortedSet<>;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Collections.Generic.IComparer);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet<>;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | @@ -1290,7 +1288,6 @@ summary | System.Collections.Immutable;ImmutableArray<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;MoveToImmutable;();;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableArray<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;set_Item;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableArray<>+Enumerator;false;get_Current;();;Argument[this];ReturnValue;taint;df-generated | @@ -1487,12 +1484,10 @@ summary | System.Collections.Immutable;ImmutableList<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current];value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>+Builder;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;ToImmutable;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>+Builder;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;get_SyncRoot;();;Argument[this];ReturnValue;taint;df-generated | @@ -1520,7 +1515,7 @@ summary | System.Collections.Immutable;ImmutableList<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual | | System.Collections.Immutable;ImmutableList<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableList<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current];value;manual | -| System.Collections.Immutable;ImmutableList<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | @@ -1537,8 +1532,8 @@ summary | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[this];ReturnValue;taint;df-generated | @@ -1676,7 +1671,7 @@ summary | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;ToImmutable;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;taint;df-generated | @@ -1703,7 +1698,7 @@ summary | System.Collections.Immutable;ImmutableSortedSet<>;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;Remove;(T);;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[this];ReturnValue;taint;df-generated | @@ -1897,7 +1892,7 @@ summary | System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_OldItems;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Specialized;OrderedDictionary;false;Add;(System.Object,System.Object);;Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual | | System.Collections.Specialized;OrderedDictionary;false;Add;(System.Object,System.Object);;Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual | -| System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Specialized;OrderedDictionary;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | System.Collections.Specialized;OrderedDictionary;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections.Specialized;OrderedDictionary;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | @@ -1938,21 +1933,19 @@ summary | System.Collections;ArrayList;false;AddRange;(System.Collections.ICollection);;Argument[0].Element;Argument[this].Element;value;manual | | System.Collections;ArrayList;false;ArrayList;(System.Collections.ICollection);;Argument[0].Element;Argument[this];taint;df-generated | | System.Collections;ArrayList;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;ArrayList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;ArrayList;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;CopyTo;(System.Array);;Argument[this];Argument[0].Element;taint;df-generated | | System.Collections;ArrayList;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;ArrayList;false;FixedSize;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;FixedSize;(System.Collections.IList);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections;ArrayList;false;GetEnumerator;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections;ArrayList;false;InsertRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[this].Element;value;manual | | System.Collections;ArrayList;false;ReadOnly;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;ReadOnly;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;Repeat;(System.Object,System.Int32);;Argument[0];ReturnValue.Element;value;manual | -| System.Collections;ArrayList;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections;ArrayList;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;SetRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[this];taint;df-generated | | System.Collections;ArrayList;false;Synchronized;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;Synchronized;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated | @@ -1960,7 +1953,7 @@ summary | System.Collections;ArrayList;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections;ArrayList;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections;BitArray;false;And;(System.Collections.BitArray);;Argument[this];ReturnValue;value;df-generated | -| System.Collections;BitArray;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;BitArray;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;BitArray;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;BitArray;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections;BitArray;false;LeftShift;(System.Int32);;Argument[this];ReturnValue;value;df-generated | @@ -2007,7 +2000,7 @@ summary | System.Collections;Hashtable;false;Add;(System.Object,System.Object);;Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual | | System.Collections;Hashtable;false;Add;(System.Object,System.Object);;Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual | | System.Collections;Hashtable;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;Hashtable;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Hashtable;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Hashtable;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;Hashtable;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections;Hashtable;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | @@ -2055,7 +2048,7 @@ summary | System.Collections;IList;true;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Collections;IList;true;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections;Queue;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;Queue;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Queue;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Queue;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;Queue;false;Dequeue;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;Queue;false;Enqueue;(System.Object);;Argument[0];Argument[this];taint;df-generated | @@ -2071,7 +2064,7 @@ summary | System.Collections;SortedList;false;Add;(System.Object,System.Object);;Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual | | System.Collections;SortedList;false;Add;(System.Object,System.Object);;Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual | | System.Collections;SortedList;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;SortedList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;SortedList;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;SortedList;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;SortedList;false;GetByIndex;(System.Int32);;Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value;manual | | System.Collections;SortedList;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | @@ -2093,7 +2086,7 @@ summary | System.Collections;SortedList;false;set_Item;(System.Object,System.Object);;Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual | | System.Collections;SortedList;false;set_Item;(System.Object,System.Object);;Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];value;manual | | System.Collections;Stack;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;Stack;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Stack;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Stack;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Collections;Stack;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections;Stack;false;Peek;();;Argument[this].Element;ReturnValue;value;manual | @@ -3090,7 +3083,7 @@ summary | System.Data;InternalDataCollectionBase;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System.Data;InternalDataCollectionBase;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Data;InternalDataCollectionBase;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | -| System.Data;PropertyCollection;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Data;PropertyCollection;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Data;TypedTableBase<>;false;Cast<>;();;Argument[this];ReturnValue;taint;df-generated | | System.Data;TypedTableBase<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual | | System.Data;TypedTableBase<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | @@ -7346,8 +7339,6 @@ summary | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Insert;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | @@ -10702,7 +10693,7 @@ summary | System;Array;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | | System;Array;false;Clear;(System.Array);;Argument[0].WithoutElement;Argument[0];value;manual | | System;Array;false;Clear;(System.Array,System.Int32,System.Int32);;Argument[0].WithoutElement;Argument[0];value;manual | -| System;Array;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System;Array;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System;Array;false;CopyTo;(System.Array,System.Int32);;Argument[this].Element;Argument[0].Element;value;manual | | System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[this].Element;Argument[0].Element;value;manual | | System;Array;false;Fill<>;(T[],T);;Argument[1];Argument[0].Element;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 4ae26655169..e1af1614843 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -707,7 +707,7 @@ summary | System.Collections.Generic;LinkedListNode<>;false;set_Value;(T);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;List<>+Enumerator;false;get_Current;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Generic;List<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this].Element;value;manual | -| System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;List<>;false;AsReadOnly;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;CopyTo;(T[]);;Argument[this];Argument[0].Element;taint;df-generated | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;manual | | System.Collections.Generic;List<>;false;Find;(System.Predicate);;Argument[this].Element;ReturnValue;value;manual | @@ -716,11 +716,9 @@ summary | System.Collections.Generic;List<>;false;FindLast;(System.Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;manual | | System.Collections.Generic;List<>;false;FindLast;(System.Predicate);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Generic;List<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.List<>+Enumerator.Current];value;manual | -| System.Collections.Generic;List<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;List<>;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | | System.Collections.Generic;List<>;false;List;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Generic;List<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Generic;List<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;List<>;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections.Generic;PriorityQueue<,>+UnorderedItemsCollection+Enumerator;false;get_Current;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Generic;PriorityQueue<,>+UnorderedItemsCollection;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | @@ -786,7 +784,7 @@ summary | System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Generic;SortedSet<>;false;GetViewBetween;(T,T);;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Generic;SortedSet<>;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Generic;SortedSet<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Collections.Generic.IComparer);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet<>;false;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet<>;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | @@ -837,7 +835,6 @@ summary | System.Collections.Immutable;ImmutableArray<>+Builder;false;AddRange<>;(TDerived[]);;Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator<>.Current];value;manual | | System.Collections.Immutable;ImmutableArray<>+Builder;false;MoveToImmutable;();;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableArray<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableArray<>+Enumerator;false;get_Current;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableArray<>;false;Add;(T);;Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableArray<>;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated | @@ -971,10 +968,8 @@ summary | System.Collections.Immutable;ImmutableList<>+Builder;false;FindLast;(System.Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;FindLast;(System.Predicate);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current];value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>+Builder;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Immutable;ImmutableList<>+Builder;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>+Builder;false;ToImmutable;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>+Builder;false;get_SyncRoot;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>+Enumerator;false;get_Current;();;Argument[this];ReturnValue;taint;df-generated | @@ -992,7 +987,7 @@ summary | System.Collections.Immutable;ImmutableList<>;false;FindLast;(System.Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;manual | | System.Collections.Immutable;ImmutableList<>;false;FindLast;(System.Predicate);;Argument[this].Element;ReturnValue;value;manual | | System.Collections.Immutable;ImmutableList<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableList<>+Enumerator.Current];value;manual | -| System.Collections.Immutable;ImmutableList<>;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;Insert;(System.Int32,T);;Argument[1];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;InsertRange;(System.Int32,System.Collections.Generic.IEnumerable);;Argument[1].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;Remove;(T);;Argument[this];ReturnValue;taint;df-generated | @@ -1008,8 +1003,8 @@ summary | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;Replace;(T,T,System.Collections.Generic.IEqualityComparer);;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableList<>;false;Reverse;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[1];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList<>;false;SetItem;(System.Int32,T);;Argument[this];ReturnValue;taint;df-generated | @@ -1106,7 +1101,7 @@ summary | System.Collections.Immutable;ImmutableSortedSet;false;ToImmutableSortedSet<>;(System.Collections.Immutable.ImmutableSortedSet+Builder);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;IntersectWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;ToImmutable;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>+Builder;false;TryGetValue;(T,T);;Argument[0];ReturnValue;taint;df-generated | @@ -1124,7 +1119,7 @@ summary | System.Collections.Immutable;ImmutableSortedSet<>;false;GetEnumerator;();;Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedSet<>+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedSet<>;false;Intersect;(System.Collections.Generic.IEnumerable);;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;Remove;(T);;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableSortedSet<>;false;Reverse;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet<>;false;SymmetricExcept;(System.Collections.Generic.IEnumerable);;Argument[this];ReturnValue;taint;df-generated | @@ -1237,7 +1232,7 @@ summary | System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;NotifyCollectionChangedEventArgs;(System.Collections.Specialized.NotifyCollectionChangedAction,System.Object,System.Object,System.Int32);;Argument[2];Argument[this];taint;df-generated | | System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_NewItems;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections.Specialized;NotifyCollectionChangedEventArgs;false;get_OldItems;();;Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Specialized;OrderedDictionary;false;AsReadOnly;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Specialized;OrderedDictionary;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Int32,System.Collections.IEqualityComparer);;Argument[1];Argument[this];taint;df-generated | | System.Collections.Specialized;OrderedDictionary;false;OrderedDictionary;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[0];Argument[this];taint;df-generated | @@ -1258,24 +1253,22 @@ summary | System.Collections;ArrayList;false;Adapter;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;AddRange;(System.Collections.ICollection);;Argument[0].Element;Argument[this].Element;value;manual | | System.Collections;ArrayList;false;ArrayList;(System.Collections.ICollection);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections;ArrayList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;ArrayList;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;CopyTo;(System.Array);;Argument[this];Argument[0].Element;taint;df-generated | | System.Collections;ArrayList;false;FixedSize;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;FixedSize;(System.Collections.IList);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;GetEnumerator;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;ArrayList;false;GetRange;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;InsertRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[this].Element;value;manual | | System.Collections;ArrayList;false;ReadOnly;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;ReadOnly;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;Repeat;(System.Object,System.Int32);;Argument[0];ReturnValue.Element;value;manual | -| System.Collections;ArrayList;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Collections;ArrayList;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections;ArrayList;false;SetRange;(System.Int32,System.Collections.ICollection);;Argument[1].Element;Argument[this];taint;df-generated | | System.Collections;ArrayList;false;Synchronized;(System.Collections.ArrayList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;Synchronized;(System.Collections.IList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;ArrayList;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections;BitArray;false;And;(System.Collections.BitArray);;Argument[this];ReturnValue;value;df-generated | -| System.Collections;BitArray;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;BitArray;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;BitArray;false;LeftShift;(System.Int32);;Argument[this];ReturnValue;value;df-generated | | System.Collections;BitArray;false;Not;();;Argument[this];ReturnValue;value;df-generated | | System.Collections;BitArray;false;Or;(System.Collections.BitArray);;Argument[this];ReturnValue;value;df-generated | @@ -1300,7 +1293,7 @@ summary | System.Collections;DictionaryEntry;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;DictionaryEntry;false;set_Key;(System.Object);;Argument[0];Argument[this];taint;df-generated | | System.Collections;DictionaryEntry;false;set_Value;(System.Object);;Argument[0];Argument[this];taint;df-generated | -| System.Collections;Hashtable;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Hashtable;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Hashtable;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;Hashtable;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.Collections;Hashtable;false;Hashtable;(System.Collections.IDictionary);;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Key];value;manual | @@ -1341,7 +1334,7 @@ summary | System.Collections;IList;true;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System.Collections;IList;true;set_Item;(System.Int32,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Collections;Queue;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;Queue;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Queue;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Queue;false;Dequeue;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;Queue;false;Enqueue;(System.Object);;Argument[0];Argument[this];taint;df-generated | | System.Collections;Queue;false;Peek;();;Argument[this].Element;ReturnValue;value;manual | @@ -1350,7 +1343,7 @@ summary | System.Collections;Queue;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections;ReadOnlyCollectionBase;false;get_InnerList;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;ReadOnlyCollectionBase;false;get_SyncRoot;();;Argument[this];ReturnValue;taint;df-generated | -| System.Collections;SortedList;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;SortedList;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;SortedList;false;GetByIndex;(System.Int32);;Argument[this].Element.Property[System.Collections.Generic.KeyValuePair<,>.Value];ReturnValue;value;manual | | System.Collections;SortedList;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | | System.Collections;SortedList;false;GetKey;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | @@ -1365,7 +1358,7 @@ summary | System.Collections;SortedList;false;Synchronized;(System.Collections.SortedList);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections;SortedList;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Collections;Stack;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | -| System.Collections;Stack;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections;Stack;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections;Stack;false;Peek;();;Argument[this].Element;ReturnValue;value;manual | | System.Collections;Stack;false;Pop;();;Argument[this].Element;ReturnValue;value;manual | | System.Collections;Stack;false;Push;(System.Object);;Argument[0];Argument[this];taint;df-generated | @@ -2244,7 +2237,7 @@ summary | System.Data;ITableMappingCollection;true;get_Item;(System.String);;Argument[this].Element;ReturnValue;value;manual | | System.Data;ITableMappingCollection;true;set_Item;(System.String,System.Object);;Argument[1];Argument[this].Element;value;manual | | System.Data;InternalDataCollectionBase;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | -| System.Data;PropertyCollection;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Data;PropertyCollection;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System.Data;TypedTableBase<>;false;Cast<>;();;Argument[this];ReturnValue;taint;df-generated | | System.Data;TypedTableBaseExtensions;false;AsEnumerable<>;(System.Data.TypedTableBase);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Data;TypedTableBaseExtensions;false;ElementAtOrDefault<>;(System.Data.TypedTableBase,System.Int32);;Argument[0].Element;ReturnValue;value;manual | @@ -6001,8 +5994,6 @@ summary | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;SetResult;(TResult);;Argument[0];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder<>;false;get_Task;();;Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;();;Argument[0].Element;ReturnValue.Element;value;manual | -| System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;Reverse;(System.Int32,System.Int32);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder<>;false;get_SyncRoot;();;Argument[this];ReturnValue;value;df-generated | | System.Runtime.CompilerServices;RuntimeWrappedException;false;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);;Argument[this];Argument[0];taint;df-generated | | System.Runtime.CompilerServices;RuntimeWrappedException;false;RuntimeWrappedException;(System.Object);;Argument[0];Argument[this];taint;df-generated | @@ -9028,7 +9019,7 @@ summary | System;Array;false;AsReadOnly<>;(T[]);;Argument[0].Element;ReturnValue.Element;value;manual | | System;Array;false;Clear;(System.Array);;Argument[0].WithoutElement;Argument[0];value;manual | | System;Array;false;Clear;(System.Array,System.Int32,System.Int32);;Argument[0].WithoutElement;Argument[0];value;manual | -| System;Array;false;Clone;();;Argument[0].Element;ReturnValue.Element;value;manual | +| System;Array;false;Clone;();;Argument[this].Element;ReturnValue.Element;value;manual | | System;Array;false;CopyTo;(System.Array,System.Int64);;Argument[this].Element;Argument[0].Element;value;manual | | System;Array;false;Fill<>;(T[],T);;Argument[1];Argument[0].Element;taint;df-generated | | System;Array;false;Fill<>;(T[],T,System.Int32,System.Int32);;Argument[1];Argument[0].Element;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected index 7b173a98e41..2bddf573b6a 100644 --- a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected @@ -1,95 +1,186 @@ failures +testFailures edges | Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | +| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | +| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | | Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | | Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | +| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | +| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | | Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | | Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | +| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | +| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | | Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | | Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | +| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | | Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | | Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | +| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | | Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | | Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | +| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | | Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | | Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | +| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | | Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | | Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | +| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | +| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | | Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | | Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | | Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | | Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | +| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | | Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | | Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | +| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | | Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | | Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | +| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | +| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | | Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | | Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | +| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | +| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | | Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | | Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | | Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | | Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | +| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | +| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | | Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | | Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | +| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | +| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | | Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | | Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | | Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | | Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | +| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | +| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | | Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | nodes | Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | +| Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | +| Operator.cs:9:50:9:50 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:9:50:9:50 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:16:38:16:38 | x : C | semmle.label | x : C | +| Operator.cs:16:38:16:38 | x : C | semmle.label | x : C | +| Operator.cs:16:49:16:49 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:16:49:16:49 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:18:51:18:51 | y : C | semmle.label | y : C | +| Operator.cs:18:51:18:51 | y : C | semmle.label | y : C | +| Operator.cs:18:57:18:57 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:18:57:18:57 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:19:38:19:38 | x : C | semmle.label | x : C | +| Operator.cs:19:38:19:38 | x : C | semmle.label | x : C | +| Operator.cs:19:49:19:49 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:19:49:19:49 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:21:43:21:43 | y : C | semmle.label | y : C | +| Operator.cs:21:43:21:43 | y : C | semmle.label | y : C | +| Operator.cs:21:49:21:49 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:21:49:21:49 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:22:51:22:51 | y : C | semmle.label | y : C | +| Operator.cs:22:51:22:51 | y : C | semmle.label | y : C | +| Operator.cs:22:57:22:57 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:22:57:22:57 | access to parameter y : C | semmle.label | access to parameter y : C | | Operator.cs:27:17:27:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:27:17:27:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:29:17:29:17 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:29:17:29:17 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:29:17:29:21 | call to operator + : C | semmle.label | call to operator + : C | +| Operator.cs:29:17:29:21 | call to operator + : C | semmle.label | call to operator + : C | +| Operator.cs:30:14:30:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:30:14:30:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:35:17:35:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:35:17:35:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:37:27:37:27 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:37:27:37:27 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:37:27:37:31 | call to operator - : C | semmle.label | call to operator - : C | +| Operator.cs:37:27:37:31 | call to operator - : C | semmle.label | call to operator - : C | +| Operator.cs:38:14:38:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:38:14:38:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:44:17:44:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:44:17:44:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:45:25:45:29 | call to operator checked - : C | semmle.label | call to operator checked - : C | | Operator.cs:45:25:45:29 | call to operator checked - : C | semmle.label | call to operator checked - : C | | Operator.cs:45:29:45:29 | access to local variable y : C | semmle.label | access to local variable y : C | +| Operator.cs:45:29:45:29 | access to local variable y : C | semmle.label | access to local variable y : C | +| Operator.cs:46:14:46:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:46:14:46:14 | access to local variable z | semmle.label | access to local variable z | | Operator.cs:49:28:49:28 | x : C | semmle.label | x : C | +| Operator.cs:49:28:49:28 | x : C | semmle.label | x : C | +| Operator.cs:51:17:51:17 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:51:17:51:17 | access to parameter x : C | semmle.label | access to parameter x : C | | Operator.cs:51:17:51:21 | call to operator * : C | semmle.label | call to operator * : C | +| Operator.cs:51:17:51:21 | call to operator * : C | semmle.label | call to operator * : C | +| Operator.cs:52:14:52:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:52:14:52:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:57:17:57:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:57:17:57:28 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:59:15:59:15 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:59:15:59:15 | access to local variable x : C | semmle.label | access to local variable x : C | | Operator.cs:62:33:62:33 | y : C | semmle.label | y : C | +| Operator.cs:62:33:62:33 | y : C | semmle.label | y : C | +| Operator.cs:64:17:64:21 | call to operator / : C | semmle.label | call to operator / : C | | Operator.cs:64:17:64:21 | call to operator / : C | semmle.label | call to operator / : C | | Operator.cs:64:21:64:21 | access to parameter y : C | semmle.label | access to parameter y : C | +| Operator.cs:64:21:64:21 | access to parameter y : C | semmle.label | access to parameter y : C | +| Operator.cs:65:14:65:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:65:14:65:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:71:17:71:29 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:71:17:71:29 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:72:18:72:18 | access to local variable y : C | semmle.label | access to local variable y : C | | Operator.cs:72:18:72:18 | access to local variable y : C | semmle.label | access to local variable y : C | | Operator.cs:75:33:75:33 | y : C | semmle.label | y : C | +| Operator.cs:75:33:75:33 | y : C | semmle.label | y : C | +| Operator.cs:77:25:77:29 | call to operator checked / : C | semmle.label | call to operator checked / : C | | Operator.cs:77:25:77:29 | call to operator checked / : C | semmle.label | call to operator checked / : C | | Operator.cs:77:29:77:29 | access to parameter y : C | semmle.label | access to parameter y : C | +| Operator.cs:77:29:77:29 | access to parameter y : C | semmle.label | access to parameter y : C | +| Operator.cs:78:14:78:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:78:14:78:14 | (...) ... | semmle.label | (...) ... | | Operator.cs:84:17:84:29 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:84:17:84:29 | call to method Source : C | semmle.label | call to method Source : C | +| Operator.cs:85:18:85:18 | access to local variable y : C | semmle.label | access to local variable y : C | | Operator.cs:85:18:85:18 | access to local variable y : C | semmle.label | access to local variable y : C | subpaths | Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | Operator.cs:29:17:29:21 | call to operator + : C | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | Operator.cs:29:17:29:21 | call to operator + : C | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | Operator.cs:37:27:37:31 | call to operator - : C | | Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | Operator.cs:37:27:37:31 | call to operator - : C | | Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | | Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | | Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | | Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | #select | Operator.cs:30:14:30:14 | access to local variable z | Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:30:14:30:14 | access to local variable z | $@ | Operator.cs:27:17:27:28 | call to method Source : C | call to method Source : C | +| Operator.cs:30:14:30:14 | access to local variable z | Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:30:14:30:14 | access to local variable z | $@ | Operator.cs:27:17:27:28 | call to method Source : C | call to method Source : C | +| Operator.cs:38:14:38:14 | access to local variable z | Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:38:14:38:14 | access to local variable z | $@ | Operator.cs:35:17:35:28 | call to method Source : C | call to method Source : C | | Operator.cs:38:14:38:14 | access to local variable z | Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:38:14:38:14 | access to local variable z | $@ | Operator.cs:35:17:35:28 | call to method Source : C | call to method Source : C | | Operator.cs:46:14:46:14 | access to local variable z | Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:46:14:46:14 | access to local variable z | $@ | Operator.cs:44:17:44:28 | call to method Source : C | call to method Source : C | +| Operator.cs:46:14:46:14 | access to local variable z | Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:46:14:46:14 | access to local variable z | $@ | Operator.cs:44:17:44:28 | call to method Source : C | call to method Source : C | +| Operator.cs:52:14:52:14 | (...) ... | Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:52:14:52:14 | (...) ... | $@ | Operator.cs:57:17:57:28 | call to method Source : C | call to method Source : C | | Operator.cs:52:14:52:14 | (...) ... | Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:52:14:52:14 | (...) ... | $@ | Operator.cs:57:17:57:28 | call to method Source : C | call to method Source : C | | Operator.cs:65:14:65:14 | (...) ... | Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:65:14:65:14 | (...) ... | $@ | Operator.cs:71:17:71:29 | call to method Source : C | call to method Source : C | +| Operator.cs:65:14:65:14 | (...) ... | Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:65:14:65:14 | (...) ... | $@ | Operator.cs:71:17:71:29 | call to method Source : C | call to method Source : C | +| Operator.cs:78:14:78:14 | (...) ... | Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:78:14:78:14 | (...) ... | $@ | Operator.cs:84:17:84:29 | call to method Source : C | call to method Source : C | | Operator.cs:78:14:78:14 | (...) ... | Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:78:14:78:14 | (...) ... | $@ | Operator.cs:84:17:84:29 | call to method Source : C | call to method Source : C | diff --git a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.ql b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.ql index b01c0f7fcaf..9336e1b28be 100644 --- a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.ql @@ -3,9 +3,10 @@ */ import csharp -import DefaultValueFlow::PathGraph import TestUtilities.InlineFlowTest +import DefaultFlowTest +import PathGraph -from DefaultValueFlow::PathNode source, DefaultValueFlow::PathNode sink -where DefaultValueFlow::flowPath(source, sink) +from PathNode source, PathNode sink +where flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected index f965891244c..f2ab31c12b3 100644 --- a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected @@ -1,4 +1,5 @@ failures +testFailures edges nodes subpaths diff --git a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql index b01c0f7fcaf..9336e1b28be 100644 --- a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql +++ b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql @@ -3,9 +3,10 @@ */ import csharp -import DefaultValueFlow::PathGraph import TestUtilities.InlineFlowTest +import DefaultFlowTest +import PathGraph -from DefaultValueFlow::PathNode source, DefaultValueFlow::PathNode sink -where DefaultValueFlow::flowPath(source, sink) +from PathNode source, PathNode sink +where flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index dae85aa45aa..10b9a4b66ac 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -1,233 +1,462 @@ failures +testFailures edges | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | | Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | | Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | | Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | | Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | | Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | | Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | | Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | | Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | | Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | | Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | | Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | | Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | | Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | +| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | | Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | nodes | Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:8:18:8:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:11:9:11:27 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | | Tuples.cs:11:9:11:27 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | | Tuples.cs:12:14:12:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:12:14:12:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:14:14:14:14 | access to local variable c | semmle.label | access to local variable c | | Tuples.cs:14:14:14:14 | access to local variable c | semmle.label | access to local variable c | | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | | Tuples.cs:16:9:16:23 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | | Tuples.cs:16:9:16:23 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:17:14:17:14 | access to local variable a | semmle.label | access to local variable a | | Tuples.cs:17:14:17:14 | access to local variable a | semmle.label | access to local variable a | | Tuples.cs:19:14:19:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:19:14:19:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | semmle.label | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | semmle.label | SSA def(p) : Object | | Tuples.cs:21:9:21:26 | SSA def(p) : Object | semmle.label | SSA def(p) : Object | | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | semmle.label | SSA def(q) : ValueTuple [field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | semmle.label | SSA def(q) : ValueTuple [field Item2] : Object | +| Tuples.cs:22:14:22:14 | access to local variable p | semmle.label | access to local variable p | | Tuples.cs:22:14:22:14 | access to local variable p | semmle.label | access to local variable p | | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | semmle.label | access to local variable q : ValueTuple [field Item2] : Object | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | semmle.label | access to local variable q : ValueTuple [field Item2] : Object | +| Tuples.cs:24:14:24:20 | access to field Item2 | semmle.label | access to field Item2 | | Tuples.cs:24:14:24:20 | access to field Item2 | semmle.label | access to field Item2 | | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:26:14:26:20 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:26:14:26:20 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | +| Tuples.cs:27:14:27:16 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:27:14:27:16 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | semmle.label | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | semmle.label | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | semmle.label | access to field Item2 : ValueTuple [field Item2] : Object | | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | semmle.label | access to field Item2 : ValueTuple [field Item2] : Object | | Tuples.cs:29:14:29:26 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:29:14:29:26 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:34:18:34:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:34:18:34:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:35:18:35:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | semmle.label | (..., ...) : ValueTuple> [field Item1] : Object | | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | semmle.label | (..., ...) : ValueTuple> [field Item10] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | semmle.label | (..., ...) : ValueTuple> [field Item10] : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | semmle.label | access to local variable x : ValueTuple> [field Item1] : Object | | Tuples.cs:38:14:38:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:38:14:38:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | semmle.label | access to local variable x : ValueTuple> [field Item10] : Object | | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | semmle.label | access to local variable x : ValueTuple> [field Item10] : Object | | Tuples.cs:40:14:40:21 | access to field Item10 | semmle.label | access to field Item10 | +| Tuples.cs:40:14:40:21 | access to field Item10 | semmle.label | access to field Item10 | +| Tuples.cs:45:17:45:33 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:45:17:45:33 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | semmle.label | (...) ... : ValueTuple [field Item1] : String | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | semmle.label | (...) ... : ValueTuple [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | semmle.label | (..., ...) : ValueTuple [field Item1] : String | | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | semmle.label | (..., ...) : ValueTuple [field Item1] : String | | Tuples.cs:46:48:46:48 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | semmle.label | access to local variable x : ValueTuple [field Item1] : String | | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | semmle.label | access to local variable x : ValueTuple [field Item1] : String | | Tuples.cs:47:14:47:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:47:14:47:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:57:18:57:34 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:57:18:57:34 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:58:18:58:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | | Tuples.cs:59:18:59:19 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | | Tuples.cs:59:26:59:27 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | semmle.label | SSA def(t) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | semmle.label | SSA def(t) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | semmle.label | access to local variable t : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | semmle.label | access to local variable t : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:63:22:63:28 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:63:22:63:28 | access to field Item1 | semmle.label | access to field Item1 | | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | semmle.label | access to field Item2 : ValueTuple [field Item2] : String | | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | semmle.label | access to field Item2 : ValueTuple [field Item2] : String | | Tuples.cs:64:22:64:34 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:64:22:64:34 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | | Tuples.cs:67:23:67:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | semmle.label | SSA def(c) : String | | Tuples.cs:67:30:67:30 | SSA def(c) : String | semmle.label | SSA def(c) : String | | Tuples.cs:68:22:68:22 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:68:22:68:22 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:69:22:69:22 | access to local variable c | semmle.label | access to local variable c | | Tuples.cs:69:22:69:22 | access to local variable c | semmle.label | access to local variable c | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | semmle.label | (..., ...) : ValueTuple [field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item1] : String | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | semmle.label | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | semmle.label | SSA def(p) : String | | Tuples.cs:87:23:87:23 | SSA def(p) : String | semmle.label | SSA def(p) : String | | Tuples.cs:87:30:87:30 | SSA def(r) : String | semmle.label | SSA def(r) : String | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | semmle.label | SSA def(r) : String | +| Tuples.cs:89:18:89:18 | access to local variable p | semmle.label | access to local variable p | | Tuples.cs:89:18:89:18 | access to local variable p | semmle.label | access to local variable p | | Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | +| Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | +| Tuples.cs:99:17:99:33 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:99:17:99:33 | call to method Source : String | semmle.label | call to method Source : String | | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | semmle.label | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | semmle.label | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | semmle.label | access to local variable o : String | | Tuples.cs:100:24:100:24 | access to local variable o : String | semmle.label | access to local variable o : String | | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | | Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | | Tuples.cs:118:17:118:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | semmle.label | SSA def(x1) : Object | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | semmle.label | SSA def(x1) : Object | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | | Tuples.cs:121:28:121:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:122:14:122:15 | access to local variable x1 | semmle.label | access to local variable x1 | | Tuples.cs:122:14:122:15 | access to local variable x1 | semmle.label | access to local variable x1 | | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | semmle.label | SSA def(x2) : Object | | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | semmle.label | SSA def(x2) : Object | | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | semmle.label | (..., ...) : ValueTuple [field Item1] : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | | Tuples.cs:125:25:125:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | | Tuples.cs:126:14:126:15 | access to local variable x2 | semmle.label | access to local variable x2 | +| Tuples.cs:126:14:126:15 | access to local variable x2 | semmle.label | access to local variable x2 | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | semmle.label | SSA def(y3) : Object | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | semmle.label | SSA def(y3) : Object | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:129:31:129:31 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:130:14:130:15 | access to local variable y3 | semmle.label | access to local variable y3 | | Tuples.cs:130:14:130:15 | access to local variable y3 | semmle.label | access to local variable y3 | | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | semmle.label | SSA def(y4) : Object | | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | semmle.label | SSA def(y4) : Object | | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | semmle.label | (..., ...) : ValueTuple [field Item2] : Object | | Tuples.cs:133:28:133:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | | Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | subpaths #select | Tuples.cs:12:14:12:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:12:14:12:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:12:14:12:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:12:14:12:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:14:14:14:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:14:14:14:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:14:14:14:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:14:14:14:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:17:14:17:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:17:14:17:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:17:14:17:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:17:14:17:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:19:14:19:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:19:14:19:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:19:14:19:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:19:14:19:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:22:14:22:14 | access to local variable p | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:22:14:22:14 | access to local variable p | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:22:14:22:14 | access to local variable p | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:22:14:22:14 | access to local variable p | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:24:14:24:20 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:24:14:24:20 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:24:14:24:20 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:24:14:24:20 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:26:14:26:20 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:26:14:26:20 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:26:14:26:20 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:26:14:26:20 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:27:14:27:16 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:27:14:27:16 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:27:14:27:16 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:27:14:27:16 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:29:14:29:26 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:29:14:29:26 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:29:14:29:26 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:29:14:29:26 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:38:14:38:20 | access to field Item1 | Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:38:14:38:20 | access to field Item1 | $@ | Tuples.cs:34:18:34:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:38:14:38:20 | access to field Item1 | Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:38:14:38:20 | access to field Item1 | $@ | Tuples.cs:34:18:34:34 | call to method Source : Object | call to method Source : Object | | Tuples.cs:40:14:40:21 | access to field Item10 | Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:40:14:40:21 | access to field Item10 | $@ | Tuples.cs:35:18:35:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:40:14:40:21 | access to field Item10 | Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:40:14:40:21 | access to field Item10 | $@ | Tuples.cs:35:18:35:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:47:14:47:20 | access to field Item1 | Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:47:14:47:20 | access to field Item1 | $@ | Tuples.cs:45:17:45:33 | call to method Source : String | call to method Source : String | | Tuples.cs:47:14:47:20 | access to field Item1 | Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:47:14:47:20 | access to field Item1 | $@ | Tuples.cs:45:17:45:33 | call to method Source : String | call to method Source : String | | Tuples.cs:63:22:63:28 | access to field Item1 | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:63:22:63:28 | access to field Item1 | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:63:22:63:28 | access to field Item1 | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:63:22:63:28 | access to field Item1 | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:64:22:64:34 | access to field Item2 | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:64:22:64:34 | access to field Item2 | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:64:22:64:34 | access to field Item2 | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:64:22:64:34 | access to field Item2 | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:68:22:68:22 | access to local variable a | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:68:22:68:22 | access to local variable a | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:68:22:68:22 | access to local variable a | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:68:22:68:22 | access to local variable a | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:69:22:69:22 | access to local variable c | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:69:22:69:22 | access to local variable c | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:69:22:69:22 | access to local variable c | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:69:22:69:22 | access to local variable c | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:89:18:89:18 | access to local variable p | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:89:18:89:18 | access to local variable p | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:89:18:89:18 | access to local variable p | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:89:18:89:18 | access to local variable p | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:90:18:90:18 | access to local variable r | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:90:18:90:18 | access to local variable r | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:90:18:90:18 | access to local variable r | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:90:18:90:18 | access to local variable r | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:101:14:101:16 | access to property i | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:101:14:101:16 | access to property i | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:101:14:101:16 | access to property i | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:101:14:101:16 | access to property i | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:122:14:122:15 | access to local variable x1 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:122:14:122:15 | access to local variable x1 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:126:14:126:15 | access to local variable x2 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:126:14:126:15 | access to local variable x2 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:130:14:130:15 | access to local variable y3 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:130:14:130:15 | access to local variable y3 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:134:14:134:15 | access to local variable y4 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:134:14:134:15 | access to local variable y4 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql index b01c0f7fcaf..9336e1b28be 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql @@ -3,9 +3,10 @@ */ import csharp -import DefaultValueFlow::PathGraph import TestUtilities.InlineFlowTest +import DefaultFlowTest +import PathGraph -from DefaultValueFlow::PathNode source, DefaultValueFlow::PathNode sink -where DefaultValueFlow::flowPath(source, sink) +from PathNode source, PathNode sink +where flowPath(source, sink) select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected index 811f1a04d8b..a9d4895fb46 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected @@ -74,14 +74,14 @@ edges | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Object [property Name] : String | -| EntityFramework.cs:204:18:204:36 | call to method First : Object [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | -| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Object [property Street] : String | -| EntityFramework.cs:212:18:212:38 | call to method First
    : Object [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | -| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Object [property Addresses, element, property Street] : String | -| EntityFramework.cs:219:18:219:36 | call to method First : Object [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Object [property Street] : String | -| EntityFramework.cs:219:18:219:54 | call to method First
    : Object [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | +| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | +| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | +| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | +| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | +| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | +| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | +| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | +| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | @@ -165,14 +165,14 @@ edges | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Object [property Name] : String | -| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Object [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | -| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Object [property Street] : String | -| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Object [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | -| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Object [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Object [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Object [property Street] : String | -| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Object [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | +| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | +| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | +| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | nodes | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | semmle.label | { ..., ... } : Person [property Name] : String | | EntityFramework.cs:61:24:61:32 | "tainted" : String | semmle.label | "tainted" : String | @@ -237,15 +237,15 @@ nodes | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | semmle.label | access to parameter p : Person [property Name] : String | | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | semmle.label | access to local variable ctx : MyContext [property Persons, element, property Name] : String | | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | semmle.label | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:204:18:204:36 | call to method First : Object [property Name] : String | semmle.label | call to method First : Object [property Name] : String | +| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | semmle.label | call to method First : Person [property Name] : String | | EntityFramework.cs:204:18:204:41 | access to property Name | semmle.label | access to property Name | | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | semmle.label | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:212:18:212:38 | call to method First
    : Object [property Street] : String | semmle.label | call to method First
    : Object [property Street] : String | +| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | semmle.label | call to method First
    : Address [property Street] : String | | EntityFramework.cs:212:18:212:45 | access to property Street | semmle.label | access to property Street | | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | semmle.label | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:219:18:219:36 | call to method First : Object [property Addresses, element, property Street] : String | semmle.label | call to method First : Object [property Addresses, element, property Street] : String | +| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | semmle.label | call to method First : Person [property Addresses, element, property Street] : String | | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | semmle.label | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFramework.cs:219:18:219:54 | call to method First
    : Object [property Street] : String | semmle.label | call to method First
    : Object [property Street] : String | +| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | semmle.label | call to method First
    : Address [property Street] : String | | EntityFramework.cs:219:18:219:61 | access to property Street | semmle.label | access to property Street | | EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | semmle.label | "tainted" : String | | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | semmle.label | access to local variable taintSource | @@ -318,15 +318,15 @@ nodes | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | semmle.label | access to parameter p : Person [property Name] : String | | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | semmle.label | access to local variable ctx : MyContext [property Persons, element, property Name] : String | | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | semmle.label | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Object [property Name] : String | semmle.label | call to method First : Object [property Name] : String | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | semmle.label | call to method First : Person [property Name] : String | | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | semmle.label | access to property Name | | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | semmle.label | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Object [property Street] : String | semmle.label | call to method First
    : Object [property Street] : String | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | semmle.label | call to method First
    : Address [property Street] : String | | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | semmle.label | access to property Street | | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | semmle.label | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Object [property Addresses, element, property Street] : String | semmle.label | call to method First : Object [property Addresses, element, property Street] : String | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | semmle.label | call to method First : Person [property Addresses, element, property Street] : String | | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | semmle.label | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Object [property Street] : String | semmle.label | call to method First
    : Object [property Street] : String | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | semmle.label | call to method First
    : Address [property Street] : String | | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | semmle.label | access to property Street | subpaths #select diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFramework.cs b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFramework.cs index af51015b51c..d70369f6eaa 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFramework.cs +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFramework.cs @@ -5,7 +5,7 @@ using System.Linq; namespace EFTests { - class Person + public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } @@ -17,13 +17,13 @@ namespace EFTests public ICollection
    Addresses { get; set; } } - class Address + public class Address { public int Id { get; set; } public string Street { get; set; } } - class PersonAddressMap + public class PersonAddressMap { public int Id { get; set; } public int PersonId { get; set; } @@ -34,7 +34,7 @@ namespace EFTests public Address Address { get; set; } } - class MyContext : DbContext + public class MyContext : DbContext { public virtual DbSet Persons { get; set; } public virtual DbSet
    Addresses { get; set; } diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs index b45290dc799..1c7febb3398 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/EntityFrameworkCore.cs @@ -6,7 +6,7 @@ using System.Linq; namespace EFCoreTests { - class Person + public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } @@ -18,13 +18,13 @@ namespace EFCoreTests public ICollection
    Addresses { get; set; } } - class Address + public class Address { public int Id { get; set; } public string Street { get; set; } } - class PersonAddressMap + public class PersonAddressMap { public int Id { get; set; } public int PersonId { get; set; } @@ -35,7 +35,7 @@ namespace EFCoreTests public Address Address { get; set; } } - class MyContext : DbContext + public class MyContext : DbContext { public virtual DbSet Persons { get; set; } public virtual DbSet
    Addresses { get; set; } diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected index 4698be24b8c..820aca482f3 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/FlowSummaries.expected @@ -1,120 +1,146 @@ summary -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Id];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];value;manual | -| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFCoreTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Id];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];ReturnValue[jump to get_PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];value;manual | -| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];ReturnValue[jump to get_Persons].Element.Property[EFTests.Person.Name];value;manual | +| EFCoreTests;MyContext;false;get_Addresses;();;SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];ReturnValue.Element.Property[EFCoreTests.Address.Id];value;manual | +| EFCoreTests;MyContext;false;get_Addresses;();;SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];ReturnValue.Element.Property[EFCoreTests.Address.Street];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.AddressId]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.AddressId];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Id]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Id];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.PersonId]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.PersonId];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];value;manual | +| EFCoreTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name]];ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];value;manual | +| EFCoreTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];value;manual | +| EFCoreTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];value;manual | +| EFCoreTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Id]];ReturnValue.Element.Property[EFCoreTests.Person.Id];value;manual | +| EFCoreTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Name]];ReturnValue.Element.Property[EFCoreTests.Person.Name];value;manual | +| EFTests;MyContext;false;get_Addresses;();;SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];ReturnValue.Element.Property[EFTests.Address.Id];value;manual | +| EFTests;MyContext;false;get_Addresses;();;SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];ReturnValue.Element.Property[EFTests.Address.Street];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.AddressId]];ReturnValue.Element.Property[EFTests.PersonAddressMap.AddressId];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Id]];ReturnValue.Element.Property[EFTests.PersonAddressMap.Id];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.PersonId]];ReturnValue.Element.Property[EFTests.PersonAddressMap.PersonId];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];value;manual | +| EFTests;MyContext;false;get_PersonAddresses;();;SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];value;manual | +| EFTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];value;manual | +| EFTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];value;manual | +| EFTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];ReturnValue.Element.Property[EFTests.Person.Id];value;manual | +| EFTests;MyContext;false;get_Persons;();;SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];ReturnValue.Element.Property[EFTests.Person.Name];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.AddressId]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.PersonId]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChanges;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.AddressId];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.AddressId]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.PersonId];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.PersonId]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.PersonAddresses].Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Addresses#ReturnValue.Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Address].Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Addresses].Element.Property[EFCoreTests.Address.Street]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Id];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Id]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFCoreTests.PersonAddressMap.Person].Property[EFCoreTests.Person.Name]];value;manual | +| Microsoft.EntityFrameworkCore;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFCoreTests.MyContext.Persons].Element.Property[EFCoreTests.Person.Name];SyntheticGlobal[EFCoreTests.MyContext.Persons#ReturnValue.Element.Property[EFCoreTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.AddressId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.PersonId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChanges;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.AddressId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.AddressId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.PersonId];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.PersonId]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.PersonAddresses].Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Addresses#ReturnValue.Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Address].Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Addresses].Element.Property[EFTests.Address.Street]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Id];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Id]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.PersonAddresses#ReturnValue.Element.Property[EFTests.PersonAddressMap.Person].Property[EFTests.Person.Name]];value;manual | +| System.Data.Entity;DbContext;false;SaveChangesAsync;();;Argument[this].Property[EFTests.MyContext.Persons].Element.Property[EFTests.Person.Name];SyntheticGlobal[EFTests.MyContext.Persons#ReturnValue.Element.Property[EFTests.Person.Name]];value;manual | neutral sourceNode sinkNode diff --git a/csharp/ql/test/query-tests/API Abuse/CallToGCCollect/options b/csharp/ql/test/query-tests/API Abuse/CallToGCCollect/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/CallToGCCollect/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/CallToObsoleteMethod/options b/csharp/ql/test/query-tests/API Abuse/CallToObsoleteMethod/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/CallToObsoleteMethod/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/options b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/ClassImplementsICloneable/options b/csharp/ql/test/query-tests/API Abuse/ClassImplementsICloneable/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/ClassImplementsICloneable/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/DisposeNotCalledOnException/options b/csharp/ql/test/query-tests/API Abuse/DisposeNotCalledOnException/options index a0b23f3ee8b..7faed1b92ed 100644 --- a/csharp/ql/test/query-tests/API Abuse/DisposeNotCalledOnException/options +++ b/csharp/ql/test/query-tests/API Abuse/DisposeNotCalledOnException/options @@ -1,2 +1,2 @@ -semmle-extractor-options: /r:System.ComponentModel.Primitives.dll /r:${testdir}/../../../resources/assemblies/System.Data.dll /r:System.Data.Common.dll -semmle-extractor-options: /langversion:8.0 +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/options b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/options index ea0639b2d0a..75c39b4541b 100644 --- a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/options +++ b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.Runtime.Extensions.dll /r:System.Diagnostics.TraceSource.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/InconsistentEqualsGetHashCode/options b/csharp/ql/test/query-tests/API Abuse/InconsistentEqualsGetHashCode/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/InconsistentEqualsGetHashCode/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.cs b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.cs index 0ecabd07016..5b5780ed977 100644 --- a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.cs +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.cs @@ -1,15 +1,4 @@ -namespace System -{ - public interface IComparable - { - int CompareTo(object obj); // GOOD: the very definition of IComparable.CompareTo() - } - - public interface IComparable - { - int CompareTo(T other); // GOOD: the very definition of IComparable.CompareTo() - } -} +using System; class C1 { diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected index 860009bd3e2..419629319a5 100644 --- a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/IncorrectCompareToSignature.expected @@ -1,2 +1,2 @@ -| IncorrectCompareToSignature.cs:16:16:16:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignature.cs:14:10:14:10 | T | T | IncorrectCompareToSignature.cs:14:7:14:11 | C1<> | C1<> | IncorrectCompareToSignature.cs:14:10:14:10 | T | T | +| IncorrectCompareToSignature.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | IncorrectCompareToSignature.cs:3:7:3:11 | C1<> | C1<> | IncorrectCompareToSignature.cs:3:10:3:10 | T | T | | IncorrectCompareToSignatureBad.cs:5:16:5:24 | CompareTo | The parameter of this 'CompareTo' method is of type $@, but $@ does not implement 'IComparable<$@>'. | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | IncorrectCompareToSignatureBad.cs:3:7:3:9 | Bad | Bad | diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/options b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectCompareToSignature/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/options b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/MissingDisposeCall/options b/csharp/ql/test/query-tests/API Abuse/MissingDisposeCall/options index 2d3e53846e4..75c39b4541b 100644 --- a/csharp/ql/test/query-tests/API Abuse/MissingDisposeCall/options +++ b/csharp/ql/test/query-tests/API Abuse/MissingDisposeCall/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.ComponentModel.Primitives.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/MissingDisposeMethod/options b/csharp/ql/test/query-tests/API Abuse/MissingDisposeMethod/options index 2d3e53846e4..75c39b4541b 100644 --- a/csharp/ql/test/query-tests/API Abuse/MissingDisposeMethod/options +++ b/csharp/ql/test/query-tests/API Abuse/MissingDisposeMethod/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.ComponentModel.Primitives.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options index 08e01d88cc1..a02c94f4258 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options @@ -1 +1 @@ -semmle-extractor-options: --cil /langversion:8.0 /r:System.Xml.dll /r:System.Xml.ReaderWriter.dll /r:System.Private.Xml.dll /r:System.ComponentModel.Primitives.dll /r:System.IO.Compression.dll /r:System.Runtime.Extensions.dll +semmle-extractor-options: --cil /r:System.Private.Xml.dll /r:System.IO.Compression.dll diff --git a/csharp/ql/test/query-tests/API Abuse/NonOverridingMethod/options b/csharp/ql/test/query-tests/API Abuse/NonOverridingMethod/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/NonOverridingMethod/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/NullArgumentToEquals/options b/csharp/ql/test/query-tests/API Abuse/NullArgumentToEquals/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/NullArgumentToEquals/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.cs b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.cs index f4a4944f4fb..cf290a84bcb 100644 --- a/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.cs +++ b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.cs @@ -1,11 +1,6 @@ using System; -class HashSet -{ - public bool Add(T t) - { - return true; - } -} +using System.Text; +using System.Collections.Generic; class C1 { @@ -30,11 +25,6 @@ class C1 } } -class StringBuilder -{ - public StringBuilder Append(string s) { return this; } -} - class C2 { static void Main(string[] args) @@ -59,20 +49,6 @@ class C2 } } -namespace System.IO -{ - public abstract class Stream - { - public abstract int Read(byte[] buffer, int offset, int count); - public virtual int ReadByte() { return 0; } - } - - public class MemoryStream : Stream - { - public override int Read(byte[] buffer, int offset, int count) { return 0; } - } -} - class C3 { static void Main(string[] args) diff --git a/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.expected b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.expected index 371205cbc6b..e463ee956eb 100644 --- a/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.expected +++ b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/UncheckedReturnValue.expected @@ -1,8 +1,8 @@ -| UncheckedReturnValue.cs:29:9:29:31 | call to method Add | Result of call to 'Add' is ignored, but 90% of calls to this method have their result used. | -| UncheckedReturnValue.cs:91:9:91:26 | call to method Read | Result of call to 'Read' is ignored, but should always be checked. | -| UncheckedReturnValue.cs:92:9:92:20 | call to method ReadByte | Result of call to 'ReadByte' is ignored, but should always be checked. | -| UncheckedReturnValue.cs:109:9:109:17 | call to method M1 | Result of call to 'M1' is ignored, but 90% of calls to this method have their result used. | -| UncheckedReturnValue.cs:130:9:130:21 | call to method M2 | Result of call to 'M2' is ignored, but 90% of calls to this method have their result used. | -| UncheckedReturnValue.cs:142:9:142:20 | call to method M3 | Result of call to 'M3' is ignored, but 90% of calls to this method have their result used. | +| UncheckedReturnValue.cs:24:9:24:31 | call to method Add | Result of call to 'Add' is ignored, but 90% of calls to this method have their result used. | +| UncheckedReturnValue.cs:67:9:67:26 | call to method Read | Result of call to 'Read' is ignored, but should always be checked. | +| UncheckedReturnValue.cs:68:9:68:20 | call to method ReadByte | Result of call to 'ReadByte' is ignored, but should always be checked. | +| UncheckedReturnValue.cs:85:9:85:17 | call to method M1 | Result of call to 'M1' is ignored, but 90% of calls to this method have their result used. | +| UncheckedReturnValue.cs:106:9:106:21 | call to method M2 | Result of call to 'M2' is ignored, but 90% of calls to this method have their result used. | +| UncheckedReturnValue.cs:118:9:118:20 | call to method M3 | Result of call to 'M3' is ignored, but 90% of calls to this method have their result used. | | UncheckedReturnValueBad.cs:29:9:29:20 | call to method DoPrint | Result of call to 'DoPrint' is ignored, but 90% of calls to this method have their result used. | | UncheckedReturnValueBad.cs:36:13:36:40 | call to method Read | Result of call to 'Read' is ignored, but should always be checked. | diff --git a/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/options b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/UncheckedReturnValue/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/AlertSuppression/options b/csharp/ql/test/query-tests/AlertSuppression/options new file mode 100644 index 00000000000..77b22963f5c --- /dev/null +++ b/csharp/ql/test/query-tests/AlertSuppression/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-011/options b/csharp/ql/test/query-tests/Security Features/CWE-011/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-011/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-016/options b/csharp/ql/test/query-tests/Security Features/CWE-016/options new file mode 100644 index 00000000000..a5ea8b797c5 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-016/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-020/options b/csharp/ql/test/query-tests/Security Features/CWE-020/options index 319fd18ddcc..96b0b028bdd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-020/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-020/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:${testdir}/../../../resources/assemblies/System.Web.dll /r:${testdir}/../../../resources/assemblies/System.Web.ApplicationServices.dll /r:${testdir}/../../../resources/assemblies/System.Data.dll /r:System.Text.RegularExpressions.dll /r:System.Collections.Specialized.dll /r:System.Data.Common.dll /r:System.Security.Cryptography.X509Certificates.dll /r:System.Runtime.InteropServices.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/options b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/options index 17bfec6a531..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.IO.FileSystem.dll /r:System.Runtime.Extensions.dll /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/options b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/options index acca6983965..a5ea8b797c5 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.IO.Compression.dll /r:System.IO.Compression.FileSystem.dll /r:System.IO.Compression.ZipFile.dll /r:System.IO.FileSystem.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/options b/csharp/ql/test/query-tests/Security Features/CWE-078/options index de7d3478af5..7faed1b92ed 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.ComponentModel.Primitives.dll /r:System.Diagnostics.Process.dll /r:System.Runtime.InteropServices.dll ${testdir}/../../../resources/stubs/System.Data.cs /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.cs index 24c4eb73912..1096634b690 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.cs @@ -1,5 +1,3 @@ -// semmle-extractor-options: /r:${testdir}/../../../../resources/assemblies/System.Data.dll /r:${testdir}/../../../../resources/assemblies/System.Web.dll /r:${testdir}/../../../../resources/assemblies/System.Web.Mvc.dll /r:System.ComponentModel.Primitives.dll /r:System.Collections.Specialized.dll /r:${testdir}/../../../../resources/assemblies/System.Net.Http.dll - using System; using System.Data.SqlClient; using System.Web; diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected index bafe7257095..beef5ec2968 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected @@ -1,8 +1,8 @@ edges -| StoredXSS.cs:24:60:24:86 | call to method GetString : String | StoredXSS.cs:24:44:24:86 | ... + ... | +| StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | nodes -| StoredXSS.cs:24:44:24:86 | ... + ... | semmle.label | ... + ... | -| StoredXSS.cs:24:60:24:86 | call to method GetString : String | semmle.label | call to method GetString : String | +| StoredXSS.cs:22:44:22:86 | ... + ... | semmle.label | ... + ... | +| StoredXSS.cs:22:60:22:86 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths #select -| StoredXSS.cs:24:44:24:86 | ... + ... | StoredXSS.cs:24:60:24:86 | call to method GetString : String | StoredXSS.cs:24:44:24:86 | ... + ... | This HTML or JavaScript write depends on a $@. | StoredXSS.cs:24:60:24:86 | call to method GetString | stored (potentially user-provided) value | +| StoredXSS.cs:22:44:22:86 | ... + ... | StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | This HTML or JavaScript write depends on a $@. | StoredXSS.cs:22:60:22:86 | call to method GetString | stored (potentially user-provided) value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/options b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/options new file mode 100644 index 00000000000..34d9e62e93c --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/AspInline.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/AspInline.expected similarity index 66% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/AspInline.expected rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/AspInline.expected index d296914aba7..66468b41a68 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/AspInline.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/AspInline.expected @@ -1,5 +1,5 @@ -| script.aspx:4:1:4:23 | <%= ... %> | XSS.cs:114:16:114:29 | someJavascript | -| script.aspx:8:1:8:12 | <%= ... %> | XSS.cs:121:24:121:28 | Field | +| script.aspx:4:1:4:23 | <%= ... %> | XSS.cs:115:16:115:29 | someJavascript | +| script.aspx:8:1:8:12 | <%= ... %> | XSS.cs:122:24:122:28 | Field | | script.aspx:12:1:12:14 | <%= ... %> | | Request | | script.aspx:16:1:16:34 | <%= ... %> | | QueryString | | script.aspx:20:1:20:41 | <%= ... %> | | QueryString | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/AspInline.ql b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/AspInline.ql similarity index 100% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/AspInline.ql rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/AspInline.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.cs similarity index 92% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.cs rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.cs index 650f636f875..1fc8a99e61b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.cs @@ -1,4 +1,4 @@ - +// semmle-extractor-options: /r:${testdir}/../../../../resources/assemblies/System.Web.dll /r:${testdir}/../../../../resources/assemblies/System.Web.Mvc.dll /r:System.Collections.Specialized.dll /r:${testdir}/../../../../resources/assemblies/System.Net.Http.dll using System; using System.Net; using System.Net.Http; @@ -102,7 +102,8 @@ namespace Test new StringContent(HttpUtility.HtmlEncode(name)); } - public void UrlEncoded(HttpContextBase context) { + public void UrlEncoded(HttpContextBase context) + { // GOOD: URL encoding string name = context.Request.QueryString["name"]; new StringContent(HttpUtility.UrlEncode(name)); @@ -135,21 +136,3 @@ namespace Test } } } - -namespace System.Net -{ - public class HttpListenerResponse - { - public System.IO.Stream OutputStream => null; - } - - class HttpListenerContext - { - public HttpListenerResponse Response => null; - } - - class HttpListener - { - public HttpListenerContext GetContext() => null; - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected similarity index 97% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected index f1f4c631769..4b1440cee4a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected @@ -56,7 +56,7 @@ nodes | XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | XSS.cs:94:27:94:61 | access to indexer : String | semmle.label | access to indexer : String | | XSS.cs:95:31:95:34 | access to local variable name | semmle.label | access to local variable name | -| XSS.cs:134:20:134:33 | access to property RawUrl | semmle.label | access to property RawUrl | +| XSS.cs:135:20:135:33 | access to property RawUrl | semmle.label | access to property RawUrl | | script.aspx:12:1:12:14 | <%= ... %> | semmle.label | <%= ... %> | | script.aspx:16:1:16:34 | <%= ... %> | semmle.label | <%= ... %> | | script.aspx:20:1:20:41 | <%= ... %> | semmle.label | <%= ... %> | @@ -72,7 +72,7 @@ subpaths | XSS.cs:86:28:86:31 | access to local variable name | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | User-provided value | | XSS.cs:87:31:87:34 | access to local variable name | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | User-provided value | | XSS.cs:95:31:95:34 | access to local variable name | XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | User-provided value | -| XSS.cs:134:20:134:33 | access to property RawUrl | XSS.cs:134:20:134:33 | access to property RawUrl | XSS.cs:134:20:134:33 | access to property RawUrl | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:134:20:134:33 | access to property RawUrl | User-provided value | +| XSS.cs:135:20:135:33 | access to property RawUrl | XSS.cs:135:20:135:33 | access to property RawUrl | XSS.cs:135:20:135:33 | access to property RawUrl | $@ flows to here and is written to HTML or JavaScript. | XSS.cs:135:20:135:33 | access to property RawUrl | User-provided value | | script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | $@ flows to here and is a remote source accessed inline in an ASPX page. | script.aspx:12:1:12:14 | <%= ... %> | User-provided value | | script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | $@ flows to here and is a remote source accessed inline in an ASPX page. | script.aspx:16:1:16:34 | <%= ... %> | User-provided value | | script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | $@ flows to here and is a remote source accessed inline in an ASPX page. | script.aspx:20:1:20:41 | <%= ... %> | User-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.qlref b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.qlref similarity index 100% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/XSS.qlref rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.qlref diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/options b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/options new file mode 100644 index 00000000000..a95668cbc59 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/options @@ -0,0 +1 @@ +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Net.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/script.aspx b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/script.aspx similarity index 100% rename from csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/script.aspx rename to csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/script.aspx diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/options b/csharp/ql/test/query-tests/Security Features/CWE-089/options index 036514ceb74..b1124d05dcd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/options @@ -1,6 +1,6 @@ semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:../../../resources/stubs/Dapper/2.0.90/Dapper.csproj -semmle-extractor-options: --load-sources-from-project:../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj -semmle-extractor-options: --load-sources-from-project:../../../resources/stubs/System.Data.SQLite/1.0.116/System.Data.SQLite.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/Dapper/2.0.90/Dapper.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SQLite/1.0.116/System.Data.SQLite.csproj semmle-extractor-options: ${testdir}/../../../resources/stubs/EntityFramework.cs semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/options b/csharp/ql/test/query-tests/Security Features/CWE-090/options index dfc3914bb98..1a54f1e9c36 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/options @@ -1,2 +1,4 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs ${testdir}/../../../resources/stubs/System.DirectoryServices.cs /r:System.ComponentModel.Primitives.dll /r:System.Collections.Specialized.dll /r:System.ComponentModel.TypeConverter.dll /r:System.Private.Xml.dll -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Data.cs /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.DirectoryServices.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/options b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/options index 5194fddbe4d..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Private.Xml.dll /r:System.Xml.dll /r:System.Xml.ReaderWriter.dll /r:System.Runtime.Extensions.dll /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-094/options b/csharp/ql/test/query-tests/Security Features/CWE-094/options index 97b9301f4dc..cce2f114af6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-094/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-094/options @@ -1 +1,5 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll ${testdir}/../../../resources/stubs/Microsoft.CSharp.cs /r:System.ComponentModel.Primitives.dll ${testdir}/../../../resources/stubs/System.Windows.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/Microsoft.CSharp.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-099/options b/csharp/ql/test/query-tests/Security Features/CWE-099/options index 2878eb40d52..6f56ddfc468 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-099/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-099/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Collections.Specialized.dll ${testdir}/../../../resources/stubs/System.Web.cs /r:${testdir}/../../../resources/assemblies/System.Data.dll /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-112/options b/csharp/ql/test/query-tests/Security Features/CWE-112/options index c72ec0605ab..96b0b028bdd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-112/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-112/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Collections.Specialized.dll /r:System.Runtime.Extensions.dll ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Xml.ReaderWriter.dll /r:System.Private.Xml.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/options b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/options index 2fe55538006..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-119/options b/csharp/ql/test/query-tests/Security Features/CWE-119/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-119/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-134/options b/csharp/ql/test/query-tests/Security Features/CWE-134/options index 54d2098bf4e..ab08ee323e2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-134/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-134/options @@ -1 +1,4 @@ -semmle-extractor-options: /r:System.Runtime.Extensions.dll /r:System.Collections.Specialized.dll ${testdir}/../../../resources/stubs/System.Web.cs ${testdir}/../../../resources/stubs/System.Windows.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/options b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/options index 3d76f691ef2..34d9e62e93c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs ${testdir}/../../../../resources/stubs/System.Data.cs ${testdir}/../../../../resources/stubs/System.Net.cs /r:System.Data.Common.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-209/options b/csharp/ql/test/query-tests/Security Features/CWE-209/options index 326ff69528b..96b0b028bdd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-209/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-209/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOff/options b/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOff/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOff/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOff/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOffButGlobal/options b/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOffButGlobal/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOffButGlobal/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-248/MissingASPNETGlobalErrorHandler/WebConfigOffButGlobal/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.expected b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.expected new file mode 100644 index 00000000000..87fc29167be --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.expected @@ -0,0 +1 @@ +| ProfileController.cs:9:25:9:31 | Delete1 | This action is missing an authorization check. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.qlref b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.qlref new file mode 100644 index 00000000000..a4173778d9f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/MissingAccessControl.qlref @@ -0,0 +1 @@ +Security Features/CWE-285/MissingAccessControl.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/ProfileController.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/ProfileController.cs new file mode 100644 index 00000000000..39943dd4ce4 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/ProfileController.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; + +public class ProfileController : Controller { + private void doThings() { } + private bool isAuthorized() { return false; } + + // BAD: This is a Delete method, but no auth is specified. + public ActionResult Delete1(int id) { + doThings(); + return View(); + } + + // GOOD: isAuthorized is checked. + public ActionResult Delete2(int id) { + if (!isAuthorized()) { + return null; + } + doThings(); + return View(); + } + + // GOOD: The Authorize attribute is used. + [Authorize] + public ActionResult Delete3(int id) { + doThings(); + return View(); + } + +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/options b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/options new file mode 100644 index 00000000000..19bb87e63b5 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/MVCTests/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.expected b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.expected new file mode 100644 index 00000000000..5c0df701d81 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.expected @@ -0,0 +1,3 @@ +| Test1/EditProfile.aspx.cs:10:20:10:29 | btn1_Click | This action is missing an authorization check. | +| Test1/ViewProfile.aspx.cs:14:20:14:36 | btn_delete1_Click | This action is missing an authorization check. | +| Test3/B/EditProfile.aspx.cs:8:20:8:29 | btn1_Click | This action is missing an authorization check. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.qlref b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.qlref new file mode 100644 index 00000000000..a4173778d9f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/MissingAccessControl.qlref @@ -0,0 +1 @@ +Security Features/CWE-285/MissingAccessControl.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/EditProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/EditProfile.aspx.cs new file mode 100644 index 00000000000..b023dc11e80 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/EditProfile.aspx.cs @@ -0,0 +1,20 @@ +using System; +using System.Web.UI; + +class EditProfile : System.Web.UI.Page { + private void doThings() { } + + private bool isAuthorized() { return false; } + + // BAD: The class name indicates that this may be an Edit method, but there is no auth check + protected void btn1_Click(object sender, EventArgs e) { + doThings(); + } + + // GOOD: There is a call to isAuthorized + protected void btn2_Click(object sender, EventArgs e) { + if (isAuthorized()) { + doThings(); + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/ViewProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/ViewProfile.aspx.cs new file mode 100644 index 00000000000..f9d7316d50b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test1/ViewProfile.aspx.cs @@ -0,0 +1,24 @@ +using System; +using System.Web.UI; +using System.Web.Security; + +class ViewProfile : System.Web.UI.Page { + private void doThings() { } + + // GOOD: This method and class name do not indicate a sensitive method. + protected void btn_safe_Click(object sender, EventArgs e) { + doThings(); + } + + // BAD: The name indicates a Delete method, but no auth is present. + protected void btn_delete1_Click(object sender, EventArgs e) { + doThings(); + } + + // GOOD: User.IsInRole is checked. + protected void btn_delete2_Click(object sender, EventArgs e) { + if (User.IsInRole("admin")) { + doThings(); + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/EditProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/EditProfile.aspx.cs new file mode 100644 index 00000000000..0d0b2b7b864 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/EditProfile.aspx.cs @@ -0,0 +1,11 @@ +using System; +using System.Web.UI; + +class EditProfile2 : System.Web.UI.Page { + private void doThings() { } + + // GOOD: The Web.config file specifies auth for this path. + protected void btn1_Click(object sender, EventArgs e) { + doThings(); + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/Web.config new file mode 100644 index 00000000000..5810b0a0593 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test2/Web.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/A/EditProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/A/EditProfile.aspx.cs new file mode 100644 index 00000000000..4f5025a4a51 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/A/EditProfile.aspx.cs @@ -0,0 +1,11 @@ +using System; +using System.Web.UI; + +class EditProfile3 : System.Web.UI.Page { + private void doThings() { } + + // GOOD: This is covered by the Web.config's location tag referring to A + protected void btn1_Click(object sender, EventArgs e) { + doThings(); + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/B/EditProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/B/EditProfile.aspx.cs new file mode 100644 index 00000000000..4b7697f0f88 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/B/EditProfile.aspx.cs @@ -0,0 +1,11 @@ +using System; +using System.Web.UI; + +class EditProfile4 : System.Web.UI.Page { + private void doThings() { } + + // BAD: The Web.config file does not specify auth for this path. + protected void btn1_Click(object sender, EventArgs e) { + doThings(); + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/C/EditProfile.aspx.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/C/EditProfile.aspx.cs new file mode 100644 index 00000000000..a8ad0654689 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/C/EditProfile.aspx.cs @@ -0,0 +1,11 @@ +using System; +using System.Web.UI; + +class EditProfile5 : System.Web.UI.Page { + private void doThings() { } + + // GOOD: The Web.config file specifies auth for the path Virtual, which is mapped to C in Global.asax + protected void btn1_Click(object sender, EventArgs e) { + doThings(); + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Global.asax.cs b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Global.asax.cs new file mode 100644 index 00000000000..f1bb5aadd8b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Global.asax.cs @@ -0,0 +1,26 @@ +using System; +using System.Web; +using System.Web.Routing; + +public class Global : System.Web.HttpApplication { + + void Application_Start(object sender, EventArgs e) { + RegisterRoutes(RouteTable.Routes); + } + + void Application_End(object sender, EventArgs e) { } + + void Application_Error(object sender, EventArgs e) { } + + void Session_Start(object sender, EventArgs e) { } + + void Session_End(object sender, EventArgs e) { } + + static void RegisterRoutes(RouteCollection routes) { + routes.MapPageRoute("VirtualEditProfile", + "Virtual/Edit", + "~/C/EditProfile.aspx", + false + ); + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Web.config new file mode 100644 index 00000000000..fd9409f3042 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/Test3/Web.config @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/options b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/options new file mode 100644 index 00000000000..fb93d69d6b4 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-285/MissingAccessControl/WebFormsTests/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-312/options b/csharp/ql/test/query-tests/Security Features/CWE-312/options index 4b3bf418201..ab08ee323e2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-312/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-312/options @@ -1 +1,4 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll /r:System.Security.Cryptography.dll {testdir}/../../../../resources/stubs/System.Windows.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/options b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/options new file mode 100644 index 00000000000..94ad1a6f02b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/stubs.cs b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/stubs.cs deleted file mode 100644 index 26461fc0224..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/stubs.cs +++ /dev/null @@ -1,71 +0,0 @@ -// This file contains auto-generated code. - -namespace System -{ - namespace Data - { - // Generated from `System.Data.IDbConnection` in `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089` - public interface IDbConnection : System.IDisposable - { - string ConnectionString { get; set; } - } - - namespace Common - { - // Generated from `System.Data.Common.DbConnectionStringBuilder` in `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089` - public class DbConnectionStringBuilder : System.Collections.IEnumerable, System.Collections.IDictionary, System.Collections.ICollection - { - System.Collections.IDictionaryEnumerator System.Collections.IDictionary.GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - bool System.Collections.ICollection.IsSynchronized { get => throw null; } - bool System.Collections.IDictionary.Contains(object keyword) => throw null; - object System.Collections.ICollection.SyncRoot { get => throw null; } - public object this[object keyword] { get => throw null; set => throw null; } - public bool IsReadOnly { get => throw null; } - public override string ToString() => throw null; - public string ConnectionString { get => throw null; set => throw null; } - public virtual System.Collections.ICollection Keys { get => throw null; } - public virtual System.Collections.ICollection Values { get => throw null; } - public virtual bool IsFixedSize { get => throw null; } - public virtual int Count { get => throw null; } - public virtual void Clear() => throw null; - void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; - void System.Collections.IDictionary.Add(object keyword, object value) => throw null; - void System.Collections.IDictionary.Remove(object keyword) => throw null; - public void Dispose() => throw null; - } - - // Generated from `System.Data.Common.DbConnection` in `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089` - abstract public class DbConnection : System.IDisposable, System.Data.IDbConnection - { - public abstract string ConnectionString { get; set; } - public void Dispose() => throw null; - } - - } - namespace SqlClient - { - // Generated from `System.Data.SqlClient.SqlConnectionStringBuilder` in `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089` - public class SqlConnectionStringBuilder : System.Data.Common.DbConnectionStringBuilder - { - public SqlConnectionStringBuilder() => throw null; - public SqlConnectionStringBuilder(string connectionString) => throw null; - public bool Encrypt { get => throw null; set => throw null; } - public override System.Collections.ICollection Keys { get => throw null; } - public override System.Collections.ICollection Values { get => throw null; } - public override bool IsFixedSize { get => throw null; } - public override void Clear() => throw null; - } - - // Generated from `System.Data.SqlClient.SqlConnection` in `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089` - public class SqlConnection : System.Data.Common.DbConnection, System.ICloneable - { - object System.ICloneable.Clone() => throw null; - public SqlConnection() => throw null; - public SqlConnection(string connectionString) => throw null; - public override string ConnectionString { get => throw null; set => throw null; } - } - - } - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected index 4cc2e788074..011ec3faee0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected @@ -1,10 +1,10 @@ edges -| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Int32 | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Int32 | -| InsecureRandomness.cs:28:23:28:43 | (...) ... : Int32 | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Int32 | -| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Int32 | +| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | +| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | +| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder [element] : String | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder [element] : String | | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder [element] : String | -| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Int32 | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | +| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder [element] : String | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | | InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | @@ -16,12 +16,12 @@ nodes | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | semmle.label | call to method InsecureRandomString | | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | semmle.label | call to method InsecureRandomStringFromSelection | | InsecureRandomness.cs:14:20:14:54 | call to method InsecureRandomStringFromIndexer | semmle.label | call to method InsecureRandomStringFromIndexer | -| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Int32 | semmle.label | [post] access to local variable data : Byte[] [element] : Int32 | -| InsecureRandomness.cs:28:23:28:43 | (...) ... : Int32 | semmle.label | (...) ... : Int32 | +| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | semmle.label | [post] access to local variable data : Byte[] [element] : Byte | +| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | semmle.label | (...) ... : Byte | | InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | semmle.label | call to method Next : Int32 | | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder [element] : String | semmle.label | [post] access to local variable result : StringBuilder [element] : String | | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Int32 | semmle.label | access to local variable data : Byte[] [element] : Int32 | +| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | semmle.label | access to local variable data : Byte[] [element] : Byte | | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder [element] : String | semmle.label | access to local variable result : StringBuilder [element] : String | | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | semmle.label | call to method ToString : String | | InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | semmle.label | call to method Next : Int32 | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-338/options b/csharp/ql/test/query-tests/Security Features/CWE-338/options index 1225f3c0220..bd9f6e49ece 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-338/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-338/options @@ -1,2 +1,3 @@ -semmle-extractor-options: /r:System.Security.Cryptography.Csp.dll /r:System.Security.Cryptography.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj semmle-extractor-options: ${testdir}/../../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/global/options b/csharp/ql/test/query-tests/Security Features/CWE-352/global/options index 5ce3b321a94..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-352/global/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/global/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-352/missing/options b/csharp/ql/test/query-tests/Security Features/CWE-352/missing/options index 5ce3b321a94..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-352/missing/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-352/missing/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-359/options b/csharp/ql/test/query-tests/Security Features/CWE-359/options index aa088071c5d..ab08ee323e2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-359/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-359/options @@ -1 +1,4 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll /r:System.Security.Cryptography.dll ${testdir}/../../../resources/stubs/System.Windows.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-384/options b/csharp/ql/test/query-tests/Security Features/CWE-384/options index 326ff69528b..96b0b028bdd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-384/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-384/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/CodeAddedHeader/options b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/CodeAddedHeader/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/CodeAddedHeader/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/CodeAddedHeader/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/NoHeader/options b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/NoHeader/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/NoHeader/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/NoHeader/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeader/options b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeader/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeader/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeader/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/DeserializedDelegate/options b/csharp/ql/test/query-tests/Security Features/CWE-502/DeserializedDelegate/options index bd4d77c7377..a5ea8b797c5 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/DeserializedDelegate/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/DeserializedDelegate/options @@ -1 +1,2 @@ -semmle-extractor-options: /r:System.Runtime.Serialization.Formatters.dll /r:System.IO.FileSystem.dll /r:System.Linq.Expressions.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserialization/options b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserialization/options index 182f92f8d84..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserialization/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserialization/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Private.Xml.dll /r:System.Xml.ReaderWriter.dll /r:System.Private.DataContractSerialization.dll /r:System.Runtime.Serialization.Formatters.dll /r:System.Runtime.Extensions.dll /r:System.IO.FileSystem.dll /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/options b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/options index 182f92f8d84..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/options @@ -1 +1,3 @@ -semmle-extractor-options: /r:System.Private.Xml.dll /r:System.Xml.ReaderWriter.dll /r:System.Private.DataContractSerialization.dll /r:System.Runtime.Serialization.Formatters.dll /r:System.Runtime.Extensions.dll /r:System.IO.FileSystem.dll /r:System.Collections.Specialized.dll ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/options b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/options index bd183f95f5c..81ebad48b0d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/options @@ -1 +1,3 @@ -semmle-extractor-options: /nostdlib /noconfig --load-sources-from-project:${testdir}/../../../../resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj ${testdir}/../../../../resources/stubs/System.Web.cs +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-539/PersistentCookie/options b/csharp/ql/test/query-tests/Security Features/CWE-539/PersistentCookie/options index 5ce3b321a94..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-539/PersistentCookie/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-539/PersistentCookie/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-548/options b/csharp/ql/test/query-tests/Security Features/CWE-548/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-548/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/options b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/options index fb116749418..daca5d73f55 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/options @@ -1,4 +1,4 @@ semmle-extractor-options: /nostdlib /noconfig semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: --load-sources-from-project:../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInCode/options b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInCode/options index 96837650998..9d05f9bf06d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInCode/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInCode/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInForms/options b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInForms/options new file mode 100644 index 00000000000..f4586e95ef0 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/AddedInForms/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/HttpCookiesCorrect/options b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/HttpCookiesCorrect/options new file mode 100644 index 00000000000..f4586e95ef0 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/HttpCookiesCorrect/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/RequireSSLMissing/options b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/RequireSSLMissing/options new file mode 100644 index 00000000000..f4586e95ef0 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/RequireSSL/RequireSSLMissing/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/options b/csharp/ql/test/query-tests/Security Features/CWE-643/options index 9ab01d95193..6f56ddfc468 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll ${testdir}/../../../resources/stubs/System.Data.cs /r:System.Private.Xml.dll /r:System.Xml.XPath.dll /r:System.Data.Common.dll /r:System.Runtime.Extensions.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/options b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/options index 84463712411..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Text.RegularExpressions.dll /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/options b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/options index 1a4a26ba9ed..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Text.RegularExpressions.dll /r:System.Collections.Specialized.dll /r:System.Runtime.Extensions.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/options b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/options index 84463712411..9290f65d5b2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs /r:System.Text.RegularExpressions.dll /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-798/options b/csharp/ql/test/query-tests/Security Features/CWE-798/options index 3145ab2441c..a361e4fde29 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-798/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-798/options @@ -1,2 +1,4 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs semmle-extractor-options: ${testdir}/../../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs -semmle-extractor-options: /r:${testdir}/../../../resources/assemblies/System.Web.dll /r:${testdir}/../../../resources/assemblies/System.Web.ApplicationServices.dll /r:${testdir}/../../../resources/assemblies/System.Data.dll /r:System.Text.RegularExpressions.dll /r:System.Collections.Specialized.dll /r:System.Data.Common.dll /r:System.Security.Cryptography.dll /r:System.Runtime.InteropServices.dll diff --git a/csharp/ql/test/query-tests/Security Features/CWE-807/options b/csharp/ql/test/query-tests/Security Features/CWE-807/options index e2ddeb7dac8..96b0b028bdd 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-807/options +++ b/csharp/ql/test/query-tests/Security Features/CWE-807/options @@ -1 +1,3 @@ -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Net.cs ${testdir}/../../../resources/stubs/System.Web.cs /r:System.Collections.Specialized.dll +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected b/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected index 629addbb336..dc42176a7cb 100644 --- a/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected +++ b/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected @@ -1 +1 @@ -| // This file contains auto-generated code.\n// Generated from `System.Collections, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Generic\n{\npublic class Stack : System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.ICollection, System.Collections.IEnumerable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int arrayIndex) => throw null;\n public int Count { get => throw null; }\n System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public T Peek() => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Collections.NonGeneric, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\npublic class SortedList : System.Collections.ICollection, System.Collections.IDictionary, System.Collections.IEnumerable, System.ICloneable\n{\n public virtual void Add(object key, object value) => throw null;\n public virtual void Clear() => throw null;\n public virtual object Clone() => throw null;\n public virtual bool Contains(object key) => throw null;\n public virtual void CopyTo(System.Array array, int arrayIndex) => throw null;\n public virtual int Count { get => throw null; }\n public virtual object GetByIndex(int index) => throw null;\n public virtual System.Collections.IDictionaryEnumerator GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n public virtual bool IsFixedSize { get => throw null; }\n public virtual bool IsReadOnly { get => throw null; }\n public virtual bool IsSynchronized { get => throw null; }\n public virtual object this[object key] { get => throw null; set => throw null; }\n public virtual System.Collections.ICollection Keys { get => throw null; }\n public virtual void Remove(object key) => throw null;\n public virtual object SyncRoot { get => throw null; }\n public virtual System.Collections.ICollection Values { get => throw null; }\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Collections.Specialized, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Specialized\n{\npublic abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Collections.IEnumerable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null;\n public virtual int Count { get => throw null; }\n public virtual System.Collections.IEnumerator GetEnumerator() => throw null;\n public virtual void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public virtual void OnDeserialization(object sender) => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\npublic class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n public string this[string name] { get => throw null; set => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.ComponentModel.TypeConverter, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace ComponentModel\n{\npublic class ComponentConverter : System.ComponentModel.ReferenceConverter\n{\n}\n\npublic class DefaultEventAttribute : System.Attribute\n{\n public DefaultEventAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\npublic class DefaultPropertyAttribute : System.Attribute\n{\n public DefaultPropertyAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\npublic class ReferenceConverter : System.ComponentModel.TypeConverter\n{\n}\n\npublic class TypeConverter\n{\n}\n\n}\nnamespace Timers\n{\npublic class TimersDescriptionAttribute\n{\n public TimersDescriptionAttribute(string description) => throw null;\n internal TimersDescriptionAttribute(string description, string unused) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class Enumerable\n{\n public static System.Collections.Generic.IEnumerable Select(this System.Collections.Generic.IEnumerable source, System.Func selector) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Expressions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic interface IQueryable : System.Collections.IEnumerable\n{\n}\n\n}\nnamespace Runtime\n{\nnamespace CompilerServices\n{\npublic class CallSite\n{\n internal CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) => throw null;\n}\n\npublic class CallSite : System.Runtime.CompilerServices.CallSite where T: class\n{\n private CallSite() : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n private CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n}\n\npublic abstract class CallSiteBinder\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Parallel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class ParallelEnumerable\n{\n public static System.Linq.ParallelQuery AsParallel(this System.Collections.IEnumerable source) => throw null;\n}\n\npublic class ParallelQuery : System.Collections.IEnumerable\n{\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n internal ParallelQuery(System.Linq.Parallel.QuerySettings specifiedSettings) => throw null;\n}\n\nnamespace Parallel\n{\ninternal struct QuerySettings\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Queryable, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class Queryable\n{\n public static System.Linq.IQueryable AsQueryable(this System.Collections.IEnumerable source) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.ObjectModel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace ComponentModel\n{\npublic class TypeConverterAttribute : System.Attribute\n{\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n public TypeConverterAttribute() => throw null;\n public TypeConverterAttribute(System.Type type) => throw null;\n public TypeConverterAttribute(string typeName) => throw null;\n}\n\npublic class TypeDescriptionProviderAttribute : System.Attribute\n{\n public TypeDescriptionProviderAttribute(System.Type type) => throw null;\n public TypeDescriptionProviderAttribute(string typeName) => throw null;\n}\n\n}\nnamespace Windows\n{\nnamespace Markup\n{\npublic class ValueSerializerAttribute : System.Attribute\n{\n public ValueSerializerAttribute(System.Type valueSerializerType) => throw null;\n public ValueSerializerAttribute(string valueSerializerTypeName) => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Private.Uri, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\npublic class Uri : System.Runtime.Serialization.ISerializable\n{\n public override bool Equals(object comparand) => throw null;\n public override int GetHashCode() => throw null;\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null;\n public override string ToString() => throw null;\n}\n\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Runtime.Serialization.Primitives, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Runtime\n{\nnamespace Serialization\n{\npublic class DataContractAttribute : System.Attribute\n{\n public DataContractAttribute() => throw null;\n}\n\npublic class DataMemberAttribute : System.Attribute\n{\n public DataMemberAttribute() => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Text.RegularExpressions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Text\n{\nnamespace RegularExpressions\n{\npublic class Capture\n{\n internal Capture(string text, int index, int length) => throw null;\n public override string ToString() => throw null;\n}\n\npublic class GeneratedRegexAttribute : System.Attribute\n{\n public GeneratedRegexAttribute(string pattern) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, int matchTimeoutMilliseconds) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, int matchTimeoutMilliseconds, string cultureName) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, string cultureName) => throw null;\n}\n\npublic class Group : System.Text.RegularExpressions.Capture\n{\n internal Group(string text, int[] caps, int capcount, string name) : base(default(string), default(int), default(int)) => throw null;\n}\n\npublic class Match : System.Text.RegularExpressions.Group\n{\n internal Match(System.Text.RegularExpressions.Regex regex, int capcount, string text, int textLength) : base(default(string), default(int[]), default(int), default(string)) => throw null;\n}\n\npublic class Regex : System.Runtime.Serialization.ISerializable\n{\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null;\n public System.Text.RegularExpressions.Match Match(string input) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public Regex(string pattern) => throw null;\n public Regex(string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public string Replace(string input, string replacement) => throw null;\n public override string ToString() => throw null;\n}\n\n[System.Flags]\npublic enum RegexOptions : int\n{\n IgnoreCase = 1,\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`.\n\nnamespace System\n{\nnamespace Web\n{\npublic class HtmlString : System.Web.IHtmlString\n{\n}\n\npublic class HttpContextBase\n{\n public virtual System.Web.HttpRequestBase Request { get => throw null; }\n}\n\npublic class HttpCookie\n{\n}\n\npublic abstract class HttpCookieCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n}\n\npublic class HttpRequest\n{\n}\n\npublic class HttpRequestBase\n{\n public virtual System.Collections.Specialized.NameValueCollection QueryString { get => throw null; }\n}\n\npublic class HttpResponse\n{\n}\n\npublic class HttpResponseBase\n{\n}\n\npublic class HttpServerUtility\n{\n}\n\npublic interface IHtmlString\n{\n}\n\npublic interface IHttpHandler\n{\n}\n\npublic interface IServiceProvider\n{\n}\n\npublic class UnvalidatedRequestValues\n{\n}\n\npublic class UnvalidatedRequestValuesBase\n{\n}\n\nnamespace Mvc\n{\npublic class ActionMethodSelectorAttribute : System.Attribute\n{\n}\n\npublic class ActionResult\n{\n}\n\npublic class ControllerContext\n{\n}\n\npublic class FilterAttribute : System.Attribute\n{\n}\n\npublic class GlobalFilterCollection\n{\n}\n\ninternal interface IFilterProvider\n{\n}\n\npublic interface IViewDataContainer\n{\n}\n\npublic class ViewContext : System.Web.Mvc.ControllerContext\n{\n}\n\npublic class ViewResult : System.Web.Mvc.ViewResultBase\n{\n}\n\npublic class ViewResultBase : System.Web.Mvc.ActionResult\n{\n}\n\n}\nnamespace Routing\n{\npublic class RequestContext\n{\n}\n\n}\nnamespace Script\n{\nnamespace Serialization\n{\npublic abstract class JavaScriptTypeResolver\n{\n}\n\n}\n}\nnamespace Security\n{\npublic class MembershipUser\n{\n}\n\n}\nnamespace SessionState\n{\npublic class HttpSessionState\n{\n}\n\n}\nnamespace UI\n{\npublic class Control\n{\n}\n\nnamespace WebControls\n{\npublic class WebControl : System.Web.UI.Control\n{\n}\n\n}\n}\n}\n}\n\n\n | +| // This file contains auto-generated code.\n// Generated from `System.Collections, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Generic\n{\npublic class Stack : System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.ICollection, System.Collections.IEnumerable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int arrayIndex) => throw null;\n public int Count { get => throw null; }\n System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public T Peek() => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Collections.NonGeneric, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\npublic class SortedList : System.Collections.ICollection, System.Collections.IDictionary, System.Collections.IEnumerable, System.ICloneable\n{\n public virtual void Add(object key, object value) => throw null;\n public virtual void Clear() => throw null;\n public virtual object Clone() => throw null;\n public virtual bool Contains(object key) => throw null;\n public virtual void CopyTo(System.Array array, int arrayIndex) => throw null;\n public virtual int Count { get => throw null; }\n public virtual object GetByIndex(int index) => throw null;\n public virtual System.Collections.IDictionaryEnumerator GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n public virtual bool IsFixedSize { get => throw null; }\n public virtual bool IsReadOnly { get => throw null; }\n public virtual bool IsSynchronized { get => throw null; }\n public virtual object this[object key] { get => throw null; set => throw null; }\n public virtual System.Collections.ICollection Keys { get => throw null; }\n public virtual void Remove(object key) => throw null;\n public virtual object SyncRoot { get => throw null; }\n public virtual System.Collections.ICollection Values { get => throw null; }\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Collections.Specialized, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Specialized\n{\npublic abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Collections.IEnumerable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null;\n public virtual int Count { get => throw null; }\n public virtual System.Collections.IEnumerator GetEnumerator() => throw null;\n public virtual void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public virtual void OnDeserialization(object sender) => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\npublic class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n public string this[string name] { get => throw null; set => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.ComponentModel.TypeConverter, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace ComponentModel\n{\npublic class ComponentConverter : System.ComponentModel.ReferenceConverter\n{\n}\n\npublic class DefaultEventAttribute : System.Attribute\n{\n public DefaultEventAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\npublic class DefaultPropertyAttribute : System.Attribute\n{\n public DefaultPropertyAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\npublic class ReferenceConverter : System.ComponentModel.TypeConverter\n{\n}\n\npublic class TypeConverter\n{\n}\n\n}\nnamespace Timers\n{\npublic class TimersDescriptionAttribute\n{\n public TimersDescriptionAttribute(string description) => throw null;\n internal TimersDescriptionAttribute(string description, string unused) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class Enumerable\n{\n public static System.Collections.Generic.IEnumerable Select(this System.Collections.Generic.IEnumerable source, System.Func selector) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Expressions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic interface IQueryable : System.Collections.IEnumerable\n{\n}\n\n}\nnamespace Runtime\n{\nnamespace CompilerServices\n{\npublic class CallSite\n{\n internal CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) => throw null;\n}\n\npublic class CallSite : System.Runtime.CompilerServices.CallSite where T: class\n{\n private CallSite() : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n private CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n}\n\npublic abstract class CallSiteBinder\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Parallel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class ParallelEnumerable\n{\n public static System.Linq.ParallelQuery AsParallel(this System.Collections.IEnumerable source) => throw null;\n}\n\npublic class ParallelQuery : System.Collections.IEnumerable\n{\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n internal ParallelQuery(System.Linq.Parallel.QuerySettings specifiedSettings) => throw null;\n}\n\nnamespace Parallel\n{\ninternal struct QuerySettings\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Linq.Queryable, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Linq\n{\npublic static class Queryable\n{\n public static System.Linq.IQueryable AsQueryable(this System.Collections.IEnumerable source) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.ObjectModel, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace ComponentModel\n{\npublic class TypeConverterAttribute : System.Attribute\n{\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n public TypeConverterAttribute() => throw null;\n public TypeConverterAttribute(System.Type type) => throw null;\n public TypeConverterAttribute(string typeName) => throw null;\n}\n\npublic class TypeDescriptionProviderAttribute : System.Attribute\n{\n public TypeDescriptionProviderAttribute(System.Type type) => throw null;\n public TypeDescriptionProviderAttribute(string typeName) => throw null;\n}\n\n}\nnamespace Windows\n{\nnamespace Markup\n{\npublic class ValueSerializerAttribute : System.Attribute\n{\n public ValueSerializerAttribute(System.Type valueSerializerType) => throw null;\n public ValueSerializerAttribute(string valueSerializerTypeName) => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Private.Uri, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\npublic class Uri : System.Runtime.Serialization.ISerializable\n{\n public override bool Equals(object comparand) => throw null;\n public override int GetHashCode() => throw null;\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null;\n public override string ToString() => throw null;\n}\n\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Runtime.Serialization.Primitives, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Runtime\n{\nnamespace Serialization\n{\npublic class DataContractAttribute : System.Attribute\n{\n public DataContractAttribute() => throw null;\n}\n\npublic class DataMemberAttribute : System.Attribute\n{\n public DataMemberAttribute() => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Text.RegularExpressions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`.\n\nnamespace System\n{\nnamespace Text\n{\nnamespace RegularExpressions\n{\npublic class Capture\n{\n internal Capture(string text, int index, int length) => throw null;\n public override string ToString() => throw null;\n}\n\npublic class GeneratedRegexAttribute : System.Attribute\n{\n public GeneratedRegexAttribute(string pattern) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, int matchTimeoutMilliseconds) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, int matchTimeoutMilliseconds, string cultureName) => throw null;\n public GeneratedRegexAttribute(string pattern, System.Text.RegularExpressions.RegexOptions options, string cultureName) => throw null;\n}\n\npublic class Group : System.Text.RegularExpressions.Capture\n{\n internal Group(string text, int[] caps, int capcount, string name) : base(default(string), default(int), default(int)) => throw null;\n}\n\npublic class Match : System.Text.RegularExpressions.Group\n{\n internal Match(System.Text.RegularExpressions.Regex regex, int capcount, string text, int textLength) : base(default(string), default(int[]), default(int), default(string)) => throw null;\n}\n\npublic class Regex : System.Runtime.Serialization.ISerializable\n{\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null;\n public System.Text.RegularExpressions.Match Match(string input) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public Regex(string pattern) => throw null;\n public Regex(string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public string Replace(string input, string replacement) => throw null;\n public override string ToString() => throw null;\n}\n\n[System.Flags]\npublic enum RegexOptions : int\n{\n IgnoreCase = 1,\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n// Generated from `System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`.\n\nnamespace System\n{\nnamespace Web\n{\npublic class HtmlString : System.Web.IHtmlString\n{\n}\n\npublic class HttpContextBase\n{\n public virtual System.Web.HttpRequestBase Request { get => throw null; }\n}\n\npublic class HttpCookie\n{\n}\n\npublic abstract class HttpCookieCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n}\n\npublic class HttpRequest\n{\n}\n\npublic class HttpRequestBase\n{\n public virtual System.Collections.Specialized.NameValueCollection QueryString { get => throw null; }\n}\n\npublic class HttpResponse\n{\n}\n\npublic class HttpResponseBase\n{\n}\n\npublic class HttpServerUtility\n{\n}\n\npublic interface IHtmlString\n{\n}\n\npublic interface IHttpHandler\n{\n}\n\npublic interface IServiceProvider\n{\n}\n\npublic class UnvalidatedRequestValues\n{\n}\n\npublic class UnvalidatedRequestValuesBase\n{\n}\n\nnamespace Mvc\n{\npublic class ActionMethodSelectorAttribute : System.Attribute\n{\n}\n\npublic class ActionResult\n{\n}\n\npublic class ControllerContext\n{\n}\n\npublic class FilterAttribute : System.Attribute\n{\n}\n\npublic class GlobalFilterCollection\n{\n}\n\ninternal interface IFilterProvider\n{\n}\n\npublic interface IViewDataContainer\n{\n}\n\npublic class ViewContext : System.Web.Mvc.ControllerContext\n{\n}\n\npublic class ViewResult : System.Web.Mvc.ViewResultBase\n{\n}\n\npublic class ViewResultBase : System.Web.Mvc.ActionResult\n{\n}\n\n}\nnamespace Routing\n{\npublic class RequestContext\n{\n}\n\npublic class Route\n{\n}\n\npublic class RouteCollection\n{\n}\n\npublic class RouteTable\n{\n}\n\n}\nnamespace Script\n{\nnamespace Serialization\n{\npublic abstract class JavaScriptTypeResolver\n{\n}\n\n}\n}\nnamespace Security\n{\npublic class MembershipUser\n{\n}\n\n}\nnamespace SessionState\n{\npublic class HttpSessionState\n{\n}\n\n}\nnamespace UI\n{\npublic class Control\n{\n}\n\nnamespace WebControls\n{\npublic class WebControl : System.Web.UI.Control\n{\n}\n\n}\n}\n}\n}\n\n\n | diff --git a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.cs b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.cs index aaef1776cd3..1ec45beac39 100644 --- a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.cs +++ b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.cs @@ -25,4 +25,10 @@ public class LibraryUsage { var guid1 = Guid.Parse("{12345678-1234-1234-1234-123456789012}"); // Has no flow summary } + + public void M4() + { + var d = new Dictionary(); // Uninteresting parameterless constructor + var e = d.Keys.GetEnumerator().MoveNext(); // Methods on nested classes + } } diff --git a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.expected b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.expected index 7b5c4c57661..54f3920572e 100644 --- a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.expected +++ b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/ExternalLibraryUsage.expected @@ -1,2 +1,2 @@ | System | 5 | -| System.Collections.Generic | 2 | +| System.Collections.Generic | 5 | diff --git a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/SupportedExternalTaint.expected b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/SupportedExternalTaint.expected index b386e4acb38..c9f63591888 100644 --- a/csharp/ql/test/query-tests/Telemetry/LibraryUsage/SupportedExternalTaint.expected +++ b/csharp/ql/test/query-tests/Telemetry/LibraryUsage/SupportedExternalTaint.expected @@ -1 +1,3 @@ | System.Collections.Generic#List<>.Add(T) | 2 | +| System.Collections.Generic#Dictionary<,>+KeyCollection.GetEnumerator() | 1 | +| System.Collections.Generic#Dictionary<,>.get_Keys() | 1 | diff --git a/csharp/ql/test/resources/assemblies/System.Data.dll b/csharp/ql/test/resources/assemblies/System.Data.dll deleted file mode 100644 index 070caaa81f3..00000000000 Binary files a/csharp/ql/test/resources/assemblies/System.Data.dll and /dev/null differ diff --git a/csharp/ql/test/resources/assemblies/System.Web.ApplicationServices.dll b/csharp/ql/test/resources/assemblies/System.Web.ApplicationServices.dll deleted file mode 100644 index 85db5a3a7e4..00000000000 Binary files a/csharp/ql/test/resources/assemblies/System.Web.ApplicationServices.dll and /dev/null differ diff --git a/csharp/ql/test/resources/stubs/System.Web.cs b/csharp/ql/test/resources/stubs/System.Web.cs index 725b672fbe8..c3c8a0a753f 100644 --- a/csharp/ql/test/resources/stubs/System.Web.cs +++ b/csharp/ql/test/resources/stubs/System.Web.cs @@ -48,6 +48,8 @@ namespace System.Web public class HttpApplication : IHttpHandler { public HttpServerUtility Server { get; } + + public Routing.RouteTable RouteTable { get; } } } @@ -79,6 +81,7 @@ namespace System.Web.UI public class Page { + public System.Security.Principal.IPrincipal User { get; } } interface IPostBackDataHandler @@ -156,6 +159,7 @@ namespace System.Web public class HttpResponse { public void Write(object o) { } + public void Write(string s) { } public void WriteFile(string s) { } public HttpCookieCollection Cookies => null; public void AddHeader(string name, string value) { } @@ -300,6 +304,19 @@ namespace System.Web.Routing public class RequestContext { } + + public class Route + { + } + + public class RouteTable { + public RouteCollection Routes { get; } + } + + public class RouteCollection + { + public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess) { return null; } + } } namespace System.Web.Security diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index 70e4321667f..c87b479857e 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -126,7 +126,7 @@ body must also be annotated with ``cached``, otherwise a compiler error is repor ``deprecated`` ============== -**Available for**: |classes|, |algebraic datatypes|, |member predicates|, |non-member predicates|, |fields|, |modules|, |aliases| +**Available for**: |classes|, |algebraic datatypes|, |member predicates|, |non-member predicates|, |imports|, |fields|, |modules|, |aliases| The ``deprecated`` annotation is applied to names that are outdated and scheduled for removal in a future release of QL. diff --git a/docs/codeql/ql-language-reference/modules.rst b/docs/codeql/ql-language-reference/modules.rst index ee0d1f7966b..ec4097ae019 100644 --- a/docs/codeql/ql-language-reference/modules.rst +++ b/docs/codeql/ql-language-reference/modules.rst @@ -139,7 +139,7 @@ Parameterized modules ===================== Parameterized modules are QL's approach to generic programming. -Similar to explicit modules, parameterized modules are defined within other modules using the keywork ``module``. +Similar to explicit modules, parameterized modules are defined within other modules using the keyword ``module``. In addition to the module name, parameterized modules declare one or more parameters between the name and the module body. For example, consider the module ``M``, which takes two predicate parameters and defines a new predicate @@ -264,7 +264,12 @@ Import statements are used for importing modules. They are of the form: Import statements are usually listed at the beginning of the module. Each import statement imports one module. You can import multiple modules by including multiple import statements (one for each module you want to import). -An import statement can also be :ref:`annotated ` with ``private``. + +An import statement can also be :ref:`annotated ` with +``private`` or ``deprecated``. If an import statement is annotated with +``private`` then the imported names are not reexported. If an imported name is +only reachable through deprecated imports in a given context then usage of the +name in that context will generate deprecation warnings. You can import a module under a different name using the ``as`` keyword, for example ``import javascript as js``. diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 71dcbdce571..04cddf80a87 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -199,24 +199,37 @@ Kinds of modules A module may be: +- A *declared module*, if it is defined by the ``module`` or ``ql`` grammar rules. +- A *non-declared module*, if it is not a *declared module*. + +A *declared module* may be: + - A *file module*, if it is defined implicitly by a QL file or a QLL file. - A *query module*, if it is defined implicitly by a QL file. - A *library module*, if it is not a query module. +A *non-declared module* may be: + +- A *built-in module*. +- An *instantiated module* (see :ref:`Parameterized modules`). +- An *instantiation-nested module* (see :ref:`Parameterized modules`). + A query module must contain one or more queries. Import directives ~~~~~~~~~~~~~~~~~ -An import directive refers to a module identifier: +An import directive refers to a module expression: :: import ::= annotations "import" importModuleExpr ("as" modulename)? - qualId ::= simpleId | qualId "." simpleId + importModuleExpr ::= importModuleId arguments? - importModuleExpr ::= qualId | importModuleExpr "::" modulename arguments? + importModuleId ::= qualId | importModuleExpr "::" modulename + + qualId ::= simpleId | qualId "." simpleId arguments ::= "<" argument ("," argument)* ">" @@ -249,6 +262,73 @@ For qualified identifiers (``a.b``): A qualified module identifier is only valid within an import. +Module expressions contain a module identifier and optional arguments. If arguments are present, the module expression instantiates the module that the identifier resolves to (see :ref:`Parameterized modules`). + +Module expressions cannot refer to :ref:`Parameterized modules`. Instead, parameterized modules must always be fully instantiated when they are referenced. + +.. _Parameterized modules: + +Parameterized modules +~~~~~~~~~~~~~~~~~~~~~ + +Modules with parameters are called *parameterized modules*. A *declared module* has parameters if and only if it is a *library module* and its declaration uses the ``parameters`` syntax. + +*Parameterized modules* can be instantiated with arguments that match the signatures of the parameters: + +- Given a type signature, the corresponding argument must be a type that transitively extends the specified ``extends`` types and is a transitive subtype of the specified ``instanceof`` types. +- Given a predicate signature, the corresponding argument must be a predicate with exactly matching relational types. +- Given a module signature, the corresponding argument must be a module that exports all the specified type and predicate members. Furthermore, the module must be declared as matching the module signature via the ``implements`` syntax. + +The result of instantiating a *parameterized module* is an *instantiated module*. The parameterized module is called the *underlying module* of the *instantiated module*. + +Instantiation-relative and instantiation-nested entities +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Given an *instantiated module*, every entity has a corresponding entity called the *instantiation-relative* entity, which is determined as follows: + +- If the entity is the *underlying module*, its *instantiation-relative* entity is the *instantiated module*. +- If the entity is a parameter of the *underlying module*, its *instantiation-relative* entity is the corresponding argument. +- If the entity is declared inside the *underlying module* or its nested modules, its *instantiation-relative* entity is an *instantiation-nested* entity that is generated by the module instantiation. Parameters of any modules that are nested inside the *underlying module* are considered declared inside the module for this purpose. +- Otherwise, the entity's *instantiation-relative* entity is the initial entity itself. + +When the *instantiation-relative* entity of an entity is an *instantiation-nested* entity, then the initial entity is called the *underlying nested* entity of the *instantiation-nested* entity*, the *instantiated module* is called the *instantiation root* of the *instantiation-nested* entity, and the *underlying module* is called the *underlying root* of the *instantiation-nested* entity. + +The components of an *instantiation-nested* entity are the *instantiation-relative* entities of the components of its *underlying nested* entity. Among other things, this applies to: + +- values in the exported environments of *instantiation-nested* modules, +- relational types of *instantiation-nested* predicates and predicate signatures, +- required signatures of *instantiation-nested* parameters, +- parameters of an *instantiation-nested* *parameterized module*, +- fields and member predicates of *instantiation-nested* dataclasses. + +Given an *instantiated module*, any alias in the program has a corresponding alias called the *instantiation-relative* alias, which targets the *instantiation-relative* entity. + +Applicative instantiation +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Every entity has an *underlying completely uninstantiated* entity that is determined as follows: + +- If the entity is an *instantiated module*, its *underlying completely uninstantiated* entity is the *underlying completely uninstantiated* entity of the *underlying module*. +- If the entity is an *instantiation-nested* entity, its *underlying completely uninstantiated* entity is the *underlying completely uninstantiated* entity of the *underlying nested* entity. +- Otherwise, its *underlying completely uninstantiated* entity is the entity itself. + +An entity is called *completely uninstantiated* entity if it is its own *underlying completely uninstantiated* entity. + +Every *completely uninstantiated* entity has a *relevant set of parameters*, which is the set of all parameters of all the modules that the entity is transitively nested inside. For entities that are not nested inside any modules, the *relevant set of parameters* is empty. + +Note that the *relevant set of parameters* by construction contains only *completely uninstantiated* parameters. + +For a *completely uninstantiated* parameter, the *bottom-up instantiation-resolution* relative to an entity is defined as: + +- If the entity is an *instantiated module* or an *instantiation-nested* entity, the *bottom-up instantiation-resolution* is the *instantiation-relative* entity of the *bottom-up instantiation-resolution* relative to the *underlying module*. +- Otherwise, the *bottom-up instantiation-resolution* is the parameter itself. + +An entity is called *fully instantiated* if none of the *bottom-up instantiation-resolutions* of the parameters in the *relevant set of parameters* of the entity's *underlying completely uninstantiated* entity are parameters. + +Two *instantiated modules* or two *instantiation-nested* entities are considered *equivalent* if they have the same *underlying completely uninstantiated* entity and each parameter in its *relevant set of parameters* has the same *bottom-up instantiation-resolution* relative to either *instantiated module*. + +Module instantiation is applicative, meaning that *equivalent* *instantiated modules* and *equivalent* *instantiation-nested* entities are indistinguishable. + Module references and active modules ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -268,7 +348,7 @@ QL is a typed language. This section specifies the kinds of types available, the Kinds of types ~~~~~~~~~~~~~~ -Types in QL are either *primitive* types, *database* types, *class* types, *character* types or *class domain* types. +Types in QL are either *primitive* types, *database* types, *class* types, *character* types, *class domain* types, type *parameters*, or *instantiation-nested* types. The primitive types are ``boolean``, ``date``, ``float``, ``int``, and ``string``. @@ -289,7 +369,9 @@ With the exception of class domain types and character types (which cannot be re type ::= (moduleExpr "::")? classname | dbasetype | "boolean" | "date" | "float" | "int" | "string" - moduleExpr ::= modulename arguments? | moduleExpr "::" modulename arguments? + moduleExpr ::= moduleId arguments? + + moduleId ::= modulename | moduleExpr "::" modulename A type reference is resolved to a type as follows: @@ -712,7 +794,7 @@ The following table summarizes the syntactic constructs which can be marked with +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``private`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``deprecated`` | yes | | yes | yes | | yes | yes | yes | yes | +| ``deprecated`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``override`` | | | yes | | | yes | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ @@ -877,13 +959,18 @@ The types specified after the ``extends`` keyword are the *base types* of the cl The types specified after the ``instanceof`` keyword are the *instanceof types* of the class. -A class type is said to *inherit* from the base types. In addition, inheritance is transitive: If a type ``A`` inherits from a type ``B``, and ``B`` inherits from a type ``C``, then ``A`` inherits from ``C``. +A class type is said to *final inherit* from base types that are final or referenced through final aliases, and a class type is said to *inherit* from its other base types. In addition, inheritance is transitive: + +- If a type ``A`` inherits from a type ``B``, and ``B`` inherits from a type ``C``, then ``A`` inherits from ``C``. +- If a type ``A`` final inherits from a type ``B``, and ``B`` inherits from a type ``C``, then ``A`` final inherits from ``C``. +- If a type ``A`` inherits from a type ``B``, and ``B`` final inherits from a type ``C``, then ``A`` final inherits from ``C``. +- If a type ``A`` final inherits from a type ``B``, and ``B`` final inherits from a type ``C``, then ``A`` final inherits from ``C``. A class adds a mapping from the class name to the class declaration to the current module's declared type environment. A valid class can be annotated with ``abstract``, ``final``, ``library``, and ``private``. Any other annotation renders the class invalid. -A valid class may not inherit from a final class, from itself, or from more than one primitive type. +A valid class may not inherit from itself, or from more than one primitive type. The set of types that a valid class inherits from must be disjoint from the set of types that it final inherits from. A valid class must have at least one base type or instanceof type. @@ -893,9 +980,10 @@ Class dependencies The program is invalid if there is a cycle of class dependencies. The following are class dependencies: + - ``C`` depends on ``C.C`` - ``C.C`` depends on ``C.extends`` -- If ``C`` is abstract then it depends on all classes ``D`` such that ``C`` is a base type of ``D``. +- If ``C`` is abstract then it depends on all classes ``D`` such that ``C`` is a base type of ``D`` and ``D`` inherits from ``C``. - ``C.extends`` depends on ``D.D`` for each base type ``D`` of ``C``. - ``C.extends`` depends on ``D`` for each instanceof type ``D`` of ``C``. @@ -947,7 +1035,9 @@ A valid member predicate can be annotated with ``abstract``, ``cached``, ``final If a type is provided before the name of the member predicate, then that type is the *result type* of the predicate. Otherwise, the predicate has no result type. The types of the variables in the ``var_decls`` are called the predicate's *argument types*. -A member predicate ``p`` with enclosing class ``C`` *overrides* a member predicate ``p'`` with enclosing class ``D`` when ``C`` inherits from ``D``, ``p'`` is visible in ``C``, and both ``p`` and ``p'`` have the same name and the same arity. An overriding predicate must have the same sequence of argument types as any predicates which it overrides, otherwise the program is invalid. +A member predicate ``p`` with enclosing class ``C`` *overrides* a member predicate ``p'`` with enclosing class ``D`` when ``p`` is annotated ``overrride``, ``C`` inherits from ``D``, ``p'`` is visible in ``C``, ``p'`` is not final, and both ``p`` and ``p'`` have the same name and the same arity. An overriding predicate must have the same sequence of argument types as any predicates which it overrides, otherwise the program is invalid. + +A member predicate ``p`` with enclosing class ``C`` *shadows* a member predicate ``p'`` with enclosing class ``D`` when ``C`` final inherits from ``D``, ``p'`` is visible in ``C``, and both ``p`` and ``p'`` have the same name and the same arity. Additionally, a member predicate ``p`` with enclosing class ``C`` *shadows* a member predicate ``p'`` with enclosing class ``D`` when ``C`` inherits from ``D``, ``p'`` is visible in ``C``, ``p'`` is final, and both ``p`` and ``p'`` have the same name and the same arity. Member predicates have one or more *root definitions*. If a member predicate overrides no other member predicate, then it is its own root definition. Otherwise, its root definitions are those of any member predicate that it overrides. @@ -961,7 +1051,9 @@ A class may not inherit from a class with an abstract member predicate unless it A valid class must include a non-private predicate named ``toString`` with no arguments and a result type of ``string``, or it must inherit from a class that does. -A valid class may not inherit from two different classes that include a predicate with the same name and number of arguments, unless either one of the predicates overrides the other, or the class defines a predicate that overrides both of them. +A valid class may not inherit from two different classes that include a predicate with the same name and number of arguments, unless either one of the predicates overrides or shadows the other, or the class defines a predicate that overrides or shadows both of them. + +A valid class may not final inherit from two different classes that include a predicate with the same name and number of arguments, unless either one of the predicates overrides or shadows the other, or the class defines a predicate that shadows both of them. The typing environment for a member predicate or character is the same as if it were a non-member predicate, except that it additionally maps ``this`` to a type and also maps any fields on a class to a type. If the member is a character, then the typing environment maps ``this`` to the class domain type of the class. Otherwise, it maps ``this`` to the class type of the class itself. The typing environment also maps any field to the type of the field. @@ -971,9 +1063,13 @@ Fields A field declaration introduces a mapping from the field name to the field declaration in the class's declared field environment. -A field ``f`` with enclosing class ``C`` *overrides* a field ``f'`` with enclosing class ``D`` when ``f`` is annotated ``override``, ``C`` inherits from ``D``, ``p'`` is visible in ``C``, and both ``p`` and ``p'`` have the same name. +A field ``f`` with enclosing class ``C`` *overrides* a field ``f'`` with enclosing class ``D`` when ``f`` is annotated ``override``, ``C`` inherits from ``D``, ``p'`` is visible in ``C``, ``p'`` is not final, and both ``p`` and ``p'`` have the same name. -A valid class may not inherit from two different classes that include a field with the same name, unless either one of the fields overrides the other, or the class defines a field that overrides both of them. +A field ``f`` with enclosing class ``C`` *shadows* a field ``f'`` with enclosing class ``D`` when ``C`` final inherits from ``D``, ``p'`` is visible in ``C``, and both ``p`` and ``p'`` have the same name. Additionally, a field ``f`` with enclosing class ``C`` *shadows* a field ``f'`` with enclosing class ``D`` when ``C`` inherits from ``D``, ``p'`` is visible in ``C``, ``p'`` is final, and both ``p`` and ``p'`` have the same name. + +A valid class may not inherit from two different classes that include a field with the same name, unless either one of the fields overrides or shadows the other, or the class defines a field that overrides or shadows both of them. + +A valid class may not final inherit from two different classes that include a field with the same name, unless either one of the fields overrides or shadows the other, or the class defines a field that shadows both of them. A valid field must override another field if it is annotated ``override``. @@ -1236,15 +1332,15 @@ The type environment for the arguments is the same as for the call. A valid call with results *resolves* to a set of predicates. The ways a call can resolve are as follows: -- If the call has no receiver and the predicate name is a simple identifier, then the predicate is resolved by looking up its name and arity in the visible member-predicate environment of the enclosing class. +- If the call has no receiver and the predicate reference is a simple identifier, then the call is resolved by looking up the predicate reference and arity in the visible predicate environment of the enclosing class. -- If the call has no receiver and the predicate name is a simple identifier, then the predicate is resolved by looking up its name and arity in the visible predicate environment of the enclosing module. +- If the call has no receiver and the predicate reference is a simple identifier, then the call is resolved by looking up the predicate reference and arity in the visible predicate environment of the enclosing module. -- If the call has no receiver and the predicate name is a selection identifier, then the qualifier is resolved as a module (see "`Module resolution <#module-resolution>`__"). The identifier is then resolved in the exported predicate environment of the qualifier module. +- If the call has no receiver and the predicate reference is a selection identifier, then the qualifier is resolved as a module (see "`Module resolution <#module-resolution>`__") and the call is resolved by looking up the identifier in the exported predicate environment of the qualifier module. -- If the type of the receiver is the same as the enclosing class, the predicate is resolved by looking up its name and arity in the visible predicate environment of the class. +- If the the call has a receiver and the type of the receiver is the same as the enclosing class, the call is resolved by looking up the predicate name and arity in the visible predicate environment of the enclosing class. -- If the type of the receiver is not the same as the enclosing class, the predicate is resolved by looking up its name and arity in the exported predicate environment of the class or domain type. +- If the the call has a receiver and the type of the receiver is not the same as the enclosing class, the call is resolved by looking up the predicate name and arity in the exported predicate environment of the type of the receiver. If all the predicates that the call resolves to are declared on a primitive type, we then restrict to the set of predicates where each argument of the call is a subtype of the corresponding predicate argument type. Then we find all predicates ``p`` from this new set such that there is not another predicate ``p'`` where each argument of ``p'`` is a subtype of the corresponding argument in ``p``. We then say the call resolves to this set instead. @@ -1267,9 +1363,10 @@ If the call includes a closure, then all declared predicate arguments, the enclo A call to a member predicate may be a *direct* call: - If the receiver is not a super expression it is not direct. - - If the receiver is ``A.super`` and ``A`` is an instanceof type and not a base type then it is not direct. - - If the receiver is ``A.super`` and ``A`` is a base type type and not an instanceof type then it is direct. - - If the receiver is ``A.super`` and ``A`` is a base type and an instanceof type then the call is not valid. + - If the receiver is ``A.super`` and ``A`` is an instanceof type and not a base type that is inherited from then it is not direct. + - If the receiver is ``A.super`` and ``A`` is a base type that is final inherited from then it is not direct. + - If the receiver is ``A.super`` and ``A`` is a base type that is inherited from and not an instanceof type then it is direct. + - If the receiver is ``A.super`` and ``A`` is a base type that is inherited from and an instanceof type then the call is not valid. - If the receiver is ``super`` and the member predicate is in the exported member predicate environment of an instanceof type and not in the exported member predicate environment of a base type then it isn't direct. - If the receiver is ``super`` and the member predicate is in the exported member predicate environment of a base type and not in the exported member predicate environment of an instanceof type then it is direct. - If the receiver is ``super`` and the member predicate is in the exported member predicate environment of a base type and in the exported member predicate environment of an instanceof type then the call is not valid. @@ -1960,10 +2057,12 @@ Stratification A QL program can be *stratified* to a sequence of *layers*. A layer is a set of predicates and types. -A valid stratification must include each predicate and type in the QL program. It must not include any other predicates or types. +A valid stratification must include each predicate and type in the QL program that is *fully instantiated*. It must not include any other predicates or types. A valid stratification must not include the same predicate in multiple layers. +Each non-abstract predicate has an associated body. For predicates inside *declared modules*, this is the predicate declaration. The body of an *instantiation-nested* predicate is the body of the *underlying nested* predicate where all references and calls have been substituted with the *instantiation-relative* entity or alias. + Formulas, variable declarations and expressions within a predicate body have a *negation polarity* that is positive, negative, or zero. Positive and negative are opposites of each other, while zero is the opposite of itself. The negation polarity of a formula or expression is then determined as follows: - The body of a predicate is positive. @@ -2039,7 +2138,7 @@ Predicates, and types can *depend* and *strictly depend* on each other. Such dep - For each class ``C`` with a characteristic predicate, ``C.C`` depends on the characteristic predicate. -- For each abstract class ``A`` in the program, for each type ``C`` that has ``A`` as a base type, ``A.class`` depends on ``C.class``. +- For each abstract class ``A`` in the program, for each type ``C`` that inherits from ``A`` and has ``A`` as a base type, ``A.class`` depends on ``C.class``. - A predicate with a higher-order body may strictly depend or depend on each predicate reference within the body. The exact dependencies are left unspecified. @@ -2091,7 +2190,7 @@ Each layer of the stratification is *populated* in order. To populate a layer, e - To populate the type ``C.class`` for an abstract class type ``C``, identify each named tuple that has the following properties: - It is a member of ``C.C``. - - For each class ``D`` that has ``C`` as a base type then there is a named tuple with variables from the public fields of ``C`` and ``this`` that the given tuple and a tuple in ``D.class`` both extend. + - For each class ``D`` that inherits from ``C`` and has ``C`` as a base type then there is a named tuple with variables from the public fields of ``C`` and ``this`` that the given tuple and a tuple in ``D.class`` both extend. Query evaluation diff --git a/docs/codeql/ql-language-reference/types.rst b/docs/codeql/ql-language-reference/types.rst index db9a6a4cc52..12aadc7213a 100644 --- a/docs/codeql/ql-language-reference/types.rst +++ b/docs/codeql/ql-language-reference/types.rst @@ -112,12 +112,13 @@ the supertypes (that is, they are in the :ref:`class domain type ` A class inherits all member predicates from its base types. A class can extend multiple types. For more information, see ":ref:`multiple-inheritance`." +A class can extend final types (or final aliases of types), see ":ref:`final-extensions`." Classes can also specialise other types without extending the class interface via `instanceof`, see ":ref:`instanceof-extensions`.". To be valid, a class: - Must not extend itself. - - Must not extend a :ref:`final` class. + - Must not (transitively) extend a non-final type and a final alias of that same type. - Must not extend types that are incompatible. For more information, see ":ref:`type-compatibility`." You can also annotate a class. See the list of :ref:`annotations ` @@ -134,8 +135,10 @@ The body of a class can contain: - Any number of :ref:`field ` declarations. When you define a class, that class also inherits all non-:ref:`private` member predicates and -fields from its supertypes. You can :ref:`override ` those -predicates and fields to give them a more specific definition. +fields from its supertypes. + +Depending on whether they are final, you can :ref:`override ` or +:ref:`shadow ` those predicates and fields to give them a more specific definition. .. _characteristic-predicates: @@ -242,6 +245,7 @@ A class :ref:`annotated ` with ``abstract``, known as an **abstract** the values in a larger type. However, an abstract class is defined as the union of its subclasses. In particular, for a value to be in an abstract class, it must satisfy the characteristic predicate of the class itself **and** the characteristic predicate of a subclass. +Note that final extensions are not considered subclasses in this context. An abstract class is useful if you want to group multiple existing classes together under a common name. You can then define member predicates on all those classes. You can also @@ -281,9 +285,9 @@ there is no need to update the queries that rely on it. Overriding member predicates ============================ -If a class inherits a member predicate from a supertype, you can **override** the inherited -definition. You do this by defining a member predicate with the same name and arity as the -inherited predicate, and by adding the ``override`` :ref:`annotation `. +If a class inherits a member predicate from a non-final supertype, you can **override** the +inherited definition. You do this by defining a member predicate with the same name and arity +as the inherited predicate, and by adding the ``override`` :ref:`annotation `. This is useful if you want to refine the predicate to give a more specific result for the values in the subclass. @@ -382,6 +386,68 @@ from ``OneTwoThree`` and ``int``. must :ref:`override ` those definitions to avoid ambiguity. :ref:`Super expressions ` are often useful in this situation. +.. _final-extensions: + +Final extensions +================ + +A class can extend final types or final aliases of types. In that case, it inherits final +versions of all the member predicates and fields of those supertypes. +Member predicates that are inherited through final extensions cannot be overridden, +but they can be shadowed. + +For example, extending the class from the :ref:`first example `: + +.. code-block:: ql + + final class FinalOneTwoThree = OneTwoThree; + + class OneTwoFinalExtension extends FinalOneTwoThree { + OneTwoFinalExtension() { + this = 1 or this = 2 + } + + string getAString() { + result = "One or two: " + this.toString() + } + } + +The member predicate ``getAString()`` shadows the original definition of ``getAString()`` +from ``OneTwoThree``. + +Different to overriding (see ":ref:`overriding-member-predicates`"), +final extensions leave the extended type unchanged: + +.. code-block:: ql + + from OneTwoTree o + select o, o.getAString() + ++---+-------------------------+ +| o | ``getAString()`` result | ++===+=========================+ +| 1 | One, two or three: 1 | ++---+-------------------------+ +| 2 | One, two or three: 2 | ++---+-------------------------+ +| 3 | One, two or three: 3 | ++---+-------------------------+ + +However, when calling ``getAString()`` on ``OneTwoFinalExtension``, the original definition is shadowed: + +.. code-block:: ql + + from OneTwoFinalExtension o + select o, o.getAString() + ++---+-------------------------+ +| o | ``getAString()`` result | ++===+=========================+ +| 1 | One or two: 1 | ++---+-------------------------+ +| 2 | One or two: 2 | ++---+-------------------------+ + .. _instanceof-extensions: Non-extending subtypes diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 0d38f92a8c8..42d4eaad956 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -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.2",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" - Swift [10]_,"Swift 5.4-5.7","Swift compiler","``.swift``" + Swift [10]_,"Swift 5.4-5.8.1","Swift compiler","``.swift``" TypeScript [11]_,"2.6-5.1",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" .. container:: footnote-group @@ -38,5 +38,5 @@ .. [7] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. .. [8] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. .. [9] Requires glibc 2.17. - .. [10] Swift support is currently in beta. Support for the analysis of Swift 5.4-5.7 requires macOS. Swift 5.7.3 can also be analyzed using Linux. + .. [10] Swift support is currently in beta. Support for the analysis of Swift 5.4-5.8.1 requires macOS or Linux. .. [11] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. diff --git a/go/downgrades/qlpack.yml b/go/downgrades/qlpack.yml index d3e056bea64..7e8e0022eb0 100644 --- a/go/downgrades/qlpack.yml +++ b/go/downgrades/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/go-downgrades groups: go downgrades: . library: true +warnOnImplicitThis: true diff --git a/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml b/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml index ca0a6732f5a..7c42cb6974c 100644 --- a/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml +++ b/go/external-packs/codeql/suite-helpers/0.0.2/qlpack.yml @@ -1,3 +1,4 @@ name: codeql/suite-helpers version: 0.0.2 library: true +warnOnImplicitThis: true diff --git a/go/ql/config/legacy-support/qlpack.yml b/go/ql/config/legacy-support/qlpack.yml index bf3ee4d72a6..23ba44acd80 100644 --- a/go/ql/config/legacy-support/qlpack.yml +++ b/go/ql/config/legacy-support/qlpack.yml @@ -2,3 +2,4 @@ name: legacy-libraries-go version: 0.0.0 # Note libraryPathDependencies is obsolete and should not be used in new qlpacks. libraryPathDependencies: codeql-go +warnOnImplicitThis: true diff --git a/go/ql/examples/qlpack.yml b/go/ql/examples/qlpack.yml index 1f2ca2cd40a..006eb3c17b3 100644 --- a/go/ql/examples/qlpack.yml +++ b/go/ql/examples/qlpack.yml @@ -4,3 +4,4 @@ groups: - examples dependencies: codeql/go-all: ${workspace} +warnOnImplicitThis: true diff --git a/go/ql/integration-tests/all-platforms/go/qlpack.yml b/go/ql/integration-tests/all-platforms/go/qlpack.yml index 3a018bff52a..2fc2dd566dd 100644 --- a/go/ql/integration-tests/all-platforms/go/qlpack.yml +++ b/go/ql/integration-tests/all-platforms/go/qlpack.yml @@ -2,3 +2,4 @@ dependencies: codeql/go-all: '*' codeql/go-tests: '*' codeql/go-queries: '*' +warnOnImplicitThis: true diff --git a/go/ql/integration-tests/linux-only/go/qlpack.yml b/go/ql/integration-tests/linux-only/go/qlpack.yml index 3a018bff52a..2fc2dd566dd 100644 --- a/go/ql/integration-tests/linux-only/go/qlpack.yml +++ b/go/ql/integration-tests/linux-only/go/qlpack.yml @@ -2,3 +2,4 @@ dependencies: codeql/go-all: '*' codeql/go-tests: '*' codeql/go-queries: '*' +warnOnImplicitThis: true diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 0e1ac53f289..6a9a07074b8 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.6.0 + +### Deprecated APIs + +* The `LogInjection::Configuration` taint flow configuration class has been deprecated. Use the `LogInjection::Flow` module instead. + +### Minor Analysis Improvements + +* When a result of path query flows through a function modeled using `DataFlow::FunctionModel` or `TaintTracking::FunctionModel`, the path now includes nodes corresponding to the input and output to the function. This brings it in line with functions modeled using Models-as-Data. + ## 0.5.4 No user-facing changes. diff --git a/go/ql/lib/change-notes/released/0.6.0.md b/go/ql/lib/change-notes/released/0.6.0.md new file mode 100644 index 00000000000..23b2a7f6847 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.6.0.md @@ -0,0 +1,9 @@ +## 0.6.0 + +### Deprecated APIs + +* The `LogInjection::Configuration` taint flow configuration class has been deprecated. Use the `LogInjection::Flow` module instead. + +### Minor Analysis Improvements + +* When a result of path query flows through a function modeled using `DataFlow::FunctionModel` or `TaintTracking::FunctionModel`, the path now includes nodes corresponding to the input and output to the function. This brings it in line with functions modeled using Models-as-Data. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index cd3f72e2513..a3f820f884d 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.5.4 +lastReleaseVersion: 0.6.0 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5fd797f6176..a93ef4564f1 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,11 +1,12 @@ name: codeql/go-all -version: 0.5.4 +version: 0.6.0 groups: go dbscheme: go.dbscheme extractor: go library: true upgrades: upgrades dependencies: + codeql/mad: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} dataExtensions: diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index 0c6ee1c3134..73873850982 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -54,6 +54,18 @@ * return value. The return values are zero-indexed * - "ReturnValue[n1..n2]": Similar to "ReturnValue[n]" but selects any * return value in the given range. The range is inclusive at both ends. + * + * For summaries, `input` and `output` may be suffixed by any number of the + * following, separated by ".": + * - "Field[pkg.className.fieldname]": Selects the contents of the field `f` + * which satisfies `f.hasQualifiedName(pkg, className, fieldname)`. + * - "SyntheticField[f]": Selects the contents of the synthetic field `f`. + * - "ArrayElement": Selects an element in an array or slice. + * - "Element": Selects an element in a collection. + * - "MapKey": Selects a key in a map. + * - "MapValue": Selects a value in a map. + * - "Dereference": Selects the value referenced by a pointer. + * * 8. The `kind` column is a tag that can be referenced from QL to determine to * which classes the interpreted elements should be added. For example, for * sources "remote" indicates a default remote flow source, and for summaries @@ -68,6 +80,7 @@ private import internal.FlowSummaryImpl::Private::External private import internal.FlowSummaryImplSpecific private import internal.AccessPathSyntax private import FlowSummary +private import codeql.mad.ModelValidation as SharedModelVal /** * A module importing the frameworks that provide external flow data, @@ -188,13 +201,16 @@ module ModelValidation { ) } - private string getInvalidModelKind() { - exists(string kind | summaryModel(_, _, _, _, _, _, _, _, kind, _) | - not kind = ["taint", "value"] and - result = "Invalid kind \"" + kind + "\" in summary model." - ) + private module KindValConfig implements SharedModelVal::KindValidationConfigSig { + predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _) } + + predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _) } + + predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _) } } + private module KindVal = SharedModelVal::KindValidation; + private string getInvalidModelSignature() { exists( string pred, string package, string type, string name, string signature, string ext, @@ -231,7 +247,7 @@ module ModelValidation { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - getInvalidModelKind() + KindVal::getInvalidModelKind() ] } } @@ -342,6 +358,8 @@ predicate parseContent(string component, DataFlow::Content content) { component = "MapKey" and content instanceof DataFlow::MapKeyContent or component = "MapValue" and content instanceof DataFlow::MapValueContent + or + component = "Dereference" and content instanceof DataFlow::PointerContent } cached diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll index ddf98ac0f2f..410543e0fc9 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll @@ -460,7 +460,6 @@ module Impl { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index e78404ca626..84ed6d5f61c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -11,12 +11,7 @@ private newtype TNode = MkSsaNode(SsaDefinition ssa) or MkGlobalFunctionNode(Function f) or MkImplicitVarargsSlice(CallExpr c) { c.hasImplicitVarargs() } or - MkSummarizedParameterNode(SummarizedCallable c, int i) { - FlowSummaryImpl::Private::summaryParameterNodeRange(c, i) - } or - MkSummaryInternalNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { - FlowSummaryImpl::Private::summaryNodeRange(c, state) - } + MkFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) /** Nodes intended for only use inside the data-flow libraries. */ module Private { @@ -30,9 +25,7 @@ module Private { not exists(n.getEnclosingCallable()) and result.asFileScope() = n.getFile() or - n = MkSummarizedParameterNode(result.asSummarizedCallable(), _) - or - n = MkSummaryInternalNode(result.asSummarizedCallable(), _) + result.asSummarizedCallable() = n.(FlowSummaryNode).getSummarizedCallable() } /** Holds if `p` is a `ParameterNode` of `c` with position `pos`. */ @@ -52,7 +45,7 @@ module Private { ReturnNode() { this.(Public::ResultNode).getIndex() = kind.getIndex() or - this.(SummaryNode).isReturn(kind) + this.(FlowSummaryNode).isReturn(kind) } /** Gets the kind of this returned value. */ @@ -72,33 +65,33 @@ module Private { /** * A data-flow node used to model flow summaries. */ - class SummaryNode extends Node, MkSummaryInternalNode { - private SummarizedCallable c; - private FlowSummaryImpl::Private::SummaryNodeState state; + class FlowSummaryNode extends Node, MkFlowSummaryNode { + FlowSummaryImpl::Private::SummaryNode getSummaryNode() { this = MkFlowSummaryNode(result) } - SummaryNode() { this = MkSummaryInternalNode(c, state) } - - override predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { - c.hasLocationInfo(fp, sl, sc, el, ec) + SummarizedCallable getSummarizedCallable() { + result = this.getSummaryNode().getSummarizedCallable() } - override string toString() { result = "[summary] " + state + " in " + c } + override predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { + this.getSummarizedCallable().hasLocationInfo(fp, sl, sc, el, ec) + } + + override string toString() { result = this.getSummaryNode().toString() } /** Holds if this summary node is the `i`th argument of `call`. */ predicate isArgumentOf(DataFlowCall call, int i) { - FlowSummaryImpl::Private::summaryArgumentNode(call, this, i) + FlowSummaryImpl::Private::summaryArgumentNode(call, this.getSummaryNode(), i) } /** Holds if this summary node is a return node. */ - predicate isReturn(ReturnKind kind) { FlowSummaryImpl::Private::summaryReturnNode(this, kind) } + predicate isReturn(ReturnKind kind) { + FlowSummaryImpl::Private::summaryReturnNode(this.getSummaryNode(), kind) + } /** Holds if this summary node is an out node for `call`. */ - predicate isOut(DataFlowCall call) { FlowSummaryImpl::Private::summaryOutNode(call, this, _) } - } - - /** Gets the summary node corresponding to the callable `c` and state `state`. */ - SummaryNode getSummaryNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { - result = MkSummaryInternalNode(c, state) + predicate isOut(DataFlowCall call) { + FlowSummaryImpl::Private::summaryOutNode(call, this.getSummaryNode(), _) + } } } @@ -661,11 +654,14 @@ module Public { * A summary node which represents a parameter in a function which doesn't * already have a parameter nodes. */ - class SummarizedParameterNode extends ParameterNode, MkSummarizedParameterNode { - SummarizedCallable c; - int i; + class SummarizedParameterNode extends ParameterNode, FlowSummaryNode { + SummarizedParameterNode() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), _) + } - SummarizedParameterNode() { this = MkSummarizedParameterNode(c, i) } + private int getPos() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), result) + } // There are no AST representations of summarized parameter nodes override ControlFlow::Root getRoot() { none() } @@ -673,19 +669,14 @@ module Public { override string getNodeKind() { result = "external parameter node" } override Type getType() { - result = c.getType().getParameterType(i) + result = this.getSummarizedCallable().getType().getParameterType(this.getPos()) or - i = -1 and result = c.asFunction().(Method).getReceiverType() + this.getPos() = -1 and + result = this.getSummarizedCallable().asFunction().(Method).getReceiverType() } override predicate isParameterOf(DataFlowCallable call, int idx) { - c = call.asSummarizedCallable() and i = idx - } - - override string toString() { result = "parameter " + i + " of " + c.toString() } - - override predicate hasLocationInfo(string fp, int sl, int sc, int el, int ec) { - c.hasLocationInfo(fp, sl, sc, el, ec) + this.getSummarizedCallable() = call.asSummarizedCallable() and this.getPos() = idx } } @@ -1237,10 +1228,12 @@ module Public { private import Private private import Public -class SummaryPostUpdateNode extends SummaryNode, PostUpdateNode { - private Node pre; +class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { + private FlowSummaryNode pre; - SummaryPostUpdateNode() { FlowSummaryImpl::Private::summaryPostUpdateNode(this, pre) } + SummaryPostUpdateNode() { + FlowSummaryImpl::Private::summaryPostUpdateNode(this.getSummaryNode(), pre.getSummaryNode()) + } override Node getPreUpdateNode() { result = pre } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index d45587aa3d4..99d22d5c4e8 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -129,7 +129,8 @@ predicate jumpStep(Node n1, Node n2) { n2 = recvRead ) or - FlowSummaryImpl::Private::Steps::summaryJumpStep(n1, n2) + FlowSummaryImpl::Private::Steps::summaryJumpStep(n1.(FlowSummaryNode).getSummaryNode(), + n2.(FlowSummaryNode).getSummaryNode()) } /** @@ -153,7 +154,8 @@ predicate storeStep(Node node1, Content c, Node node2) { node1 = node2.(AddressOperationNode).getOperand() and c = any(DataFlow::PointerContent pc | pc.getPointerType() = node2.getType()) or - FlowSummaryImpl::Private::Steps::summaryStoreStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) or containerStoreStep(node1, node2, c) } @@ -173,7 +175,8 @@ predicate readStep(Node node1, Content c, Node node2) { c = any(DataFlow::FieldContent fc | fc.getField() = read.getField()) ) or - FlowSummaryImpl::Private::Steps::summaryReadStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) or containerReadStep(node1, node2, c) } @@ -197,9 +200,11 @@ predicate clearsContent(Node n, Content c) { * at node `n`. */ predicate expectsContent(Node n, ContentSet c) { - FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) } +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { none() } + /** Gets the type of `n` used for type pruning. */ DataFlowType getNodeType(Node n) { result = TTodoDataFlowType() and exists(n) } @@ -223,6 +228,16 @@ class CastNode extends ExprNode { override ConversionExpr expr; } +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { + exists(DataFlow::FunctionModel fm | fm.getAnInputNode(_) = n or fm.getAnOutputNode(_) = n) + or + exists(TaintTracking::FunctionModel fm | fm.getAnInputNode(_) = n or fm.getAnOutputNode(_) = n) +} + class DataFlowExpr = Expr; private newtype TDataFlowType = @@ -378,7 +393,7 @@ Node getArgument(CallNode c, int i) { } /** Holds if `n` should be hidden from path explanations. */ -predicate nodeIsHidden(Node n) { n instanceof SummaryNode or n instanceof SummarizedParameterNode } +predicate nodeIsHidden(Node n) { n instanceof FlowSummaryNode } class LambdaCallKind = Unit; diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index 40ec012cc27..ba0728ff02e 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -124,7 +124,8 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { // step through function model any(FunctionModel m).flowStep(nodeFrom, nodeTo) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, true) + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo.(FlowSummaryNode).getSummaryNode(), true) } /** diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index e6379f6a170..7977e18120f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -23,29 +23,30 @@ module Public { * content type, or a return kind. */ class SummaryComponent extends TSummaryComponent { - /** Gets a textual representation of this summary component. */ - string toString() { - exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) - or - exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) - or - exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + /** Gets a textual representation of this component used for MaD models. */ + string getMadRepresentation() { + result = getMadRepresentationSpecific(this) or exists(ArgumentPosition pos | - this = TParameterSummaryComponent(pos) and result = "parameter " + pos + this = TParameterSummaryComponent(pos) and + result = "Parameter[" + getArgumentPosition(pos) + "]" ) or exists(ParameterPosition pos | - this = TArgumentSummaryComponent(pos) and result = "argument " + pos + this = TArgumentSummaryComponent(pos) and + result = "Argument[" + getParameterPosition(pos) + "]" ) or - exists(ReturnKind rk | this = TReturnSummaryComponent(rk) and result = "return (" + rk + ")") - or - exists(SummaryComponent::SyntheticGlobal sg | - this = TSyntheticGlobalSummaryComponent(sg) and - result = "synthetic global (" + sg + ")" + exists(string synthetic | + this = TSyntheticGlobalSummaryComponent(synthetic) and + result = "SyntheticGlobal[" + synthetic + "]" ) + or + this = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" } + + /** Gets a textual representation of this summary component. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing summary components. */ @@ -110,7 +111,6 @@ module Public { } /** Gets the stack obtained by dropping the first `i` elements, if any. */ - pragma[assume_small_delta] SummaryComponentStack drop(int i) { i = 0 and result = this or @@ -125,19 +125,22 @@ module Public { this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() } - /** Gets a textual representation of this stack. */ - string toString() { + /** Gets a textual representation of this stack used for MaD models. */ + string getMadRepresentation() { exists(SummaryComponent head, SummaryComponentStack tail | head = this.head() and tail = this.tail() and - result = tail + "." + head + result = tail.getMadRepresentation() + "." + head.getMadRepresentation() ) or exists(SummaryComponent c | this = TSingletonSummaryComponentStack(c) and - result = c.toString() + result = c.getMadRepresentation() ) } + + /** Gets a textual representation of this stack. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing stacks of summary components. */ @@ -166,37 +169,6 @@ module Public { SummaryComponentStack return(ReturnKind rk) { result = singleton(SummaryComponent::return(rk)) } } - /** Gets a textual representation of this component used for flow summaries. */ - private string getComponent(SummaryComponent sc) { - result = getComponentSpecific(sc) - or - exists(ArgumentPosition pos | - sc = TParameterSummaryComponent(pos) and - result = "Parameter[" + getArgumentPosition(pos) + "]" - ) - or - exists(ParameterPosition pos | - sc = TArgumentSummaryComponent(pos) and - result = "Argument[" + getParameterPosition(pos) + "]" - ) - or - sc = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" - } - - /** Gets a textual representation of this stack used for flow summaries. */ - string getComponentStack(SummaryComponentStack stack) { - exists(SummaryComponent head, SummaryComponentStack tail | - head = stack.head() and - tail = stack.tail() and - result = getComponentStack(tail) + "." + getComponent(head) - ) - or - exists(SummaryComponent c | - stack = TSingletonSummaryComponentStack(c) and - result = getComponent(c) - ) - } - /** * A class that exists for QL technical reasons only (the IPA type used * to represent component stacks needs to be bounded). @@ -505,6 +477,9 @@ module Private { or // Add the post-update node corresponding to the requested argument node outputState(c, s) and isCallbackParameter(s) + or + // Add the parameter node for parameter side-effects + outputState(c, s) and s = SummaryComponentStack::argument(_) } private newtype TSummaryNodeState = @@ -530,7 +505,7 @@ module Private { * this state represents that the components in `s` _remain to be written_ to * the output. */ - class SummaryNodeState extends TSummaryNodeState { + private class SummaryNodeState extends TSummaryNodeState { /** Holds if this state is a valid input state for `c`. */ pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { @@ -559,6 +534,42 @@ module Private { } } + private newtype TSummaryNode = + TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { + summaryNodeRange(c, state) + } or + TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { + summaryParameterNodeRange(c, pos) + } + + abstract class SummaryNode extends TSummaryNode { + abstract string toString(); + + abstract SummarizedCallable getSummarizedCallable(); + } + + private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { + private SummarizedCallable c; + private SummaryNodeState state; + + SummaryInternalNode() { this = TSummaryInternalNode(c, state) } + + override string toString() { result = "[summary] " + state + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + + private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { + private SummarizedCallable c; + private ParameterPosition pos; + + SummaryParamNode() { this = TSummaryParameterNode(c, pos) } + + override string toString() { result = "[summary param] " + pos + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + /** * Holds if `state` represents having read from a parameter at position * `pos` in `c`. In this case we are not synthesizing a data-flow node, @@ -574,7 +585,7 @@ module Private { * Holds if a synthesized summary node is needed for the state `state` in summarized * callable `c`. */ - predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { state.isInputState(c, _) and not parameterReadState(c, state, _) or @@ -582,22 +593,22 @@ module Private { } pragma[noinline] - private Node summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isInputState(c, s) | - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) or exists(ParameterPosition pos | parameterReadState(c, state, pos) and - result.(ParamNode).isParameterOf(inject(c), pos) + result = TSummaryParameterNode(c, pos) ) ) } pragma[noinline] - private Node summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isOutputState(c, s) and - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) ) } @@ -605,12 +616,14 @@ module Private { * Holds if a write targets `post`, which is a post-update node for a * parameter at position `pos` in `c`. */ - private predicate isParameterPostUpdate(Node post, SummarizedCallable c, ParameterPosition pos) { + private predicate isParameterPostUpdate( + SummaryNode post, SummarizedCallable c, ParameterPosition pos + ) { post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) } /** Holds if a parameter node at position `pos` is required for `c`. */ - predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { parameterReadState(c, _, pos) or // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context @@ -618,7 +631,7 @@ module Private { } private predicate callbackOutput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ReturnKind rk + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and @@ -626,7 +639,7 @@ module Private { } private predicate callbackInput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ArgumentPosition pos + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and @@ -634,7 +647,7 @@ module Private { } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ - predicate summaryCallbackRange(SummarizedCallable c, Node receiver) { + predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { callbackOutput(c, _, receiver, _) or callbackInput(c, _, receiver, _) @@ -647,10 +660,10 @@ module Private { * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and * `getCallbackReturnType()`. */ - DataFlowType summaryNodeType(Node n) { - exists(Node pre | + DataFlowType summaryNodeType(SummaryNode n) { + exists(SummaryNode pre | summaryPostUpdateNode(n, pre) and - result = getNodeType(pre) + result = summaryNodeType(pre) ) or exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | @@ -662,12 +675,12 @@ module Private { ) or head = TWithoutContentSummaryComponent(_) and - result = getNodeType(summaryNodeInputState(c, s.tail())) + result = summaryNodeType(summaryNodeInputState(c, s.tail())) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = - getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), rk) ) or @@ -675,6 +688,11 @@ module Private { head = TSyntheticGlobalSummaryComponent(sg) and result = getSyntheticGlobalType(sg) ) + or + exists(ParameterPosition pos | + head = TArgumentSummaryComponent(pos) and + result = getParameterType(c, pos) + ) ) or n = summaryNodeOutputState(c, s) and @@ -691,7 +709,7 @@ module Private { or exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = - getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), pos) ) or @@ -703,9 +721,14 @@ module Private { ) } + /** Holds if summary node `p` is a parameter with position `pos`. */ + predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { + p = TSummaryParameterNode(_, pos) + } + /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ - predicate summaryOutNode(DataFlowCall c, Node out, ReturnKind rk) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryOutNode(DataFlowCall c, SummaryNode out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackOutput(callable, s, receiver, rk) and out = summaryNodeInputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -713,8 +736,8 @@ module Private { } /** Holds if summary node `arg` is at position `pos` in the call `c`. */ - predicate summaryArgumentNode(DataFlowCall c, Node arg, ArgumentPosition pos) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryArgumentNode(DataFlowCall c, SummaryNode arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackInput(callable, s, receiver, pos) and arg = summaryNodeOutputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -722,10 +745,10 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, Node pre) { + predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and - pre.(ParamNode).isParameterOf(inject(c), pos) + pre = TSummaryParameterNode(c, pos) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -736,7 +759,7 @@ module Private { } /** Holds if summary node `ret` is a return node of kind `rk`. */ - predicate summaryReturnNode(Node ret, ReturnKind rk) { + predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { exists(SummaryComponentStack s | ret = summaryNodeOutputState(_, s) and s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) @@ -748,7 +771,9 @@ module Private { * node, and back out to `p`. */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { - exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(inject(c), ppos) | + exists(SummarizedCallable c, ParameterPosition ppos | + p.isParameterOf(inject(c), pragma[only_bind_into](ppos)) + | exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -763,7 +788,7 @@ module Private { * Holds if there is a local step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryLocalStep(Node pred, Node succ, boolean preservesValue) { + predicate summaryLocalStep(SummaryNode pred, SummaryNode succ, boolean preservesValue) { exists( SummarizedCallable c, SummaryComponentStack inputContents, SummaryComponentStack outputContents @@ -789,7 +814,7 @@ module Private { * Holds if there is a read step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryReadStep(Node pred, ContentSet c, Node succ) { + predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and @@ -801,7 +826,7 @@ module Private { * Holds if there is a store step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { + predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and succ = summaryNodeOutputState(sc, s.tail()) and @@ -813,7 +838,7 @@ module Private { * Holds if there is a jump step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryJumpStep(Node pred, Node succ) { + predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { exists(SummaryComponentStack s | s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and pred = summaryNodeOutputState(_, s) and @@ -840,9 +865,9 @@ module Private { * `a` on line 2 to the post-update node for `a` on that line (via an intermediate * node where field `b` is cleared). */ - predicate summaryClearsContent(Node n, ContentSet c) { + predicate summaryClearsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withoutContent(c) ) @@ -852,9 +877,9 @@ module Private { * Holds if the value that is being tracked is expected to be stored inside * content `c` at `n`. */ - predicate summaryExpectsContent(Node n, ContentSet c) { + predicate summaryExpectsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withContent(c) ) @@ -862,17 +887,17 @@ module Private { pragma[noinline] private predicate viableParam( - DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p ) { exists(DataFlowCallable c | c = inject(sc) and - p.isParameterOf(c, ppos) and + p = TSummaryParameterNode(sc, ppos) and c = viableCallable(call) ) } pragma[nomagic] - private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { + private SummaryParamNode summaryArgParam(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { exists(ParameterPosition ppos | argumentPositionMatch(call, arg, ppos) and viableParam(call, sc, ppos, result) @@ -884,12 +909,12 @@ module Private { * local steps. `clearsOrExpects` records whether any node on the path from `p` to * `n` either clears or expects contents. */ - private predicate paramReachesLocal(ParamNode p, Node n, boolean clearsOrExpects) { + private predicate paramReachesLocal(SummaryParamNode p, SummaryNode n, boolean clearsOrExpects) { viableParam(_, _, _, p) and n = p and clearsOrExpects = false or - exists(Node mid, boolean clearsOrExpectsMid | + exists(SummaryNode mid, boolean clearsOrExpectsMid | paramReachesLocal(p, mid, clearsOrExpectsMid) and summaryLocalStep(mid, n, true) and if @@ -909,21 +934,33 @@ module Private { */ pragma[nomagic] predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { - exists(ParamNode p, ParameterPosition ppos, Node ret | + exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | paramReachesLocal(p, ret, true) and - p = summaryArgParam0(_, arg, sc) and - p.isParameterOf(_, pragma[only_bind_into](ppos)) and + p = summaryArgParam(_, arg, sc) and + p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) ) } + pragma[nomagic] + private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { + summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) + or + exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | + paramReachesLocal(p, pre, _) and + summaryPostUpdateNode(ret, pre) and + p = TSummaryParameterNode(_, pos) and + rk.(ParamUpdateReturnKind).getPosition() = pos + ) + } + bindingset[ret] - private ParamNode summaryArgParam( - ArgNode arg, ReturnNodeExt ret, OutNodeExt out, SummarizedCallable sc + private SummaryParamNode summaryArgParamRetOut( + ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc ) { exists(DataFlowCall call, ReturnKindExt rk | - result = summaryArgParam0(call, arg, sc) and - ret.getKind() = pragma[only_bind_into](rk) and + result = summaryArgParam(call, arg, sc) and + summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and out = pragma[only_bind_into](rk).getAnOutNode(call) ) } @@ -936,9 +973,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnKind rk, ReturnNode ret, DataFlowCall call | - summaryLocalStep(summaryArgParam0(call, arg, sc), ret, true) and - ret.getKind() = pragma[only_bind_into](rk) and + exists(ReturnKind rk, SummaryNode ret, DataFlowCall call | + summaryLocalStep(summaryArgParam(call, arg, sc), ret, true) and + summaryReturnNode(ret, pragma[only_bind_into](rk)) and out = getAnOutNode(call, pragma[only_bind_into](rk)) ) } @@ -951,7 +988,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnNodeExt ret | summaryLocalStep(summaryArgParam(arg, ret, out, sc), ret, false)) + exists(SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), ret, false) + ) } /** @@ -962,8 +1001,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryReadStep(summaryArgParam(arg, ret, out, sc), c, mid) and + exists(SummaryNode mid, SummaryNode ret | + summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and summaryLocalStep(mid, ret, _) ) } @@ -976,8 +1015,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, ret, out, sc), mid, _) and + exists(SummaryNode mid, SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), mid, _) and summaryStoreStep(mid, c, ret) ) } @@ -1310,8 +1349,8 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() // Callable information - + getComponentStack(input) + ";" // input - + getComponentStack(output) + ";" // output + + input.getMadRepresentation() + ";" // input + + output.getMadRepresentation() + ";" // output + renderKind(preservesValue) + ";" // kind + renderProvenance(c) // provenance ) @@ -1344,11 +1383,11 @@ module Private { } private newtype TNodeOrCall = - MkNode(Node n) { + MkNode(SummaryNode n) { exists(RelevantSummarizedCallable c | - n = summaryNode(c, _) + n = TSummaryInternalNode(c, _) or - n.(ParamNode).isParameterOf(inject(c), _) + n = TSummaryParameterNode(c, _) ) } or MkCall(DataFlowCall call) { @@ -1357,7 +1396,7 @@ module Private { } private class NodeOrCall extends TNodeOrCall { - Node asNode() { this = MkNode(result) } + SummaryNode asNode() { this = MkNode(result) } DataFlowCall asCall() { this = MkCall(result) } @@ -1377,9 +1416,11 @@ module Private { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - or - this.asCall().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll index 7afdb314929..88844f24537 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImplSpecific.qll @@ -17,7 +17,7 @@ private module FlowSummaries { class SummarizedCallableBase = Callable; -DataFlowCallable inject(SummarizedCallable c) { result.asSummarizedCallable() = c } +DataFlowCallable inject(SummarizedCallable c) { result.asSummarizedCallable() = c or none() } /** Gets the parameter position of the instance parameter. */ ArgumentPosition callbackSelfParameterPosition() { result = -1 } @@ -28,10 +28,8 @@ string getParameterPosition(ParameterPosition pos) { result = pos.toString() } /** Gets the textual representation of an argument position in the format used for flow summaries. */ string getArgumentPosition(ArgumentPosition pos) { result = pos.toString() } -Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = getSummaryNode(c, state) } - /** Gets the synthesized data-flow call for `receiver`. */ -DataFlowCall summaryDataFlowCall(Node receiver) { +DataFlowCall summaryDataFlowCall(SummaryNode receiver) { // We do not currently have support for callback-based library models. none() } @@ -39,6 +37,9 @@ DataFlowCall summaryDataFlowCall(Node receiver) { /** Gets the type of content `c`. */ DataFlowType getContentType(Content c) { result = c.getType() } +/** Gets the type of the parameter at the given position. */ +DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos) { any() } + /** Gets the return type of kind `rk` for callable `c`. */ DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { any() } @@ -105,10 +106,12 @@ private string getContentSpecific(Content c) { c instanceof MapKeyContent and result = "MapKey" or c instanceof MapValueContent and result = "MapValue" + or + c instanceof PointerContent and result = "Dereference" } -/** Gets the textual representation of the content in the format used for flow summaries. */ -string getComponentSpecific(SummaryComponent sc) { +/** Gets the textual representation of the content in the format used for MaD models. */ +string getMadRepresentationSpecific(SummaryComponent sc) { exists(Content c | sc = TContentSummaryComponent(c) and result = getContentSpecific(c)) or exists(ReturnKind rk | diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index 38e03f62b44..21d3f482f6c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -5,6 +5,7 @@ private import go private import FlowSummaryImpl as FlowSummaryImpl private import codeql.util.Unit +private import DataFlowPrivate as DataFlowPrivate /** * Holds if taint can flow from `src` to `sink` in zero or more @@ -95,7 +96,8 @@ predicate localAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { sliceStep(pred, succ) or any(FunctionModel fm).taintStep(pred, succ) or any(AdditionalTaintStep a).step(pred, succ) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(pred, succ, false) + FlowSummaryImpl::Private::Steps::summaryLocalStep(pred.(DataFlowPrivate::FlowSummaryNode) + .getSummaryNode(), succ.(DataFlowPrivate::FlowSummaryNode).getSummaryNode(), false) } /** diff --git a/go/ql/lib/semmle/go/security/LogInjection.qll b/go/ql/lib/semmle/go/security/LogInjection.qll index 12f64c87e4a..70e0947c53b 100644 --- a/go/ql/lib/semmle/go/security/LogInjection.qll +++ b/go/ql/lib/semmle/go/security/LogInjection.qll @@ -17,7 +17,7 @@ module LogInjection { /** * A taint-tracking configuration for reasoning about log injection vulnerabilities. */ - class Configuration extends TaintTracking::Configuration { + deprecated class Configuration extends TaintTracking::Configuration { Configuration() { this = "LogInjection" } override predicate isSource(DataFlow::Node source) { source instanceof Source } @@ -30,4 +30,17 @@ module LogInjection { guard instanceof SanitizerGuard } } + + /** + * A taint-tracking configuration for reasoning about log injection vulnerabilities. + */ + module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof Sanitizer } + } + + module Flow = TaintTracking::Global; } diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 5acce410dbd..2b87cb252c4 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.6.0 + +### Bug Fixes + +* The query "Arbitrary file write during zip extraction ("zip slip")" (`go/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." + ## 0.5.4 No user-facing changes. diff --git a/go/ql/src/Security/CWE-022/ZipSlip.qhelp b/go/ql/src/Security/CWE-022/ZipSlip.qhelp index 1322dc18c13..ecea2eaeec9 100644 --- a/go/ql/src/Security/CWE-022/ZipSlip.qhelp +++ b/go/ql/src/Security/CWE-022/ZipSlip.qhelp @@ -5,9 +5,9 @@

    -Extracting files from a malicious zip archive without validating that the destination file path -is within the destination directory can cause files outside the destination directory to be -overwritten, due to the possible presence of directory traversal elements (..) in +Extracting files from a malicious zip file, or similar type of archive, +is at risk of directory traversal attacks if filenames from the archive are +not properly validated. archive paths.

    @@ -15,8 +15,8 @@ archive paths. Zip archives contain archive entries representing each file in the archive. These entries include a file path for the entry, but these file paths are not restricted and may contain unexpected special elements such as the directory traversal element (..). If these -file paths are used to determine which output file the contents of an archive item should be written to, then -the file may be written to an unexpected location. This can result in sensitive information being +file paths are used to create a filesystem path, then a file operation may happen in an +unexpected location. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

    diff --git a/go/ql/src/Security/CWE-022/ZipSlip.ql b/go/ql/src/Security/CWE-022/ZipSlip.ql index ceec7dc57e3..5cfb3998f4d 100644 --- a/go/ql/src/Security/CWE-022/ZipSlip.ql +++ b/go/ql/src/Security/CWE-022/ZipSlip.ql @@ -1,8 +1,8 @@ /** - * @name Arbitrary file write during zip extraction ("zip slip") - * @description Extracting files from a malicious zip archive without validating that the - * destination file path is within the destination directory can cause files outside - * the destination directory to be overwritten. + * @name Arbitrary file access during archive extraction ("Zip Slip") + * @description Extracting files from a malicious ZIP file, or similar type of archive, without + * validating that the destination file path is within the destination directory + * can allow an attacker to unexpectedly gain access to resources. * @kind path-problem * @id go/zipslip * @problem.severity error diff --git a/go/ql/src/Security/CWE-117/LogInjection.ql b/go/ql/src/Security/CWE-117/LogInjection.ql index 39952dbbfa1..5b6586c8e4e 100644 --- a/go/ql/src/Security/CWE-117/LogInjection.ql +++ b/go/ql/src/Security/CWE-117/LogInjection.ql @@ -13,9 +13,9 @@ import go import semmle.go.security.LogInjection -import DataFlow::PathGraph +import LogInjection::Flow::PathGraph -from LogInjection::Configuration c, DataFlow::PathNode source, DataFlow::PathNode sink -where c.hasFlowPath(source, sink) +from LogInjection::Flow::PathNode source, LogInjection::Flow::PathNode sink +where LogInjection::Flow::flowPath(source, sink) select sink.getNode(), source, sink, "This log entry depends on a $@.", source.getNode(), "user-provided value" diff --git a/go/ql/src/change-notes/released/0.6.0.md b/go/ql/src/change-notes/released/0.6.0.md new file mode 100644 index 00000000000..a994c79cdf0 --- /dev/null +++ b/go/ql/src/change-notes/released/0.6.0.md @@ -0,0 +1,5 @@ +## 0.6.0 + +### Bug Fixes + +* The query "Arbitrary file write during zip extraction ("zip slip")" (`go/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index cd3f72e2513..a3f820f884d 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.5.4 +lastReleaseVersion: 0.6.0 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index e8b06b3fabf..f9bbdca3b73 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.5.4 +version: 0.6.0 groups: - go - queries diff --git a/go/ql/test/TestUtilities/InlineFlowTest.qll b/go/ql/test/TestUtilities/InlineFlowTest.qll index 0726265699f..4f3cfc7599a 100644 --- a/go/ql/test/TestUtilities/InlineFlowTest.qll +++ b/go/ql/test/TestUtilities/InlineFlowTest.qll @@ -3,37 +3,35 @@ * * Example for a test.ql: * ```ql - * import java + * import go * import TestUtilities.InlineFlowTest + * import DefaultFlowTest + * import PathGraph + * + * from PathNode source, PathNode sink + * where flowPath(source, sink) + * select sink, source, sink, "$@", source, source.toString() * ``` * * To declare expectations, you can use the $hasTaintFlow or $hasValueFlow comments within the test source files. - * Example of the corresponding test file, e.g. Test.java + * Example of the corresponding test file, e.g. Test.go * ```go - * public class Test { - * - * Object source() { return null; } - * String taint() { return null; } - * void sink(Object o) { } - * - * public void test() { - * Object s = source(); - * sink(s); //$hasValueFlow - * String t = "foo" + taint(); - * sink(t); //$hasTaintFlow - * } + * func source() string { return ""; } + * func taint() string { return ""; } + * func sink(s string) { } * + * func test() { + * s := source() + * sink(s) // $ hasValueFlow="s" + * t := "foo" + taint() + * sink(t) // $ hasTaintFlow="t" * } * ``` * - * If you're not interested in a specific flow type, you can disable either value or taint flow expectations as follows: - * ```ql - * class HasFlowTest extends InlineFlowTest { - * override DataFlow::Configuration getTaintFlowConfig() { none() } - * - * override DataFlow::Configuration getValueFlowConfig() { none() } - * } - * ``` + * If you are only interested in value flow, then instead of importing `DefaultFlowTest`, you can import + * `ValueFlowTest`. Similarly, if you are only interested in taint flow, then instead of + * importing `DefaultFlowTest`, you can import `TaintFlowTest`. In both cases + * `DefaultFlowConfig` can be replaced by another implementation of `DataFlow::ConfigSig`. * * If you need more fine-grained tuning, consider implementing a test using `InlineExpectationsTest`. */ @@ -47,57 +45,68 @@ private predicate defaultSource(DataFlow::Node source) { ) } -class DefaultValueFlowConf extends DataFlow::Configuration { - DefaultValueFlowConf() { this = "qltest:defaultValueFlowConf" } - - override predicate isSource(DataFlow::Node source) { defaultSource(source) } - - override predicate isSink(DataFlow::Node sink) { - exists(Function fn | fn.hasQualifiedName(_, "sink") | sink = fn.getACall().getAnArgument()) - } - - override int fieldFlowBranchLimit() { result = 1000 } +private predicate defaultSink(DataFlow::Node sink) { + exists(Function fn | fn.hasQualifiedName(_, "sink") | sink = fn.getACall().getAnArgument()) } -class DefaultTaintFlowConf extends TaintTracking::Configuration { - DefaultTaintFlowConf() { this = "qltest:defaultTaintFlowConf" } +module DefaultFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { defaultSource(source) } - override predicate isSource(DataFlow::Node source) { defaultSource(source) } + predicate isSink(DataFlow::Node sink) { defaultSink(sink) } - override predicate isSink(DataFlow::Node sink) { - exists(Function fn | fn.hasQualifiedName(_, "sink") | sink = fn.getACall().getAnArgument()) - } - - override int fieldFlowBranchLimit() { result = 1000 } + int fieldFlowBranchLimit() { result = 1000 } } -class InlineFlowTest extends InlineExpectationsTest { - InlineFlowTest() { this = "HasFlowTest" } +private module NoFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { none() } - override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + predicate isSink(DataFlow::Node sink) { none() } +} - override predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasValueFlow" and - exists(DataFlow::Node sink | this.getValueFlowConfig().hasFlowTo(sink) | - sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = sink.toString() and - value = "\"" + sink.toString() + "\"" - ) - or - tag = "hasTaintFlow" and - exists(DataFlow::Node src, DataFlow::Node sink | - this.getTaintFlowConfig().hasFlow(src, sink) and - not this.getValueFlowConfig().hasFlow(src, sink) - | - sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), - location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - element = sink.toString() and - value = "\"" + sink.toString() + "\"" - ) +module FlowTest { + module ValueFlow = DataFlow::Global; + + module TaintFlow = TaintTracking::Global; + + private module InlineTest implements TestSig { + string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node sink | ValueFlow::flowTo(sink) | + sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = sink.toString() and + value = "\"" + sink.toString() + "\"" + ) + or + tag = "hasTaintFlow" and + exists(DataFlow::Node src, DataFlow::Node sink | + TaintFlow::flow(src, sink) and not ValueFlow::flow(src, sink) + | + sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = sink.toString() and + value = "\"" + sink.toString() + "\"" + ) + } } - DataFlow::Configuration getValueFlowConfig() { result = any(DefaultValueFlowConf config) } + import MakeTest + import DataFlow::MergePathGraph - DataFlow::Configuration getTaintFlowConfig() { result = any(DefaultTaintFlowConf config) } + predicate flowPath(PathNode source, PathNode sink) { + ValueFlow::flowPath(source.asPathNode1(), sink.asPathNode1()) or + TaintFlow::flowPath(source.asPathNode2(), sink.asPathNode2()) + } +} + +module DefaultFlowTest = FlowTest; + +module ValueFlowTest { + import FlowTest +} + +module TaintFlowTest { + import FlowTest } diff --git a/go/ql/test/example-tests/snippets/typeinfo.expected b/go/ql/test/example-tests/snippets/typeinfo.expected index c3b63b1b25b..728a1dfc6f7 100644 --- a/go/ql/test/example-tests/snippets/typeinfo.expected +++ b/go/ql/test/example-tests/snippets/typeinfo.expected @@ -1,7 +1,7 @@ -| file://:0:0:0:0 | parameter -1 of AddCookie | -| file://:0:0:0:0 | parameter -1 of Clone | -| file://:0:0:0:0 | parameter -1 of Write | -| file://:0:0:0:0 | parameter -1 of WriteProxy | +| file://:0:0:0:0 | [summary param] -1 in AddCookie | +| file://:0:0:0:0 | [summary param] -1 in Clone | +| file://:0:0:0:0 | [summary param] -1 in Write | +| file://:0:0:0:0 | [summary param] -1 in WriteProxy | | main.go:18:12:18:14 | argument corresponding to req | | main.go:18:12:18:14 | definition of req | | main.go:20:5:20:7 | req | diff --git a/go/ql/test/experimental/CWE-134/DsnInjection.expected b/go/ql/test/experimental/CWE-134/DsnInjection.expected index de054067a01..531bdb0ead2 100644 --- a/go/ql/test/experimental/CWE-134/DsnInjection.expected +++ b/go/ql/test/experimental/CWE-134/DsnInjection.expected @@ -1,7 +1,11 @@ edges -| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:50:29:50:33 | dbDSN | +| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | +| Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | +| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | call to Sprintf | nodes | Dsn.go:47:10:47:30 | call to FormValue | semmle.label | call to FormValue | +| Dsn.go:49:11:49:106 | call to Sprintf | semmle.label | call to Sprintf | +| Dsn.go:49:102:49:105 | name | semmle.label | name | | Dsn.go:50:29:50:33 | dbDSN | semmle.label | dbDSN | subpaths #select diff --git a/go/ql/test/experimental/CWE-134/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-134/DsnInjectionLocal.expected index de5e959d43f..762c5bf3e04 100644 --- a/go/ql/test/experimental/CWE-134/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-134/DsnInjectionLocal.expected @@ -1,25 +1,34 @@ edges -| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:29:29:29:33 | dbDSN | +| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:28:102:28:109 | index expression | +| Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | +| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | | Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | | Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | | Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | | Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | | Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:68:29:68:33 | dbDSN | -| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:68:29:68:33 | dbDSN | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | +| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | +| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | +| Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | | Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | | Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:68:29:68:33 | dbDSN | +| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | +| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | nodes | Dsn.go:26:11:26:17 | selection of Args | semmle.label | selection of Args | +| Dsn.go:28:11:28:110 | call to Sprintf | semmle.label | call to Sprintf | +| Dsn.go:28:102:28:109 | index expression | semmle.label | index expression | | Dsn.go:29:29:29:33 | dbDSN | semmle.label | dbDSN | | Dsn.go:62:2:62:4 | definition of cfg [pointer] | semmle.label | definition of cfg [pointer] | | Dsn.go:63:9:63:11 | cfg [pointer] | semmle.label | cfg [pointer] | | Dsn.go:63:9:63:11 | implicit dereference | semmle.label | implicit dereference | | Dsn.go:63:19:63:25 | selection of Args | semmle.label | selection of Args | +| Dsn.go:63:19:63:29 | slice expression | semmle.label | slice expression | +| Dsn.go:67:11:67:109 | call to Sprintf | semmle.label | call to Sprintf | | Dsn.go:67:102:67:104 | cfg [pointer] | semmle.label | cfg [pointer] | | Dsn.go:67:102:67:104 | implicit dereference | semmle.label | implicit dereference | +| Dsn.go:67:102:67:108 | selection of dsn | semmle.label | selection of dsn | | Dsn.go:68:29:68:33 | dbDSN | semmle.label | dbDSN | subpaths #select diff --git a/go/ql/test/experimental/CWE-918/SSRF.expected b/go/ql/test/experimental/CWE-918/SSRF.expected index 5ba4e98208e..d5a4910ad0d 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.expected +++ b/go/ql/test/experimental/CWE-918/SSRF.expected @@ -4,17 +4,23 @@ edges | builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | | builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | | builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | -| new-tests.go:26:26:26:30 | &... | new-tests.go:31:11:31:57 | call to Sprintf | -| new-tests.go:26:26:26:30 | &... | new-tests.go:32:11:32:57 | call to Sprintf | -| new-tests.go:26:26:26:30 | &... | new-tests.go:35:12:35:58 | call to Sprintf | +| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | +| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | +| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | +| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | +| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | call to Sprintf | +| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | | new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | | new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | | new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | | new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | | new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | -| new-tests.go:63:26:63:30 | &... | new-tests.go:68:11:68:57 | call to Sprintf | -| new-tests.go:63:26:63:30 | &... | new-tests.go:69:11:69:57 | call to Sprintf | -| new-tests.go:63:26:63:30 | &... | new-tests.go:74:12:74:58 | call to Sprintf | +| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | +| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | +| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | +| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | +| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | call to Sprintf | +| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | | new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | | new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | | new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | @@ -36,8 +42,11 @@ nodes | builtin.go:132:38:132:51 | untrustedInput | semmle.label | untrustedInput | | new-tests.go:26:26:26:30 | &... | semmle.label | &... | | new-tests.go:31:11:31:57 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:31:48:31:56 | selection of word | semmle.label | selection of word | | new-tests.go:32:11:32:57 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:32:48:32:56 | selection of safe | semmle.label | selection of safe | | new-tests.go:35:12:35:58 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:35:49:35:57 | selection of word | semmle.label | selection of word | | new-tests.go:39:18:39:30 | call to Param | semmle.label | call to Param | | new-tests.go:47:11:47:46 | ...+... | semmle.label | ...+... | | new-tests.go:49:18:49:30 | call to Query | semmle.label | call to Query | @@ -47,8 +56,11 @@ nodes | new-tests.go:63:17:63:23 | reqBody | semmle.label | reqBody | | new-tests.go:63:26:63:30 | &... | semmle.label | &... | | new-tests.go:68:11:68:57 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:68:48:68:56 | selection of word | semmle.label | selection of word | | new-tests.go:69:11:69:57 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:69:48:69:56 | selection of safe | semmle.label | selection of safe | | new-tests.go:74:12:74:58 | call to Sprintf | semmle.label | call to Sprintf | +| new-tests.go:74:49:74:57 | selection of word | semmle.label | selection of word | | new-tests.go:78:18:78:24 | selection of URL | semmle.label | selection of URL | | new-tests.go:78:18:78:32 | call to Query | semmle.label | call to Query | | new-tests.go:78:18:78:46 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.expected b/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.expected +++ b/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.ql b/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.ql index 20dc73705a8..6a1420db6d6 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.ql +++ b/go/ql/test/experimental/frameworks/CleverGo/HeaderWrite.ql @@ -2,14 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.CleverGo -class HttpHeaderWriteTest extends InlineExpectationsTest { - HttpHeaderWriteTest() { this = "HttpHeaderWriteTest" } +module HttpHeaderWriteTest implements TestSig { + string getARelevantTag() { result = ["headerKeyNode", "headerValNode", "headerKey", "headerVal"] } - override string getARelevantTag() { - result = ["headerKeyNode", "headerValNode", "headerKey", "headerVal"] - } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { // Dynamic key-value header: exists(Http::HeaderWrite hw | hw.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -56,3 +52,5 @@ class HttpHeaderWriteTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.expected b/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.expected +++ b/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.ql b/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.ql index 4b7bcb7823c..a0a8ce0a242 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.ql +++ b/go/ql/test/experimental/frameworks/CleverGo/HttpRedirect.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.CleverGo -class HttpRedirectTest extends InlineExpectationsTest { - HttpRedirectTest() { this = "HttpRedirectTest" } +module HttpRedirectTest implements TestSig { + string getARelevantTag() { result = "redirectUrl" } - override string getARelevantTag() { result = "redirectUrl" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "redirectUrl" and exists(Http::Redirect rd | rd.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,3 +15,5 @@ class HttpRedirectTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.expected b/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.expected +++ b/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.ql b/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.ql index a2b3dc62167..b34f1ec23be 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.ql +++ b/go/ql/test/experimental/frameworks/CleverGo/HttpResponseBody.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.CleverGo -class HttpResponseBodyTest extends InlineExpectationsTest { - HttpResponseBodyTest() { this = "HttpResponseBodyTest" } +module HttpResponseBodyTest implements TestSig { + string getARelevantTag() { result = ["contentType", "responseBody"] } - override string getARelevantTag() { result = ["contentType", "responseBody"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(Http::ResponseBody rd | rd.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -23,3 +21,5 @@ class HttpResponseBodyTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.expected b/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.expected +++ b/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.ql b/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.ql index 5de07cbe043..f5d74acdf56 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.ql +++ b/go/ql/test/experimental/frameworks/CleverGo/TaintTracking.ql @@ -14,12 +14,10 @@ class Configuration extends TaintTracking::Configuration { } } -class TaintTrackingTest extends InlineExpectationsTest { - TaintTrackingTest() { this = "TaintTrackingTest" } +module TaintTrackingTest implements TestSig { + string getARelevantTag() { result = "taintSink" } - override string getARelevantTag() { result = "taintSink" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintSink" and exists(DataFlow::Node sink | any(Configuration c).hasFlow(_, sink) | element = sink.toString() and @@ -29,3 +27,5 @@ class TaintTrackingTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.expected b/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.expected +++ b/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.ql b/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.ql index 4ace887e367..d414451dc21 100644 --- a/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.ql +++ b/go/ql/test/experimental/frameworks/CleverGo/UntrustedSources.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.CleverGo -class UntrustedFlowSourceTest extends InlineExpectationsTest { - UntrustedFlowSourceTest() { this = "UntrustedFlowSourceTest" } +module UntrustedFlowSourceTest implements TestSig { + string getARelevantTag() { result = "untrustedFlowSource" } - override string getARelevantTag() { result = "untrustedFlowSource" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "untrustedFlowSource" and exists(DataFlow::CallNode sinkCall, DataFlow::ArgumentNode arg | sinkCall.getCalleeName() = "sink" and @@ -21,3 +19,5 @@ class UntrustedFlowSourceTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.expected b/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.expected +++ b/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.ql b/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.ql index 0130172e7d0..70494910554 100644 --- a/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.ql +++ b/go/ql/test/experimental/frameworks/Fiber/HeaderWrite.ql @@ -2,14 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.Fiber -class HttpHeaderWriteTest extends InlineExpectationsTest { - HttpHeaderWriteTest() { this = "HttpHeaderWriteTest" } +module HttpHeaderWriteTest implements TestSig { + string getARelevantTag() { result = ["headerKeyNode", "headerValNode", "headerKey", "headerVal"] } - override string getARelevantTag() { - result = ["headerKeyNode", "headerValNode", "headerKey", "headerVal"] - } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { // Dynamic key-value header: exists(Http::HeaderWrite hw | hw.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -56,3 +52,5 @@ class HttpHeaderWriteTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/Fiber/Redirect.expected b/go/ql/test/experimental/frameworks/Fiber/Redirect.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/Fiber/Redirect.expected +++ b/go/ql/test/experimental/frameworks/Fiber/Redirect.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/Fiber/Redirect.ql b/go/ql/test/experimental/frameworks/Fiber/Redirect.ql index 37bb0f97bfb..1f609ea3959 100644 --- a/go/ql/test/experimental/frameworks/Fiber/Redirect.ql +++ b/go/ql/test/experimental/frameworks/Fiber/Redirect.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.Fiber -class HttpRedirectTest extends InlineExpectationsTest { - HttpRedirectTest() { this = "HttpRedirectTest" } +module HttpRedirectTest implements TestSig { + string getARelevantTag() { result = "redirectUrl" } - override string getARelevantTag() { result = "redirectUrl" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "redirectUrl" and exists(Http::Redirect rd | rd.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,3 +15,5 @@ class HttpRedirectTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/Fiber/ResponseBody.expected b/go/ql/test/experimental/frameworks/Fiber/ResponseBody.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/Fiber/ResponseBody.expected +++ b/go/ql/test/experimental/frameworks/Fiber/ResponseBody.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/Fiber/ResponseBody.ql b/go/ql/test/experimental/frameworks/Fiber/ResponseBody.ql index 74a9008749d..574f514b343 100644 --- a/go/ql/test/experimental/frameworks/Fiber/ResponseBody.ql +++ b/go/ql/test/experimental/frameworks/Fiber/ResponseBody.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.Fiber -class HttpResponseBodyTest extends InlineExpectationsTest { - HttpResponseBodyTest() { this = "HttpResponseBodyTest" } +module HttpResponseBodyTest implements TestSig { + string getARelevantTag() { result = ["contentType", "responseBody"] } - override string getARelevantTag() { result = ["contentType", "responseBody"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(Http::ResponseBody rd | rd.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -23,3 +21,5 @@ class HttpResponseBodyTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/Fiber/TaintTracking.expected b/go/ql/test/experimental/frameworks/Fiber/TaintTracking.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/Fiber/TaintTracking.expected +++ b/go/ql/test/experimental/frameworks/Fiber/TaintTracking.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/Fiber/TaintTracking.ql b/go/ql/test/experimental/frameworks/Fiber/TaintTracking.ql index dba5c65328c..5e2082acd60 100644 --- a/go/ql/test/experimental/frameworks/Fiber/TaintTracking.ql +++ b/go/ql/test/experimental/frameworks/Fiber/TaintTracking.ql @@ -14,12 +14,10 @@ class Configuration extends TaintTracking::Configuration { } } -class TaintTrackingTest extends InlineExpectationsTest { - TaintTrackingTest() { this = "TaintTrackingTest" } +module TaintTrackingTest implements TestSig { + string getARelevantTag() { result = "taintSink" } - override string getARelevantTag() { result = "taintSink" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintSink" and exists(DataFlow::Node sink | any(Configuration c).hasFlow(_, sink) | element = sink.toString() and @@ -29,3 +27,5 @@ class TaintTrackingTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.expected b/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.expected +++ b/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.ql b/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.ql index 3e7666b581a..4964c900207 100644 --- a/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.ql +++ b/go/ql/test/experimental/frameworks/Fiber/UntrustedFlowSources.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import experimental.frameworks.Fiber -class UntrustedFlowSourceTest extends InlineExpectationsTest { - UntrustedFlowSourceTest() { this = "UntrustedFlowSourceTest" } +module UntrustedFlowSourceTest implements TestSig { + string getARelevantTag() { result = "untrustedFlowSource" } - override string getARelevantTag() { result = "untrustedFlowSource" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "untrustedFlowSource" and exists(DataFlow::CallNode sinkCall, DataFlow::ArgumentNode arg | sinkCall.getCalleeName() = "sink" and @@ -21,3 +19,5 @@ class UntrustedFlowSourceTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/Function/isVariadic.expected b/go/ql/test/library-tests/semmle/go/Function/isVariadic.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/Function/isVariadic.expected +++ b/go/ql/test/library-tests/semmle/go/Function/isVariadic.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/Function/isVariadic.ql b/go/ql/test/library-tests/semmle/go/Function/isVariadic.ql index b501b84eadd..9a75a5f0136 100644 --- a/go/ql/test/library-tests/semmle/go/Function/isVariadic.ql +++ b/go/ql/test/library-tests/semmle/go/Function/isVariadic.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class FunctionIsVariadicTest extends InlineExpectationsTest { - FunctionIsVariadicTest() { this = "Function::IsVariadicTest" } +module FunctionIsVariadicTest implements TestSig { + string getARelevantTag() { result = "isVariadic" } - override string getARelevantTag() { result = "isVariadic" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(CallExpr ce | ce.getTarget().isVariadic() and ce.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,3 +15,5 @@ class FunctionIsVariadicTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.expected b/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.expected +++ b/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.ql b/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.ql index 789472ecd2f..048352a3ee0 100644 --- a/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.ql +++ b/go/ql/test/library-tests/semmle/go/Types/ImplementsComparable.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class ImplementsComparableTest extends InlineExpectationsTest { - ImplementsComparableTest() { this = "ImplementsComparableTest" } +module ImplementsComparableTest implements TestSig { + string getARelevantTag() { result = "implementsComparable" } - override string getARelevantTag() { result = "implementsComparable" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { // file = "interface.go" and tag = "implementsComparable" and exists(TypeSpec ts | @@ -20,3 +18,5 @@ class ImplementsComparableTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.expected b/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.expected +++ b/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.ql b/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.ql index d2ae79ae7d9..e6b96ce608e 100644 --- a/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.ql +++ b/go/ql/test/library-tests/semmle/go/Types/SignatureType_isVariadic.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class SignatureTypeIsVariadicTest extends InlineExpectationsTest { - SignatureTypeIsVariadicTest() { this = "SignatureType::IsVariadicTest" } +module SignatureTypeIsVariadicTest implements TestSig { + string getARelevantTag() { result = "isVariadic" } - override string getARelevantTag() { result = "isVariadic" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(FuncDef fd | fd.isVariadic() and fd.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,3 +15,5 @@ class SignatureTypeIsVariadicTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.expected b/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.expected +++ b/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.ql b/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.ql index c6972eba275..6b982271404 100644 --- a/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.ql +++ b/go/ql/test/library-tests/semmle/go/concepts/HTTP/Handler.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class HttpHandler extends InlineExpectationsTest { - HttpHandler() { this = "httphandler" } +module HttpHandler implements TestSig { + string getARelevantTag() { result = "handler" } - override string getARelevantTag() { result = "handler" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "handler" and exists(Http::RequestHandler h, DataFlow::Node check | element = h.toString() and value = check.toString() @@ -17,3 +15,5 @@ class HttpHandler extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.expected b/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.expected +++ b/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.ql b/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.ql index ce1be9a05d7..ab4890f9746 100644 --- a/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.ql +++ b/go/ql/test/library-tests/semmle/go/concepts/LoggerCall/LoggerCall.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class LoggerTest extends InlineExpectationsTest { - LoggerTest() { this = "LoggerTest" } +module LoggerTest implements TestSig { + string getARelevantTag() { result = "logger" } - override string getARelevantTag() { result = "logger" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(LoggerCall log | log.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -16,3 +14,5 @@ class LoggerTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.expected b/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.ql index e6e99b0e6c2..500572f5d45 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ArrayConversion/Flows.ql @@ -13,12 +13,10 @@ class DataConfiguration extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(DataConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -41,12 +39,10 @@ class TaintConfiguration extends TaintTracking::Configuration { } } -class TaintFlowTest extends InlineExpectationsTest { - TaintFlowTest() { this = "TaintFlowTest" } +module TaintFlowTest implements TestSig { + string getARelevantTag() { result = "taintflow" } - override string getARelevantTag() { result = "taintflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and exists(DataFlow::Node sink | any(TaintConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -56,3 +52,5 @@ class TaintFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.expected index 81332464f79..105b7026d0c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.expected @@ -1,2 +1,3 @@ failures invalidModelRow +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ext.yml b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ext.yml index 79ca023562c..47e51e573f0 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ext.yml +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ext.yml @@ -22,7 +22,9 @@ extensions: - ["github.com/nonexistent/test", "", False, "GetMapKey", "", "", "Argument[0].MapKey", "ReturnValue", "value", "manual"] - ["github.com/nonexistent/test", "", False, "SetElement", "", "", "Argument[0]", "ReturnValue.Element", "value", "manual"] - ["github.com/nonexistent/test", "C", False, "Get", "", "", "Argument[-1].Field[github.com/nonexistent/test.C.F]", "ReturnValue", "value", "manual"] + - ["github.com/nonexistent/test", "C", False, "GetThroughPointer", "", "", "Argument[-1].Dereference.Field[github.com/nonexistent/test.C.F]", "ReturnValue", "value", "manual"] - ["github.com/nonexistent/test", "C", False, "Set", "", "", "Argument[0]", "Argument[-1].Field[github.com/nonexistent/test.C.F]", "value", "manual"] + - ["github.com/nonexistent/test", "C", False, "SetThroughPointer", "", "", "Argument[0]", "Argument[-1].Dereference.Field[github.com/nonexistent/test.C.F]", "value", "manual"] - addsTo: pack: codeql/go-all diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ql b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ql index 9719a9d69a6..2b719551ae0 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/completetest.ql @@ -8,16 +8,10 @@ import ModelValidation import semmle.go.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl import TestUtilities.InlineFlowTest -class Config extends TaintTracking::Configuration { - Config() { this = "external-flow-test" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { sourceNode(src, "qltest") } - override predicate isSource(DataFlow::Node src) { sourceNode(src, "qltest") } - - override predicate isSink(DataFlow::Node src) { sinkNode(src, "qltest") } + predicate isSink(DataFlow::Node src) { sinkNode(src, "qltest") } } -class ExternalFlowTest extends InlineFlowTest { - override DataFlow::Configuration getValueFlowConfig() { none() } - - override DataFlow::Configuration getTaintFlowConfig() { result = any(Config config) } -} +import TaintFlowTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/sinks.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/sinks.expected index 21199db73df..38dc380b55b 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/sinks.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/sinks.expected @@ -26,6 +26,10 @@ invalidModelRow | test.go:133:10:133:17 | call to Get | qltest | | test.go:137:10:137:17 | call to Get | qltest | | test.go:142:10:142:17 | call to Get | qltest | -| test.go:148:17:148:20 | arg1 | qltest | -| test.go:148:23:148:26 | arg2 | qltest | -| test.go:148:29:148:32 | arg3 | qltest | +| test.go:146:10:146:14 | selection of F | qltest | +| test.go:149:10:149:32 | call to GetThroughPointer | qltest | +| test.go:153:10:153:32 | call to GetThroughPointer | qltest | +| test.go:158:10:158:32 | call to GetThroughPointer | qltest | +| test.go:164:17:164:20 | arg1 | qltest | +| test.go:164:23:164:26 | arg2 | qltest | +| test.go:164:29:164:32 | arg3 | qltest | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/srcs.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/srcs.expected index 7b721110c67..2f1e3256778 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/srcs.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/srcs.expected @@ -17,3 +17,7 @@ invalidModelRow | test.go:132:15:132:22 | call to Src1 | qltest | | test.go:136:9:136:16 | call to Src1 | qltest | | test.go:140:9:140:16 | call to Src1 | qltest | +| test.go:145:24:145:31 | call to Src1 | qltest | +| test.go:148:17:148:24 | call to Src1 | qltest | +| test.go:152:24:152:31 | call to Src1 | qltest | +| test.go:156:24:156:31 | call to Src1 | qltest | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/test.go b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/test.go index a70b2868f58..35da086a888 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/test.go @@ -141,6 +141,22 @@ func simpleflow() { c4.Set("") b.Sink1(c4.Get()) // $ SPURIOUS: hasTaintFlow="call to Get" // because we currently don't clear content + cp1 := &test.C{""} + cp1.SetThroughPointer(a.Src1().(string)) + b.Sink1(cp1.F) // $ hasTaintFlow="selection of F" + + cp2 := &test.C{a.Src1().(string)} + b.Sink1(cp2.GetThroughPointer()) // $ hasTaintFlow="call to GetThroughPointer" + + cp3 := &test.C{""} + cp3.SetThroughPointer(a.Src1().(string)) + b.Sink1(cp3.GetThroughPointer()) // $ hasTaintFlow="call to GetThroughPointer" + + cp4 := &test.C{""} + cp4.SetThroughPointer(a.Src1().(string)) + cp4.SetThroughPointer("") + b.Sink1(cp4.GetThroughPointer()) // $ SPURIOUS: hasTaintFlow="call to GetThroughPointer" // because we currently don't clear content + arg1 := src arg2 := src arg3 := src diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/vendor/github.com/nonexistent/test/stub.go b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/vendor/github.com/nonexistent/test/stub.go index 2f13fce84e7..746f6ac9a6a 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/vendor/github.com/nonexistent/test/stub.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlow/vendor/github.com/nonexistent/test/stub.go @@ -67,3 +67,6 @@ type C struct { func (c C) Set(f string) {} func (c C) Get() string { return "" } + +func (c *C) SetThroughPointer(f string) {} +func (c *C) GetThroughPointer() string { return "" } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.expected index 81332464f79..105b7026d0c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.expected @@ -1,2 +1,3 @@ failures invalidModelRow +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.ql index 1be00de1f13..e30f7bc28e3 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowVarArgs/Flows.ql @@ -15,12 +15,10 @@ class DataConfiguration extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(DataConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -43,12 +41,10 @@ class TaintConfiguration extends TaintTracking::Configuration { } } -class TaintFlowTest extends InlineExpectationsTest { - TaintFlowTest() { this = "TaintFlowTest" } +module TaintFlowTest implements TestSig { + string getARelevantTag() { result = "taintflow" } - override string getARelevantTag() { result = "taintflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and exists(DataFlow::Node sink | any(TaintConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -58,3 +54,5 @@ class TaintFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected index 54091adf7d1..898f5bfc54c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected @@ -1,286 +1,286 @@ -| file://:0:0:0:0 | parameter 0 of AppendQuote | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuote | -| file://:0:0:0:0 | parameter 0 of AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToASCII | -| file://:0:0:0:0 | parameter 0 of AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToGraphic | -| file://:0:0:0:0 | parameter 0 of AppendSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendSlice | -| file://:0:0:0:0 | parameter 0 of As | file://:0:0:0:0 | [summary] to write: argument 1 in As | -| file://:0:0:0:0 | parameter 0 of Base | file://:0:0:0:0 | [summary] to write: return (return[0]) in Base | -| file://:0:0:0:0 | parameter 0 of BytePtrFromString | file://:0:0:0:0 | [summary] to write: return (return[0]) in BytePtrFromString | -| file://:0:0:0:0 | parameter 0 of ByteSliceFromString | file://:0:0:0:0 | [summary] to write: return (return[0]) in ByteSliceFromString | -| file://:0:0:0:0 | parameter 0 of Clean | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clean | -| file://:0:0:0:0 | parameter 0 of Dir | file://:0:0:0:0 | [summary] to write: return (return[0]) in Dir | -| file://:0:0:0:0 | parameter 0 of Expand | file://:0:0:0:0 | [summary] to write: return (return[0]) in Expand | -| file://:0:0:0:0 | parameter 0 of ExpandEnv | file://:0:0:0:0 | [summary] to write: return (return[0]) in ExpandEnv | -| file://:0:0:0:0 | parameter 0 of Ext | file://:0:0:0:0 | [summary] to write: return (return[0]) in Ext | -| file://:0:0:0:0 | parameter 0 of Fields | file://:0:0:0:0 | [summary] to write: return (return[0]) in Fields | -| file://:0:0:0:0 | parameter 0 of FieldsFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldsFunc | -| file://:0:0:0:0 | parameter 0 of FileInfoToDirEntry | file://:0:0:0:0 | [summary] to write: return (return[0]) in FileInfoToDirEntry | -| file://:0:0:0:0 | parameter 0 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter 0 of Indirect | file://:0:0:0:0 | [summary] to write: return (return[0]) in Indirect | -| file://:0:0:0:0 | parameter 0 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 0 of LimitReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in LimitReader | -| file://:0:0:0:0 | parameter 0 of LoadOrStore | file://:0:0:0:0 | [summary] to write: argument -1 in LoadOrStore | -| file://:0:0:0:0 | parameter 0 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter 0 of LoadPointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadPointer | -| file://:0:0:0:0 | parameter 0 of LoadUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadUintptr | -| file://:0:0:0:0 | parameter 0 of New | file://:0:0:0:0 | [summary] to write: return (return[0]) in New | -| file://:0:0:0:0 | parameter 0 of NewFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewFile | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewSectionReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewSectionReader | -| file://:0:0:0:0 | parameter 0 of NopCloser | file://:0:0:0:0 | [summary] to write: return (return[0]) in NopCloser | -| file://:0:0:0:0 | parameter 0 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter 0 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter 0 of ParseQuery | file://:0:0:0:0 | [summary] to write: return (return[0]) in ParseQuery | -| file://:0:0:0:0 | parameter 0 of ParseRequestURI | file://:0:0:0:0 | [summary] to write: return (return[0]) in ParseRequestURI | -| file://:0:0:0:0 | parameter 0 of PathEscape | file://:0:0:0:0 | [summary] to write: return (return[0]) in PathEscape | -| file://:0:0:0:0 | parameter 0 of PathUnescape | file://:0:0:0:0 | [summary] to write: return (return[0]) in PathUnescape | -| file://:0:0:0:0 | parameter 0 of Put | file://:0:0:0:0 | [summary] to write: argument -1 in Put | -| file://:0:0:0:0 | parameter 0 of QueryEscape | file://:0:0:0:0 | [summary] to write: return (return[0]) in QueryEscape | -| file://:0:0:0:0 | parameter 0 of QueryUnescape | file://:0:0:0:0 | [summary] to write: return (return[0]) in QueryUnescape | -| file://:0:0:0:0 | parameter 0 of Quote | file://:0:0:0:0 | [summary] to write: return (return[0]) in Quote | -| file://:0:0:0:0 | parameter 0 of QuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuoteToASCII | -| file://:0:0:0:0 | parameter 0 of QuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuoteToGraphic | -| file://:0:0:0:0 | parameter 0 of QuotedPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuotedPrefix | -| file://:0:0:0:0 | parameter 0 of ReadAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadAll | -| file://:0:0:0:0 | parameter 0 of ReadAtLeast | file://:0:0:0:0 | [summary] to write: argument 1 in ReadAtLeast | -| file://:0:0:0:0 | parameter 0 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter 0 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFull | file://:0:0:0:0 | [summary] to write: argument 1 in ReadFull | -| file://:0:0:0:0 | parameter 0 of Repeat | file://:0:0:0:0 | [summary] to write: return (return[0]) in Repeat | -| file://:0:0:0:0 | parameter 0 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 0 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 0 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of ResolveReference | file://:0:0:0:0 | [summary] to write: return (return[0]) in ResolveReference | -| file://:0:0:0:0 | parameter 0 of Reverse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Reverse | -| file://:0:0:0:0 | parameter 0 of Send | file://:0:0:0:0 | [summary] to write: argument -1 in Send | -| file://:0:0:0:0 | parameter 0 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 0 of SetBytes | file://:0:0:0:0 | [summary] to write: argument -1 in SetBytes | -| file://:0:0:0:0 | parameter 0 of SetMapIndex | file://:0:0:0:0 | [summary] to write: argument -1 in SetMapIndex | -| file://:0:0:0:0 | parameter 0 of SetPointer | file://:0:0:0:0 | [summary] to write: argument -1 in SetPointer | -| file://:0:0:0:0 | parameter 0 of SetString | file://:0:0:0:0 | [summary] to write: argument -1 in SetString | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[1]) in Split | -| file://:0:0:0:0 | parameter 0 of SplitAfter | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfter | -| file://:0:0:0:0 | parameter 0 of SplitAfterN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfterN | -| file://:0:0:0:0 | parameter 0 of SplitN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitN | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of StringBytePtr | file://:0:0:0:0 | [summary] to write: return (return[0]) in StringBytePtr | -| file://:0:0:0:0 | parameter 0 of StringByteSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in StringByteSlice | -| file://:0:0:0:0 | parameter 0 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of SwapPointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in SwapPointer | -| file://:0:0:0:0 | parameter 0 of SwapUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in SwapUintptr | -| file://:0:0:0:0 | parameter 0 of TeeReader | file://:0:0:0:0 | [summary] to write: argument 1 in TeeReader | -| file://:0:0:0:0 | parameter 0 of TeeReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in TeeReader | -| file://:0:0:0:0 | parameter 0 of Title | file://:0:0:0:0 | [summary] to write: return (return[0]) in Title | -| file://:0:0:0:0 | parameter 0 of ToLower | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLower | -| file://:0:0:0:0 | parameter 0 of ToTitle | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitle | -| file://:0:0:0:0 | parameter 0 of ToUpper | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpper | -| file://:0:0:0:0 | parameter 0 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 0 of Trim | file://:0:0:0:0 | [summary] to write: return (return[0]) in Trim | -| file://:0:0:0:0 | parameter 0 of TrimFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimFunc | -| file://:0:0:0:0 | parameter 0 of TrimLeft | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeft | -| file://:0:0:0:0 | parameter 0 of TrimLeftFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeftFunc | -| file://:0:0:0:0 | parameter 0 of TrimPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimPrefix | -| file://:0:0:0:0 | parameter 0 of TrimRight | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRight | -| file://:0:0:0:0 | parameter 0 of TrimRightFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRightFunc | -| file://:0:0:0:0 | parameter 0 of TrimSpace | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSpace | -| file://:0:0:0:0 | parameter 0 of TrimSuffix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSuffix | -| file://:0:0:0:0 | parameter 0 of TrySend | file://:0:0:0:0 | [summary] to write: argument -1 in TrySend | -| file://:0:0:0:0 | parameter 0 of Unquote | file://:0:0:0:0 | [summary] to write: return (return[0]) in Unquote | -| file://:0:0:0:0 | parameter 0 of UnquoteChar | file://:0:0:0:0 | [summary] to write: return (return[2]) in UnquoteChar | -| file://:0:0:0:0 | parameter 0 of Unwrap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Unwrap | -| file://:0:0:0:0 | parameter 0 of User | file://:0:0:0:0 | [summary] to write: return (return[0]) in User | -| file://:0:0:0:0 | parameter 0 of UserPassword | file://:0:0:0:0 | [summary] to write: return (return[0]) in UserPassword | -| file://:0:0:0:0 | parameter 0 of ValueOf | file://:0:0:0:0 | [summary] to write: return (return[0]) in ValueOf | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 1 of AddUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in AddUintptr | -| file://:0:0:0:0 | parameter 1 of AddUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in AddUintptr | -| file://:0:0:0:0 | parameter 1 of AppendQuote | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuote | -| file://:0:0:0:0 | parameter 1 of AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToASCII | -| file://:0:0:0:0 | parameter 1 of AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToGraphic | -| file://:0:0:0:0 | parameter 1 of AppendSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendSlice | -| file://:0:0:0:0 | parameter 1 of Copy | file://:0:0:0:0 | [summary] to write: argument 0 in Copy | -| file://:0:0:0:0 | parameter 1 of Copy | file://:0:0:0:0 | [summary] to write: argument 0 in Copy | -| file://:0:0:0:0 | parameter 1 of CopyBuffer | file://:0:0:0:0 | [summary] to write: argument 0 in CopyBuffer | -| file://:0:0:0:0 | parameter 1 of CopyN | file://:0:0:0:0 | [summary] to write: argument 0 in CopyN | -| file://:0:0:0:0 | parameter 1 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: argument -1 in LoadOrStore | -| file://:0:0:0:0 | parameter 1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter 1 of Map | file://:0:0:0:0 | [summary] to write: return (return[0]) in Map | -| file://:0:0:0:0 | parameter 1 of SetMapIndex | file://:0:0:0:0 | [summary] to write: argument -1 in SetMapIndex | -| file://:0:0:0:0 | parameter 1 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 1 of StorePointer | file://:0:0:0:0 | [summary] to write: argument 0 in StorePointer | -| file://:0:0:0:0 | parameter 1 of StoreUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in StoreUintptr | -| file://:0:0:0:0 | parameter 1 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 1 of SwapPointer | file://:0:0:0:0 | [summary] to write: argument 0 in SwapPointer | -| file://:0:0:0:0 | parameter 1 of SwapUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in SwapUintptr | -| file://:0:0:0:0 | parameter 1 of ToLowerSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLowerSpecial | -| file://:0:0:0:0 | parameter 1 of ToTitleSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitleSpecial | -| file://:0:0:0:0 | parameter 1 of ToUpperSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpperSpecial | -| file://:0:0:0:0 | parameter 1 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 1 of UserPassword | file://:0:0:0:0 | [summary] to write: return (return[0]) in UserPassword | -| file://:0:0:0:0 | parameter 1 of WriteString | file://:0:0:0:0 | [summary] to write: argument 0 in WriteString | -| file://:0:0:0:0 | parameter 1 of WriteString | file://:0:0:0:0 | [summary] to write: argument 0 in WriteString | -| file://:0:0:0:0 | parameter 2 of CompareAndSwap | file://:0:0:0:0 | [summary] to write: argument -1 in CompareAndSwap | -| file://:0:0:0:0 | parameter 2 of CompareAndSwapPointer | file://:0:0:0:0 | [summary] to write: argument 0 in CompareAndSwapPointer | -| file://:0:0:0:0 | parameter 2 of CompareAndSwapUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in CompareAndSwapUintptr | -| file://:0:0:0:0 | parameter 2 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 2 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter -1 of Addr | file://:0:0:0:0 | [summary] to write: return (return[0]) in Addr | -| file://:0:0:0:0 | parameter -1 of Bytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in Bytes | -| file://:0:0:0:0 | parameter -1 of Convert | file://:0:0:0:0 | [summary] to write: return (return[0]) in Convert | -| file://:0:0:0:0 | parameter -1 of Elem | file://:0:0:0:0 | [summary] to write: return (return[0]) in Elem | -| file://:0:0:0:0 | parameter -1 of Encode | file://:0:0:0:0 | [summary] to write: return (return[0]) in Encode | -| file://:0:0:0:0 | parameter -1 of EscapedPath | file://:0:0:0:0 | [summary] to write: return (return[0]) in EscapedPath | -| file://:0:0:0:0 | parameter -1 of Fd | file://:0:0:0:0 | [summary] to write: return (return[0]) in Fd | -| file://:0:0:0:0 | parameter -1 of Field | file://:0:0:0:0 | [summary] to write: return (return[0]) in Field | -| file://:0:0:0:0 | parameter -1 of FieldByIndex | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByIndex | -| file://:0:0:0:0 | parameter -1 of FieldByName | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByName | -| file://:0:0:0:0 | parameter -1 of FieldByNameFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByNameFunc | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter -1 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of Hostname | file://:0:0:0:0 | [summary] to write: return (return[0]) in Hostname | -| file://:0:0:0:0 | parameter -1 of Index | file://:0:0:0:0 | [summary] to write: return (return[0]) in Index | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Interface | file://:0:0:0:0 | [summary] to write: return (return[0]) in Interface | -| file://:0:0:0:0 | parameter -1 of InterfaceData | file://:0:0:0:0 | [summary] to write: return (return[0]) in InterfaceData | -| file://:0:0:0:0 | parameter -1 of Key | file://:0:0:0:0 | [summary] to write: return (return[0]) in Key | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter -1 of Lookup | file://:0:0:0:0 | [summary] to write: return (return[0]) in Lookup | -| file://:0:0:0:0 | parameter -1 of MapIndex | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapIndex | -| file://:0:0:0:0 | parameter -1 of MapKeys | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapKeys | -| file://:0:0:0:0 | parameter -1 of MapRange | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapRange | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of Method | file://:0:0:0:0 | [summary] to write: return (return[0]) in Method | -| file://:0:0:0:0 | parameter -1 of MethodByName | file://:0:0:0:0 | [summary] to write: return (return[0]) in MethodByName | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter -1 of Password | file://:0:0:0:0 | [summary] to write: return (return[0]) in Password | -| file://:0:0:0:0 | parameter -1 of Pointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in Pointer | -| file://:0:0:0:0 | parameter -1 of Port | file://:0:0:0:0 | [summary] to write: return (return[0]) in Port | -| file://:0:0:0:0 | parameter -1 of Query | file://:0:0:0:0 | [summary] to write: return (return[0]) in Query | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter -1 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter -1 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter -1 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter -1 of Recv | file://:0:0:0:0 | [summary] to write: return (return[0]) in Recv | -| file://:0:0:0:0 | parameter -1 of RequestURI | file://:0:0:0:0 | [summary] to write: return (return[0]) in RequestURI | -| file://:0:0:0:0 | parameter -1 of ResolveReference | file://:0:0:0:0 | [summary] to write: return (return[0]) in ResolveReference | -| file://:0:0:0:0 | parameter -1 of Slice | file://:0:0:0:0 | [summary] to write: return (return[0]) in Slice | -| file://:0:0:0:0 | parameter -1 of Slice3 | file://:0:0:0:0 | [summary] to write: return (return[0]) in Slice3 | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter -1 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of Token | file://:0:0:0:0 | [summary] to write: return (return[0]) in Token | -| file://:0:0:0:0 | parameter -1 of Token | file://:0:0:0:0 | [summary] to write: return (return[0]) in Token | -| file://:0:0:0:0 | parameter -1 of TryRecv | file://:0:0:0:0 | [summary] to write: return (return[0]) in TryRecv | -| file://:0:0:0:0 | parameter -1 of UnsafeAddr | file://:0:0:0:0 | [summary] to write: return (return[0]) in UnsafeAddr | -| file://:0:0:0:0 | parameter -1 of Username | file://:0:0:0:0 | [summary] to write: return (return[0]) in Username | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | +| file://:0:0:0:0 | [summary param] 0 in AppendQuote | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuote | +| file://:0:0:0:0 | [summary param] 0 in AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToASCII | +| file://:0:0:0:0 | [summary param] 0 in AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToGraphic | +| file://:0:0:0:0 | [summary param] 0 in AppendSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendSlice | +| file://:0:0:0:0 | [summary param] 0 in As | file://:0:0:0:0 | [summary] to write: Argument[1] in As | +| file://:0:0:0:0 | [summary param] 0 in Base | file://:0:0:0:0 | [summary] to write: ReturnValue in Base | +| file://:0:0:0:0 | [summary param] 0 in BytePtrFromString | file://:0:0:0:0 | [summary] to write: ReturnValue in BytePtrFromString | +| file://:0:0:0:0 | [summary param] 0 in ByteSliceFromString | file://:0:0:0:0 | [summary] to write: ReturnValue in ByteSliceFromString | +| file://:0:0:0:0 | [summary param] 0 in Clean | file://:0:0:0:0 | [summary] to write: ReturnValue in Clean | +| file://:0:0:0:0 | [summary param] 0 in Dir | file://:0:0:0:0 | [summary] to write: ReturnValue in Dir | +| file://:0:0:0:0 | [summary param] 0 in Expand | file://:0:0:0:0 | [summary] to write: ReturnValue in Expand | +| file://:0:0:0:0 | [summary param] 0 in ExpandEnv | file://:0:0:0:0 | [summary] to write: ReturnValue in ExpandEnv | +| file://:0:0:0:0 | [summary param] 0 in Ext | file://:0:0:0:0 | [summary] to write: ReturnValue in Ext | +| file://:0:0:0:0 | [summary param] 0 in Fields | file://:0:0:0:0 | [summary] to write: ReturnValue in Fields | +| file://:0:0:0:0 | [summary param] 0 in FieldsFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldsFunc | +| file://:0:0:0:0 | [summary param] 0 in FileInfoToDirEntry | file://:0:0:0:0 | [summary] to write: ReturnValue in FileInfoToDirEntry | +| file://:0:0:0:0 | [summary param] 0 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] 0 in Indirect | file://:0:0:0:0 | [summary] to write: ReturnValue in Indirect | +| file://:0:0:0:0 | [summary param] 0 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 0 in LimitReader | file://:0:0:0:0 | [summary] to write: ReturnValue in LimitReader | +| file://:0:0:0:0 | [summary param] 0 in LoadOrStore | file://:0:0:0:0 | [summary] to write: Argument[-1] in LoadOrStore | +| file://:0:0:0:0 | [summary param] 0 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] 0 in LoadPointer | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadPointer | +| file://:0:0:0:0 | [summary param] 0 in LoadUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadUintptr | +| file://:0:0:0:0 | [summary param] 0 in New | file://:0:0:0:0 | [summary] to write: ReturnValue in New | +| file://:0:0:0:0 | [summary param] 0 in NewFile | file://:0:0:0:0 | [summary] to write: ReturnValue in NewFile | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewSectionReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewSectionReader | +| file://:0:0:0:0 | [summary param] 0 in NopCloser | file://:0:0:0:0 | [summary] to write: ReturnValue in NopCloser | +| file://:0:0:0:0 | [summary param] 0 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] 0 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] 0 in ParseQuery | file://:0:0:0:0 | [summary] to write: ReturnValue in ParseQuery | +| file://:0:0:0:0 | [summary param] 0 in ParseRequestURI | file://:0:0:0:0 | [summary] to write: ReturnValue in ParseRequestURI | +| file://:0:0:0:0 | [summary param] 0 in PathEscape | file://:0:0:0:0 | [summary] to write: ReturnValue in PathEscape | +| file://:0:0:0:0 | [summary param] 0 in PathUnescape | file://:0:0:0:0 | [summary] to write: ReturnValue in PathUnescape | +| file://:0:0:0:0 | [summary param] 0 in Put | file://:0:0:0:0 | [summary] to write: Argument[-1] in Put | +| file://:0:0:0:0 | [summary param] 0 in QueryEscape | file://:0:0:0:0 | [summary] to write: ReturnValue in QueryEscape | +| file://:0:0:0:0 | [summary param] 0 in QueryUnescape | file://:0:0:0:0 | [summary] to write: ReturnValue in QueryUnescape | +| file://:0:0:0:0 | [summary param] 0 in Quote | file://:0:0:0:0 | [summary] to write: ReturnValue in Quote | +| file://:0:0:0:0 | [summary param] 0 in QuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in QuoteToASCII | +| file://:0:0:0:0 | [summary param] 0 in QuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in QuoteToGraphic | +| file://:0:0:0:0 | [summary param] 0 in QuotedPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in QuotedPrefix | +| file://:0:0:0:0 | [summary param] 0 in ReadAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadAll | +| file://:0:0:0:0 | [summary param] 0 in ReadAtLeast | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadAtLeast | +| file://:0:0:0:0 | [summary param] 0 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] 0 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFull | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadFull | +| file://:0:0:0:0 | [summary param] 0 in Repeat | file://:0:0:0:0 | [summary] to write: ReturnValue in Repeat | +| file://:0:0:0:0 | [summary param] 0 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 0 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 0 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in ResolveReference | file://:0:0:0:0 | [summary] to write: ReturnValue in ResolveReference | +| file://:0:0:0:0 | [summary param] 0 in Reverse | file://:0:0:0:0 | [summary] to write: ReturnValue in Reverse | +| file://:0:0:0:0 | [summary param] 0 in Send | file://:0:0:0:0 | [summary] to write: Argument[-1] in Send | +| file://:0:0:0:0 | [summary param] 0 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 0 in SetBytes | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetBytes | +| file://:0:0:0:0 | [summary param] 0 in SetMapIndex | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetMapIndex | +| file://:0:0:0:0 | [summary param] 0 in SetPointer | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetPointer | +| file://:0:0:0:0 | [summary param] 0 in SetString | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetString | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Split | +| file://:0:0:0:0 | [summary param] 0 in SplitAfter | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfter | +| file://:0:0:0:0 | [summary param] 0 in SplitAfterN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfterN | +| file://:0:0:0:0 | [summary param] 0 in SplitN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitN | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in StringBytePtr | file://:0:0:0:0 | [summary] to write: ReturnValue in StringBytePtr | +| file://:0:0:0:0 | [summary param] 0 in StringByteSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in StringByteSlice | +| file://:0:0:0:0 | [summary param] 0 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in SwapPointer | file://:0:0:0:0 | [summary] to write: ReturnValue in SwapPointer | +| file://:0:0:0:0 | [summary param] 0 in SwapUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in SwapUintptr | +| file://:0:0:0:0 | [summary param] 0 in TeeReader | file://:0:0:0:0 | [summary] to write: Argument[1] in TeeReader | +| file://:0:0:0:0 | [summary param] 0 in TeeReader | file://:0:0:0:0 | [summary] to write: ReturnValue in TeeReader | +| file://:0:0:0:0 | [summary param] 0 in Title | file://:0:0:0:0 | [summary] to write: ReturnValue in Title | +| file://:0:0:0:0 | [summary param] 0 in ToLower | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLower | +| file://:0:0:0:0 | [summary param] 0 in ToTitle | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitle | +| file://:0:0:0:0 | [summary param] 0 in ToUpper | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpper | +| file://:0:0:0:0 | [summary param] 0 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 0 in Trim | file://:0:0:0:0 | [summary] to write: ReturnValue in Trim | +| file://:0:0:0:0 | [summary param] 0 in TrimFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimLeft | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeft | +| file://:0:0:0:0 | [summary param] 0 in TrimLeftFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeftFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimPrefix | +| file://:0:0:0:0 | [summary param] 0 in TrimRight | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRight | +| file://:0:0:0:0 | [summary param] 0 in TrimRightFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRightFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimSpace | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSpace | +| file://:0:0:0:0 | [summary param] 0 in TrimSuffix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSuffix | +| file://:0:0:0:0 | [summary param] 0 in TrySend | file://:0:0:0:0 | [summary] to write: Argument[-1] in TrySend | +| file://:0:0:0:0 | [summary param] 0 in Unquote | file://:0:0:0:0 | [summary] to write: ReturnValue in Unquote | +| file://:0:0:0:0 | [summary param] 0 in UnquoteChar | file://:0:0:0:0 | [summary] to write: ReturnValue[2] in UnquoteChar | +| file://:0:0:0:0 | [summary param] 0 in Unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in Unwrap | +| file://:0:0:0:0 | [summary param] 0 in User | file://:0:0:0:0 | [summary] to write: ReturnValue in User | +| file://:0:0:0:0 | [summary param] 0 in UserPassword | file://:0:0:0:0 | [summary] to write: ReturnValue in UserPassword | +| file://:0:0:0:0 | [summary param] 0 in ValueOf | file://:0:0:0:0 | [summary] to write: ReturnValue in ValueOf | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 1 in AddUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in AddUintptr | +| file://:0:0:0:0 | [summary param] 1 in AddUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in AddUintptr | +| file://:0:0:0:0 | [summary param] 1 in AppendQuote | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuote | +| file://:0:0:0:0 | [summary param] 1 in AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToASCII | +| file://:0:0:0:0 | [summary param] 1 in AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToGraphic | +| file://:0:0:0:0 | [summary param] 1 in AppendSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendSlice | +| file://:0:0:0:0 | [summary param] 1 in Copy | file://:0:0:0:0 | [summary] to write: Argument[0] in Copy | +| file://:0:0:0:0 | [summary param] 1 in Copy | file://:0:0:0:0 | [summary] to write: Argument[0] in Copy | +| file://:0:0:0:0 | [summary param] 1 in CopyBuffer | file://:0:0:0:0 | [summary] to write: Argument[0] in CopyBuffer | +| file://:0:0:0:0 | [summary param] 1 in CopyN | file://:0:0:0:0 | [summary] to write: Argument[0] in CopyN | +| file://:0:0:0:0 | [summary param] 1 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: Argument[-1] in LoadOrStore | +| file://:0:0:0:0 | [summary param] 1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] 1 in Map | file://:0:0:0:0 | [summary] to write: ReturnValue in Map | +| file://:0:0:0:0 | [summary param] 1 in SetMapIndex | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetMapIndex | +| file://:0:0:0:0 | [summary param] 1 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 1 in StorePointer | file://:0:0:0:0 | [summary] to write: Argument[0] in StorePointer | +| file://:0:0:0:0 | [summary param] 1 in StoreUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in StoreUintptr | +| file://:0:0:0:0 | [summary param] 1 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 1 in SwapPointer | file://:0:0:0:0 | [summary] to write: Argument[0] in SwapPointer | +| file://:0:0:0:0 | [summary param] 1 in SwapUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in SwapUintptr | +| file://:0:0:0:0 | [summary param] 1 in ToLowerSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLowerSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToTitleSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitleSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToUpperSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpperSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 1 in UserPassword | file://:0:0:0:0 | [summary] to write: ReturnValue in UserPassword | +| file://:0:0:0:0 | [summary param] 1 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteString | +| file://:0:0:0:0 | [summary param] 1 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteString | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwap | file://:0:0:0:0 | [summary] to write: Argument[-1] in CompareAndSwap | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwapPointer | file://:0:0:0:0 | [summary] to write: Argument[0] in CompareAndSwapPointer | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwapUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in CompareAndSwapUintptr | +| file://:0:0:0:0 | [summary param] 2 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 2 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] -1 in Addr | file://:0:0:0:0 | [summary] to write: ReturnValue in Addr | +| file://:0:0:0:0 | [summary param] -1 in Bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in Bytes | +| file://:0:0:0:0 | [summary param] -1 in Convert | file://:0:0:0:0 | [summary] to write: ReturnValue in Convert | +| file://:0:0:0:0 | [summary param] -1 in Elem | file://:0:0:0:0 | [summary] to write: ReturnValue in Elem | +| file://:0:0:0:0 | [summary param] -1 in Encode | file://:0:0:0:0 | [summary] to write: ReturnValue in Encode | +| file://:0:0:0:0 | [summary param] -1 in EscapedPath | file://:0:0:0:0 | [summary] to write: ReturnValue in EscapedPath | +| file://:0:0:0:0 | [summary param] -1 in Fd | file://:0:0:0:0 | [summary] to write: ReturnValue in Fd | +| file://:0:0:0:0 | [summary param] -1 in Field | file://:0:0:0:0 | [summary] to write: ReturnValue in Field | +| file://:0:0:0:0 | [summary param] -1 in FieldByIndex | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByIndex | +| file://:0:0:0:0 | [summary param] -1 in FieldByName | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByName | +| file://:0:0:0:0 | [summary param] -1 in FieldByNameFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByNameFunc | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] -1 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in Hostname | file://:0:0:0:0 | [summary] to write: ReturnValue in Hostname | +| file://:0:0:0:0 | [summary param] -1 in Index | file://:0:0:0:0 | [summary] to write: ReturnValue in Index | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Interface | file://:0:0:0:0 | [summary] to write: ReturnValue in Interface | +| file://:0:0:0:0 | [summary param] -1 in InterfaceData | file://:0:0:0:0 | [summary] to write: ReturnValue in InterfaceData | +| file://:0:0:0:0 | [summary param] -1 in Key | file://:0:0:0:0 | [summary] to write: ReturnValue in Key | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] -1 in Lookup | file://:0:0:0:0 | [summary] to write: ReturnValue in Lookup | +| file://:0:0:0:0 | [summary param] -1 in MapIndex | file://:0:0:0:0 | [summary] to write: ReturnValue in MapIndex | +| file://:0:0:0:0 | [summary param] -1 in MapKeys | file://:0:0:0:0 | [summary] to write: ReturnValue in MapKeys | +| file://:0:0:0:0 | [summary param] -1 in MapRange | file://:0:0:0:0 | [summary] to write: ReturnValue in MapRange | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in Method | file://:0:0:0:0 | [summary] to write: ReturnValue in Method | +| file://:0:0:0:0 | [summary param] -1 in MethodByName | file://:0:0:0:0 | [summary] to write: ReturnValue in MethodByName | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] -1 in Password | file://:0:0:0:0 | [summary] to write: ReturnValue in Password | +| file://:0:0:0:0 | [summary param] -1 in Pointer | file://:0:0:0:0 | [summary] to write: ReturnValue in Pointer | +| file://:0:0:0:0 | [summary param] -1 in Port | file://:0:0:0:0 | [summary] to write: ReturnValue in Port | +| file://:0:0:0:0 | [summary param] -1 in Query | file://:0:0:0:0 | [summary] to write: ReturnValue in Query | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] -1 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] -1 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] -1 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] -1 in Recv | file://:0:0:0:0 | [summary] to write: ReturnValue in Recv | +| file://:0:0:0:0 | [summary param] -1 in RequestURI | file://:0:0:0:0 | [summary] to write: ReturnValue in RequestURI | +| file://:0:0:0:0 | [summary param] -1 in ResolveReference | file://:0:0:0:0 | [summary] to write: ReturnValue in ResolveReference | +| file://:0:0:0:0 | [summary param] -1 in Slice | file://:0:0:0:0 | [summary] to write: ReturnValue in Slice | +| file://:0:0:0:0 | [summary param] -1 in Slice3 | file://:0:0:0:0 | [summary] to write: ReturnValue in Slice3 | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] -1 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in Token | file://:0:0:0:0 | [summary] to write: ReturnValue in Token | +| file://:0:0:0:0 | [summary param] -1 in Token | file://:0:0:0:0 | [summary] to write: ReturnValue in Token | +| file://:0:0:0:0 | [summary param] -1 in TryRecv | file://:0:0:0:0 | [summary] to write: ReturnValue in TryRecv | +| file://:0:0:0:0 | [summary param] -1 in UnsafeAddr | file://:0:0:0:0 | [summary] to write: ReturnValue in UnsafeAddr | +| file://:0:0:0:0 | [summary param] -1 in Username | file://:0:0:0:0 | [summary] to write: ReturnValue in Username | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | | main.go:26:11:26:17 | type assertion | main.go:26:2:26:17 | ... := ...[0] | | main.go:26:11:26:17 | type assertion | main.go:26:2:26:17 | ... := ...[1] | | main.go:38:13:38:13 | 1 | main.go:38:7:38:20 | slice literal | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.expected b/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.ql index 881d262f400..1b27b27d6dc 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/GenericFunctionsAndTypes/Flows.ql @@ -1,2 +1,3 @@ import go import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.ql index 2b11d284076..d5bc1496b3d 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/GuardingFunctions/test.ql @@ -23,12 +23,10 @@ class TestConfig extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(TestConfig c).hasFlow(_, sink) | element = sink.toString() and @@ -38,3 +36,5 @@ class DataFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.ql index f75495313d4..aa9b9c3e074 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ListOfConstantsSanitizerGuards/test.ql @@ -13,12 +13,10 @@ class TestConfig extends TaintTracking::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(TestConfig c).hasFlow(_, sink) | element = sink.toString() and @@ -28,3 +26,5 @@ class DataFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.expected b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.ql b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.ql index 90c0878ff8d..8222ae35d87 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/DataFlowConfig.ql @@ -21,12 +21,10 @@ class TestConfig extends DataFlow::Configuration { } } -class PromotedFieldsTest extends InlineExpectationsTest { - PromotedFieldsTest() { this = "PromotedFieldsTest" } +module PromotedFieldsTest implements TestSig { + string getARelevantTag() { result = "promotedfields" } - override string getARelevantTag() { result = "promotedfields" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(TestConfig config, DataFlow::PathNode sink | config.hasFlowPath(_, sink) and sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -37,3 +35,5 @@ class PromotedFieldsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.expected b/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.ql b/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.ql index f99f7775a3b..fac89a50650 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/PromotedMethods/DataFlowConfig.ql @@ -21,12 +21,10 @@ class TestConfig extends DataFlow::Configuration { } } -class PromotedMethodsTest extends InlineExpectationsTest { - PromotedMethodsTest() { this = "PromotedMethodsTest" } +module PromotedMethodsTest implements TestSig { + string getARelevantTag() { result = "promotedmethods" } - override string getARelevantTag() { result = "promotedmethods" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(TestConfig config, DataFlow::Node source, DataFlow::Node sink | config.hasFlow(source, sink) | @@ -38,3 +36,5 @@ class PromotedMethodsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.expected b/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.ql b/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.ql index edabb61bf5d..9412fb13486 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/TypeAssertions/DataFlow.ql @@ -13,12 +13,10 @@ class Configuration extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(Configuration c).hasFlow(_, sink) | element = sink.toString() and @@ -28,3 +26,5 @@ class DataFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.expected b/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.ql index e6e99b0e6c2..500572f5d45 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/VarArgs/Flows.ql @@ -13,12 +13,10 @@ class DataConfiguration extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(DataConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -41,12 +39,10 @@ class TaintConfiguration extends TaintTracking::Configuration { } } -class TaintFlowTest extends InlineExpectationsTest { - TaintFlowTest() { this = "TaintFlowTest" } +module TaintFlowTest implements TestSig { + string getARelevantTag() { result = "taintflow" } - override string getARelevantTag() { result = "taintflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and exists(DataFlow::Node sink | any(TaintConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -56,3 +52,5 @@ class TaintFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.expected b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.expected index 81332464f79..105b7026d0c 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.expected @@ -1,2 +1,3 @@ failures invalidModelRow +testFailures diff --git a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql index 87e9b301148..17194265598 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql @@ -43,12 +43,10 @@ class DataConfiguration extends DataFlow::Configuration { } } -class DataFlowTest extends InlineExpectationsTest { - DataFlowTest() { this = "DataFlowTest" } +module DataFlowTest implements TestSig { + string getARelevantTag() { result = "dataflow" } - override string getARelevantTag() { result = "dataflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "dataflow" and exists(DataFlow::Node sink | any(DataConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -71,12 +69,10 @@ class TaintConfiguration extends TaintTracking::Configuration { } } -class TaintFlowTest extends InlineExpectationsTest { - TaintFlowTest() { this = "TaintFlowTest" } +module TaintFlowTest implements TestSig { + string getARelevantTag() { result = "taintflow" } - override string getARelevantTag() { result = "taintflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and exists(DataFlow::Node sink | any(TaintConfiguration c).hasFlow(_, sink) | element = sink.toString() and @@ -86,9 +82,5 @@ class TaintFlowTest extends InlineExpectationsTest { ) } } -// from TaintConfiguration cfg, DataFlow::PartialPathNode source, DataFlow::PartialPathNode sink -// where -// cfg.hasPartialFlow(source, sink, _) -// and -// source.getNode().hasLocationInfo(_, 22, _, _, _) -// select sink, source, sink, "Partial flow from unsanitized user data" + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected index 2d29d2b2357..29b131c367a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected @@ -47,7 +47,7 @@ edges | test.go:240:15:240:36 | call to GetString | test.go:243:21:243:29 | untrusted | | test.go:253:23:253:44 | call to GetCookie | test.go:253:16:253:45 | type conversion | | test.go:264:62:264:83 | call to GetCookie | test.go:264:55:264:84 | type conversion | -| test.go:269:2:269:40 | ... := ...[0] | test.go:277:21:277:61 | call to GetDisplayString | +| test.go:269:2:269:40 | ... := ...[0] | test.go:277:44:277:60 | selection of Filename | | test.go:269:2:269:40 | ... := ...[0] | test.go:278:38:278:49 | genericFiles | | test.go:269:2:269:40 | ... := ...[0] | test.go:279:37:279:48 | genericFiles | | test.go:269:2:269:40 | ... := ...[0] | test.go:285:4:285:15 | genericFiles | @@ -61,6 +61,7 @@ edges | test.go:269:2:269:40 | ... := ...[0] | test.go:295:39:295:50 | genericFiles | | test.go:269:2:269:40 | ... := ...[0] | test.go:296:40:296:51 | genericFiles | | test.go:269:2:269:40 | ... := ...[0] | test.go:297:39:297:50 | genericFiles | +| test.go:277:44:277:60 | selection of Filename | test.go:277:21:277:61 | call to GetDisplayString | | test.go:278:21:278:53 | call to SliceChunk | test.go:278:21:278:92 | selection of Filename | | test.go:278:38:278:49 | genericFiles | test.go:278:21:278:53 | call to SliceChunk | | test.go:279:21:279:60 | call to SliceDiff | test.go:279:21:279:96 | selection of Filename | @@ -177,6 +178,7 @@ nodes | test.go:264:62:264:83 | call to GetCookie | semmle.label | call to GetCookie | | test.go:269:2:269:40 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:277:21:277:61 | call to GetDisplayString | semmle.label | call to GetDisplayString | +| test.go:277:44:277:60 | selection of Filename | semmle.label | selection of Filename | | test.go:278:21:278:53 | call to SliceChunk | semmle.label | call to SliceChunk | | test.go:278:21:278:92 | selection of Filename | semmle.label | selection of Filename | | test.go:278:38:278:49 | genericFiles | semmle.label | genericFiles | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.expected b/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.ql b/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.ql index 535fb6dd627..0b1bef94328 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/CouchbaseV1/test.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import semmle.go.security.SqlInjection -class SqlInjectionTest extends InlineExpectationsTest { - SqlInjectionTest() { this = "SqlInjectionTest" } +module SqlInjectionTest implements TestSig { + string getARelevantTag() { result = "sqlinjection" } - override string getARelevantTag() { result = "sqlinjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "sqlinjection" and exists(DataFlow::Node sink | any(SqlInjection::Configuration c).hasFlow(_, sink) | element = sink.toString() and @@ -17,3 +15,5 @@ class SqlInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.expected b/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.ql b/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.ql index e8c68c1c3e1..2ffca8a692a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/ElazarlGoproxy/test.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class UntrustedFlowSourceTest extends InlineExpectationsTest { - UntrustedFlowSourceTest() { this = "untrustedflowsource" } +module UntrustedFlowSourceTest implements TestSig { + string getARelevantTag() { result = "untrustedflowsource" } - override string getARelevantTag() { result = "untrustedflowsource" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "untrustedflowsource" and value = element and exists(UntrustedFlowSource src | value = "\"" + src.toString() + "\"" | @@ -16,12 +14,10 @@ class UntrustedFlowSourceTest extends InlineExpectationsTest { } } -class HeaderWriteTest extends InlineExpectationsTest { - HeaderWriteTest() { this = "headerwrite" } +module HeaderWriteTest implements TestSig { + string getARelevantTag() { result = "headerwrite" } - override string getARelevantTag() { result = "headerwrite" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "headerwrite" and exists(Http::HeaderWrite hw, string name, string val | element = hw.toString() | hw.definesHeader(name, val) and @@ -32,12 +28,10 @@ class HeaderWriteTest extends InlineExpectationsTest { } } -class LoggerTest extends InlineExpectationsTest { - LoggerTest() { this = "LoggerTest" } +module LoggerTest implements TestSig { + string getARelevantTag() { result = "logger" } - override string getARelevantTag() { result = "logger" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(LoggerCall log | log.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -48,32 +42,32 @@ class LoggerTest extends InlineExpectationsTest { } } -class Config extends TaintTracking::Configuration { - Config() { this = "goproxy config" } - - override predicate isSource(DataFlow::Node n) { +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n = any(DataFlow::CallNode c | c.getCalleeName().matches("tainted%")).getResult() } - override predicate isSink(DataFlow::Node n) { + predicate isSink(DataFlow::Node n) { n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() } } -class TaintFlow extends InlineExpectationsTest { - TaintFlow() { this = "goproxy flow" } +module Flow = TaintTracking::Global; - override string getARelevantTag() { result = "taintflow" } +module TaintFlow implements TestSig { + string getARelevantTag() { result = "taintflow" } - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and value = "" and element = "" and - exists(Config c, DataFlow::Node toNode | + exists(DataFlow::Node toNode | toNode .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - c.hasFlowTo(toNode) + Flow::flowTo(toNode) ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.expected b/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.ql b/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.ql index 0d411503e34..998afbf88b5 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/EvanphxJsonPatch/TaintFlows.ql @@ -16,12 +16,10 @@ class Configuration extends TaintTracking::Configuration { } } -class TaintFlowTest extends InlineExpectationsTest { - TaintFlowTest() { this = "TaintFlowTest" } +module TaintFlowTest implements TestSig { + string getARelevantTag() { result = "taintflow" } - override string getARelevantTag() { result = "taintflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "taintflow" and exists(DataFlow::Node sink | any(Configuration c).hasFlow(_, sink) | element = sink.toString() and @@ -31,3 +29,5 @@ class TaintFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.expected b/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.ql b/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.ql index 7cffdcb78ba..ff95de5b731 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoKit/untrustedflowsource.ql @@ -2,12 +2,10 @@ import go import semmle.go.frameworks.GoKit import TestUtilities.InlineExpectationsTest -class UntrustedFlowSourceTest extends InlineExpectationsTest { - UntrustedFlowSourceTest() { this = "untrustedflowsourcetest" } +module UntrustedFlowSourceTest implements TestSig { + string getARelevantTag() { result = "source" } - override string getARelevantTag() { result = "source" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(UntrustedFlowSource source | source .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -18,3 +16,5 @@ class UntrustedFlowSourceTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.expected b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.ql b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.ql index 8a9292957b3..793308837c1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApiCoreV1/TaintFlowsInline.ql @@ -21,12 +21,10 @@ class TestConfig extends TaintTracking::Configuration { } } -class K8sIoApiCoreV1Test extends InlineExpectationsTest { - K8sIoApiCoreV1Test() { this = "K8sIoApiCoreV1Test" } +module K8sIoApiCoreV1Test implements TestSig { + string getARelevantTag() { result = "KsIoApiCoreV" } - override string getARelevantTag() { result = "KsIoApiCoreV" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(TestConfig config, DataFlow::PathNode sink | config.hasFlowPath(_, sink) and sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -37,3 +35,5 @@ class K8sIoApiCoreV1Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.expected b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.ql b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.ql index e9b2c13ccca..901dcb9eaf5 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoApimachineryPkgRuntime/TaintFlowsInline.ql @@ -21,12 +21,10 @@ class TestConfig extends TaintTracking::Configuration { } } -class K8sIoApimachineryPkgRuntimeTest extends InlineExpectationsTest { - K8sIoApimachineryPkgRuntimeTest() { this = "KsIoApimachineryPkgRuntimeTest" } +module K8sIoApimachineryPkgRuntimeTest implements TestSig { + string getARelevantTag() { result = "KsIoApimachineryPkgRuntime" } - override string getARelevantTag() { result = "KsIoApimachineryPkgRuntime" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(TestConfig config, DataFlow::PathNode sink | config.hasFlowPath(_, sink) and sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -37,3 +35,5 @@ class K8sIoApimachineryPkgRuntimeTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.expected b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.ql b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.ql index 1650e263252..be38cebd11b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/K8sIoClientGo/SecretInterfaceSource.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class K8sIoApimachineryPkgRuntimeTest extends InlineExpectationsTest { - K8sIoApimachineryPkgRuntimeTest() { this = "KsIoClientGoTest" } +module K8sIoApimachineryPkgRuntimeTest implements TestSig { + string getARelevantTag() { result = "KsIoClientGo" } - override string getARelevantTag() { result = "KsIoClientGo" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(K8sIoClientGo::SecretInterfaceSource source | source .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,3 +15,5 @@ class K8sIoApimachineryPkgRuntimeTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.expected b/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.ql b/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.ql index cfe40a0066e..3f14991d274 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/NoSQL/Query.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class NoSqlQueryTest extends InlineExpectationsTest { - NoSqlQueryTest() { this = "NoSQLQueryTest" } +module NoSqlQueryTest implements TestSig { + string getARelevantTag() { result = "nosqlquery" } - override string getARelevantTag() { result = "nosqlquery" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(NoSql::Query q | q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -16,3 +14,5 @@ class NoSqlQueryTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.ql b/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.ql index 9d2b876d803..bae5b14ccd4 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/test.ql @@ -15,12 +15,10 @@ class TestConfig extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } } -class MissingDataFlowTest extends InlineExpectationsTest { - MissingDataFlowTest() { this = "MissingDataFlow" } +module MissingDataFlowTest implements TestSig { + string getARelevantTag() { result = "noflow" } - override string getARelevantTag() { result = "noflow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "noflow" and value = "" and exists(Sink sink | @@ -32,12 +30,10 @@ class MissingDataFlowTest extends InlineExpectationsTest { } } -class HttpResponseBodyTest extends InlineExpectationsTest { - HttpResponseBodyTest() { this = "HttpResponseBodyTest" } +module HttpResponseBodyTest implements TestSig { + string getARelevantTag() { result = "responsebody" } - override string getARelevantTag() { result = "responsebody" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "responsebody" and exists(Http::ResponseBody rb | rb.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -47,3 +43,5 @@ class HttpResponseBodyTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.expected b/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.ql b/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.ql index 31852f1b862..6b1c1f70e04 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/QueryString.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class SqlTest extends InlineExpectationsTest { - SqlTest() { this = "SQLTest" } +module SqlTest implements TestSig { + string getARelevantTag() { result = "query" } - override string getARelevantTag() { result = "query" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "query" and exists(SQL::Query q, SQL::QueryString qs | qs = q.getAQueryString() | q.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -17,12 +15,10 @@ class SqlTest extends InlineExpectationsTest { } } -class QueryString extends InlineExpectationsTest { - QueryString() { this = "QueryString no Query" } +module QueryString implements TestSig { + string getARelevantTag() { result = "querystring" } - override string getARelevantTag() { result = "querystring" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "querystring" and element = "" and exists(SQL::QueryString qs | not exists(SQL::Query q | qs = q.getAQueryString()) | @@ -33,30 +29,30 @@ class QueryString extends InlineExpectationsTest { } } -class Config extends TaintTracking::Configuration { - Config() { this = "pg-orm config" } +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - override predicate isSource(DataFlow::Node n) { n.asExpr() instanceof StringLit } - - override predicate isSink(DataFlow::Node n) { + predicate isSink(DataFlow::Node n) { n = any(DataFlow::CallNode cn | cn.getTarget().getName() = "sink").getAnArgument() } } -class TaintFlow extends InlineExpectationsTest { - TaintFlow() { this = "pg-orm flow" } +module Flow = TaintTracking::Global; - override string getARelevantTag() { result = "flowfrom" } +module TaintFlow implements TestSig { + string getARelevantTag() { result = "flowfrom" } - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "flowfrom" and element = "" and - exists(Config c, DataFlow::Node fromNode, DataFlow::Node toNode | + exists(DataFlow::Node fromNode, DataFlow::Node toNode | toNode .hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and - c.hasFlow(fromNode, toNode) and + Flow::flow(fromNode, toNode) and value = fromNode.asExpr().(StringLit).getValue() ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.expected b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.ql b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.ql index 57796416265..f91654329a1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/test.ql @@ -1,12 +1,10 @@ import go import TestUtilities.InlineExpectationsTest -class FileSystemAccessTest extends InlineExpectationsTest { - FileSystemAccessTest() { this = "FileSystemAccess" } +module FileSystemAccessTest implements TestSig { + string getARelevantTag() { result = "fsaccess" } - override string getARelevantTag() { result = "fsaccess" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(FileSystemAccess f | f.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and @@ -16,3 +14,5 @@ class FileSystemAccessTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected index 325c5c60a36..bc354e68d29 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected @@ -5,861 +5,861 @@ | crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | ... := ...[0] | | crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | ... := ...[1] | | crypto.go:11:42:11:51 | ciphertext | crypto.go:11:2:11:57 | ... := ...[0] | -| file://:0:0:0:0 | parameter 0 of Abs | file://:0:0:0:0 | [summary] to write: return (return[0]) in Abs | -| file://:0:0:0:0 | parameter 0 of Add | file://:0:0:0:0 | [summary] to write: argument -1 in Add | -| file://:0:0:0:0 | parameter 0 of Add | file://:0:0:0:0 | [summary] to write: argument -1 in Add | -| file://:0:0:0:0 | parameter 0 of AddCookie | file://:0:0:0:0 | [summary] to write: argument -1 in AddCookie | -| file://:0:0:0:0 | parameter 0 of AppendQuote | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuote | -| file://:0:0:0:0 | parameter 0 of AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToASCII | -| file://:0:0:0:0 | parameter 0 of AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToGraphic | -| file://:0:0:0:0 | parameter 0 of AppendSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendSlice | -| file://:0:0:0:0 | parameter 0 of As | file://:0:0:0:0 | [summary] to write: argument 1 in As | -| file://:0:0:0:0 | parameter 0 of Base | file://:0:0:0:0 | [summary] to write: return (return[0]) in Base | -| file://:0:0:0:0 | parameter 0 of Base | file://:0:0:0:0 | [summary] to write: return (return[0]) in Base | -| file://:0:0:0:0 | parameter 0 of BytePtrFromString | file://:0:0:0:0 | [summary] to write: return (return[0]) in BytePtrFromString | -| file://:0:0:0:0 | parameter 0 of ByteSliceFromString | file://:0:0:0:0 | [summary] to write: return (return[0]) in ByteSliceFromString | -| file://:0:0:0:0 | parameter 0 of CanonicalHeaderKey | file://:0:0:0:0 | [summary] to write: return (return[0]) in CanonicalHeaderKey | -| file://:0:0:0:0 | parameter 0 of CanonicalMIMEHeaderKey | file://:0:0:0:0 | [summary] to write: return (return[0]) in CanonicalMIMEHeaderKey | -| file://:0:0:0:0 | parameter 0 of Clean | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clean | -| file://:0:0:0:0 | parameter 0 of Clean | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clean | -| file://:0:0:0:0 | parameter 0 of Client | file://:0:0:0:0 | [summary] to write: return (return[0]) in Client | -| file://:0:0:0:0 | parameter 0 of Clone | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clone | -| file://:0:0:0:0 | parameter 0 of Cut | file://:0:0:0:0 | [summary] to write: return (return[0]) in Cut | -| file://:0:0:0:0 | parameter 0 of Cut | file://:0:0:0:0 | [summary] to write: return (return[1]) in Cut | -| file://:0:0:0:0 | parameter 0 of CutPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in CutPrefix | -| file://:0:0:0:0 | parameter 0 of CutSuffix | file://:0:0:0:0 | [summary] to write: return (return[0]) in CutSuffix | -| file://:0:0:0:0 | parameter 0 of Decode | file://:0:0:0:0 | [summary] to write: return (return[0]) in Decode | -| file://:0:0:0:0 | parameter 0 of Decode | file://:0:0:0:0 | [summary] to write: return (return[0]) in Decode | -| file://:0:0:0:0 | parameter 0 of Decode | file://:0:0:0:0 | [summary] to write: return (return[1]) in Decode | -| file://:0:0:0:0 | parameter 0 of DecodeHeader | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecodeHeader | -| file://:0:0:0:0 | parameter 0 of DecodeString | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecodeString | -| file://:0:0:0:0 | parameter 0 of DecodeString | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecodeString | -| file://:0:0:0:0 | parameter 0 of DecryptPEMBlock | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecryptPEMBlock | -| file://:0:0:0:0 | parameter 0 of Dir | file://:0:0:0:0 | [summary] to write: return (return[0]) in Dir | -| file://:0:0:0:0 | parameter 0 of Dir | file://:0:0:0:0 | [summary] to write: return (return[0]) in Dir | -| file://:0:0:0:0 | parameter 0 of Encode | file://:0:0:0:0 | [summary] to write: argument -1 in Encode | -| file://:0:0:0:0 | parameter 0 of EncodeToMemory | file://:0:0:0:0 | [summary] to write: return (return[0]) in EncodeToMemory | -| file://:0:0:0:0 | parameter 0 of EvalSymlinks | file://:0:0:0:0 | [summary] to write: return (return[0]) in EvalSymlinks | -| file://:0:0:0:0 | parameter 0 of Expand | file://:0:0:0:0 | [summary] to write: return (return[0]) in Expand | -| file://:0:0:0:0 | parameter 0 of ExpandEnv | file://:0:0:0:0 | [summary] to write: return (return[0]) in ExpandEnv | -| file://:0:0:0:0 | parameter 0 of Ext | file://:0:0:0:0 | [summary] to write: return (return[0]) in Ext | -| file://:0:0:0:0 | parameter 0 of Ext | file://:0:0:0:0 | [summary] to write: return (return[0]) in Ext | -| file://:0:0:0:0 | parameter 0 of Fields | file://:0:0:0:0 | [summary] to write: return (return[0]) in Fields | -| file://:0:0:0:0 | parameter 0 of Fields | file://:0:0:0:0 | [summary] to write: return (return[0]) in Fields | -| file://:0:0:0:0 | parameter 0 of FieldsFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldsFunc | -| file://:0:0:0:0 | parameter 0 of FieldsFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldsFunc | -| file://:0:0:0:0 | parameter 0 of FileConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in FileConn | -| file://:0:0:0:0 | parameter 0 of FileInfoToDirEntry | file://:0:0:0:0 | [summary] to write: return (return[0]) in FileInfoToDirEntry | -| file://:0:0:0:0 | parameter 0 of FilePacketConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in FilePacketConn | -| file://:0:0:0:0 | parameter 0 of FormatMediaType | file://:0:0:0:0 | [summary] to write: return (return[0]) in FormatMediaType | -| file://:0:0:0:0 | parameter 0 of FromSlash | file://:0:0:0:0 | [summary] to write: return (return[0]) in FromSlash | -| file://:0:0:0:0 | parameter 0 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter 0 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter 0 of Indirect | file://:0:0:0:0 | [summary] to write: return (return[0]) in Indirect | -| file://:0:0:0:0 | parameter 0 of InsertAfter | file://:0:0:0:0 | [summary] to write: argument -1 in InsertAfter | -| file://:0:0:0:0 | parameter 0 of InsertAfter | file://:0:0:0:0 | [summary] to write: return (return[0]) in InsertAfter | -| file://:0:0:0:0 | parameter 0 of InsertBefore | file://:0:0:0:0 | [summary] to write: argument -1 in InsertBefore | -| file://:0:0:0:0 | parameter 0 of InsertBefore | file://:0:0:0:0 | [summary] to write: return (return[0]) in InsertBefore | -| file://:0:0:0:0 | parameter 0 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 0 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 0 of JoinHostPort | file://:0:0:0:0 | [summary] to write: return (return[0]) in JoinHostPort | -| file://:0:0:0:0 | parameter 0 of LimitReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in LimitReader | -| file://:0:0:0:0 | parameter 0 of LoadOrStore | file://:0:0:0:0 | [summary] to write: argument -1 in LoadOrStore | -| file://:0:0:0:0 | parameter 0 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter 0 of LoadPointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadPointer | -| file://:0:0:0:0 | parameter 0 of LoadUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadUintptr | -| file://:0:0:0:0 | parameter 0 of Marshal | file://:0:0:0:0 | [summary] to write: return (return[0]) in Marshal | -| file://:0:0:0:0 | parameter 0 of Marshal | file://:0:0:0:0 | [summary] to write: return (return[0]) in Marshal | -| file://:0:0:0:0 | parameter 0 of MarshalIndent | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalIndent | -| file://:0:0:0:0 | parameter 0 of MarshalWithParams | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalWithParams | -| file://:0:0:0:0 | parameter 0 of MoveAfter | file://:0:0:0:0 | [summary] to write: argument -1 in MoveAfter | -| file://:0:0:0:0 | parameter 0 of MoveBefore | file://:0:0:0:0 | [summary] to write: argument -1 in MoveBefore | -| file://:0:0:0:0 | parameter 0 of MoveToBack | file://:0:0:0:0 | [summary] to write: argument -1 in MoveToBack | -| file://:0:0:0:0 | parameter 0 of MoveToFront | file://:0:0:0:0 | [summary] to write: argument -1 in MoveToFront | -| file://:0:0:0:0 | parameter 0 of New | file://:0:0:0:0 | [summary] to write: return (return[0]) in New | -| file://:0:0:0:0 | parameter 0 of NewBuffer | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewBuffer | -| file://:0:0:0:0 | parameter 0 of NewBufferString | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewBufferString | -| file://:0:0:0:0 | parameter 0 of NewConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewConn | -| file://:0:0:0:0 | parameter 0 of NewDecoder | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewDecoder | -| file://:0:0:0:0 | parameter 0 of NewDecoder | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewDecoder | -| file://:0:0:0:0 | parameter 0 of NewFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewFile | -| file://:0:0:0:0 | parameter 0 of NewListener | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewListener | -| file://:0:0:0:0 | parameter 0 of NewReadWriter | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReadWriter | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReader | -| file://:0:0:0:0 | parameter 0 of NewReaderDict | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReaderDict | -| file://:0:0:0:0 | parameter 0 of NewReaderSize | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewReaderSize | -| file://:0:0:0:0 | parameter 0 of NewScanner | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewScanner | -| file://:0:0:0:0 | parameter 0 of NewSectionReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewSectionReader | -| file://:0:0:0:0 | parameter 0 of NopCloser | file://:0:0:0:0 | [summary] to write: return (return[0]) in NopCloser | -| file://:0:0:0:0 | parameter 0 of NopCloser | file://:0:0:0:0 | [summary] to write: return (return[0]) in NopCloser | -| file://:0:0:0:0 | parameter 0 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter 0 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter 0 of ParseMediaType | file://:0:0:0:0 | [summary] to write: return (return[0]) in ParseMediaType | -| file://:0:0:0:0 | parameter 0 of ParseMediaType | file://:0:0:0:0 | [summary] to write: return (return[1]) in ParseMediaType | -| file://:0:0:0:0 | parameter 0 of ParseQuery | file://:0:0:0:0 | [summary] to write: return (return[0]) in ParseQuery | -| file://:0:0:0:0 | parameter 0 of ParseRequestURI | file://:0:0:0:0 | [summary] to write: return (return[0]) in ParseRequestURI | -| file://:0:0:0:0 | parameter 0 of PathEscape | file://:0:0:0:0 | [summary] to write: return (return[0]) in PathEscape | -| file://:0:0:0:0 | parameter 0 of PathUnescape | file://:0:0:0:0 | [summary] to write: return (return[0]) in PathUnescape | -| file://:0:0:0:0 | parameter 0 of PushBack | file://:0:0:0:0 | [summary] to write: argument -1 in PushBack | -| file://:0:0:0:0 | parameter 0 of PushBack | file://:0:0:0:0 | [summary] to write: return (return[0]) in PushBack | -| file://:0:0:0:0 | parameter 0 of PushBackList | file://:0:0:0:0 | [summary] to write: argument -1 in PushBackList | -| file://:0:0:0:0 | parameter 0 of PushFront | file://:0:0:0:0 | [summary] to write: argument -1 in PushFront | -| file://:0:0:0:0 | parameter 0 of PushFront | file://:0:0:0:0 | [summary] to write: return (return[0]) in PushFront | -| file://:0:0:0:0 | parameter 0 of PushFrontList | file://:0:0:0:0 | [summary] to write: argument -1 in PushFrontList | -| file://:0:0:0:0 | parameter 0 of Put | file://:0:0:0:0 | [summary] to write: argument -1 in Put | -| file://:0:0:0:0 | parameter 0 of QueryEscape | file://:0:0:0:0 | [summary] to write: return (return[0]) in QueryEscape | -| file://:0:0:0:0 | parameter 0 of QueryUnescape | file://:0:0:0:0 | [summary] to write: return (return[0]) in QueryUnescape | -| file://:0:0:0:0 | parameter 0 of Quote | file://:0:0:0:0 | [summary] to write: return (return[0]) in Quote | -| file://:0:0:0:0 | parameter 0 of QuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuoteToASCII | -| file://:0:0:0:0 | parameter 0 of QuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuoteToGraphic | -| file://:0:0:0:0 | parameter 0 of QuotedPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in QuotedPrefix | -| file://:0:0:0:0 | parameter 0 of Read | file://:0:0:0:0 | [summary] to write: argument 2 in Read | -| file://:0:0:0:0 | parameter 0 of ReadAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadAll | -| file://:0:0:0:0 | parameter 0 of ReadAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadAll | -| file://:0:0:0:0 | parameter 0 of ReadAtLeast | file://:0:0:0:0 | [summary] to write: argument 1 in ReadAtLeast | -| file://:0:0:0:0 | parameter 0 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter 0 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument -1 in ReadFrom | -| file://:0:0:0:0 | parameter 0 of ReadFull | file://:0:0:0:0 | [summary] to write: argument 1 in ReadFull | -| file://:0:0:0:0 | parameter 0 of ReadRequest | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadRequest | -| file://:0:0:0:0 | parameter 0 of ReadResponse | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadResponse | -| file://:0:0:0:0 | parameter 0 of Rel | file://:0:0:0:0 | [summary] to write: return (return[0]) in Rel | -| file://:0:0:0:0 | parameter 0 of Remove | file://:0:0:0:0 | [summary] to write: return (return[0]) in Remove | -| file://:0:0:0:0 | parameter 0 of Repeat | file://:0:0:0:0 | [summary] to write: return (return[0]) in Repeat | -| file://:0:0:0:0 | parameter 0 of Repeat | file://:0:0:0:0 | [summary] to write: return (return[0]) in Repeat | -| file://:0:0:0:0 | parameter 0 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 0 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 0 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 0 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter 0 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of Reset | file://:0:0:0:0 | [summary] to write: argument -1 in Reset | -| file://:0:0:0:0 | parameter 0 of ResolveReference | file://:0:0:0:0 | [summary] to write: return (return[0]) in ResolveReference | -| file://:0:0:0:0 | parameter 0 of Reverse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Reverse | -| file://:0:0:0:0 | parameter 0 of Runes | file://:0:0:0:0 | [summary] to write: return (return[0]) in Runes | -| file://:0:0:0:0 | parameter 0 of ScanBytes | file://:0:0:0:0 | [summary] to write: return (return[1]) in ScanBytes | -| file://:0:0:0:0 | parameter 0 of ScanLines | file://:0:0:0:0 | [summary] to write: return (return[1]) in ScanLines | -| file://:0:0:0:0 | parameter 0 of ScanRunes | file://:0:0:0:0 | [summary] to write: return (return[1]) in ScanRunes | -| file://:0:0:0:0 | parameter 0 of ScanWords | file://:0:0:0:0 | [summary] to write: return (return[1]) in ScanWords | -| file://:0:0:0:0 | parameter 0 of Send | file://:0:0:0:0 | [summary] to write: argument -1 in Send | -| file://:0:0:0:0 | parameter 0 of Server | file://:0:0:0:0 | [summary] to write: return (return[0]) in Server | -| file://:0:0:0:0 | parameter 0 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 0 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 0 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 0 of SetBytes | file://:0:0:0:0 | [summary] to write: argument -1 in SetBytes | -| file://:0:0:0:0 | parameter 0 of SetIndent | file://:0:0:0:0 | [summary] to write: argument -1 in SetIndent | -| file://:0:0:0:0 | parameter 0 of SetMapIndex | file://:0:0:0:0 | [summary] to write: argument -1 in SetMapIndex | -| file://:0:0:0:0 | parameter 0 of SetPointer | file://:0:0:0:0 | [summary] to write: argument -1 in SetPointer | -| file://:0:0:0:0 | parameter 0 of SetPrefix | file://:0:0:0:0 | [summary] to write: argument -1 in SetPrefix | -| file://:0:0:0:0 | parameter 0 of SetString | file://:0:0:0:0 | [summary] to write: argument -1 in SetString | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[0]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[1]) in Split | -| file://:0:0:0:0 | parameter 0 of Split | file://:0:0:0:0 | [summary] to write: return (return[1]) in Split | -| file://:0:0:0:0 | parameter 0 of SplitAfter | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfter | -| file://:0:0:0:0 | parameter 0 of SplitAfter | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfter | -| file://:0:0:0:0 | parameter 0 of SplitAfterN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfterN | -| file://:0:0:0:0 | parameter 0 of SplitAfterN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitAfterN | -| file://:0:0:0:0 | parameter 0 of SplitHostPort | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitHostPort | -| file://:0:0:0:0 | parameter 0 of SplitHostPort | file://:0:0:0:0 | [summary] to write: return (return[1]) in SplitHostPort | -| file://:0:0:0:0 | parameter 0 of SplitList | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitList | -| file://:0:0:0:0 | parameter 0 of SplitN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitN | -| file://:0:0:0:0 | parameter 0 of SplitN | file://:0:0:0:0 | [summary] to write: return (return[0]) in SplitN | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 0 of StringBytePtr | file://:0:0:0:0 | [summary] to write: return (return[0]) in StringBytePtr | -| file://:0:0:0:0 | parameter 0 of StringByteSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in StringByteSlice | -| file://:0:0:0:0 | parameter 0 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 0 of SwapPointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in SwapPointer | -| file://:0:0:0:0 | parameter 0 of SwapUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in SwapUintptr | -| file://:0:0:0:0 | parameter 0 of TeeReader | file://:0:0:0:0 | [summary] to write: argument 1 in TeeReader | -| file://:0:0:0:0 | parameter 0 of TeeReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in TeeReader | -| file://:0:0:0:0 | parameter 0 of Title | file://:0:0:0:0 | [summary] to write: return (return[0]) in Title | -| file://:0:0:0:0 | parameter 0 of Title | file://:0:0:0:0 | [summary] to write: return (return[0]) in Title | -| file://:0:0:0:0 | parameter 0 of ToLower | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLower | -| file://:0:0:0:0 | parameter 0 of ToLower | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLower | -| file://:0:0:0:0 | parameter 0 of ToSlash | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToSlash | -| file://:0:0:0:0 | parameter 0 of ToTitle | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitle | -| file://:0:0:0:0 | parameter 0 of ToTitle | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitle | -| file://:0:0:0:0 | parameter 0 of ToUpper | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpper | -| file://:0:0:0:0 | parameter 0 of ToUpper | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpper | -| file://:0:0:0:0 | parameter 0 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 0 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 0 of Trim | file://:0:0:0:0 | [summary] to write: return (return[0]) in Trim | -| file://:0:0:0:0 | parameter 0 of Trim | file://:0:0:0:0 | [summary] to write: return (return[0]) in Trim | -| file://:0:0:0:0 | parameter 0 of TrimBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimBytes | -| file://:0:0:0:0 | parameter 0 of TrimFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimFunc | -| file://:0:0:0:0 | parameter 0 of TrimFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimFunc | -| file://:0:0:0:0 | parameter 0 of TrimLeft | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeft | -| file://:0:0:0:0 | parameter 0 of TrimLeft | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeft | -| file://:0:0:0:0 | parameter 0 of TrimLeftFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeftFunc | -| file://:0:0:0:0 | parameter 0 of TrimLeftFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimLeftFunc | -| file://:0:0:0:0 | parameter 0 of TrimPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimPrefix | -| file://:0:0:0:0 | parameter 0 of TrimPrefix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimPrefix | -| file://:0:0:0:0 | parameter 0 of TrimRight | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRight | -| file://:0:0:0:0 | parameter 0 of TrimRight | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRight | -| file://:0:0:0:0 | parameter 0 of TrimRightFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRightFunc | -| file://:0:0:0:0 | parameter 0 of TrimRightFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimRightFunc | -| file://:0:0:0:0 | parameter 0 of TrimSpace | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSpace | -| file://:0:0:0:0 | parameter 0 of TrimSpace | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSpace | -| file://:0:0:0:0 | parameter 0 of TrimString | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimString | -| file://:0:0:0:0 | parameter 0 of TrimSuffix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSuffix | -| file://:0:0:0:0 | parameter 0 of TrimSuffix | file://:0:0:0:0 | [summary] to write: return (return[0]) in TrimSuffix | -| file://:0:0:0:0 | parameter 0 of TrySend | file://:0:0:0:0 | [summary] to write: argument -1 in TrySend | -| file://:0:0:0:0 | parameter 0 of Unmarshal | file://:0:0:0:0 | [summary] to write: argument 1 in Unmarshal | -| file://:0:0:0:0 | parameter 0 of Unmarshal | file://:0:0:0:0 | [summary] to write: argument 1 in Unmarshal | -| file://:0:0:0:0 | parameter 0 of Unmarshal | file://:0:0:0:0 | [summary] to write: return (return[0]) in Unmarshal | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalBinary | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalBinary | -| file://:0:0:0:0 | parameter 0 of UnmarshalJSON | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalJSON | -| file://:0:0:0:0 | parameter 0 of UnmarshalJSON | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalJSON | -| file://:0:0:0:0 | parameter 0 of UnmarshalJSON | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalJSON | -| file://:0:0:0:0 | parameter 0 of UnmarshalJSON | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalJSON | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalText | file://:0:0:0:0 | [summary] to write: argument -1 in UnmarshalText | -| file://:0:0:0:0 | parameter 0 of UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: argument 1 in UnmarshalWithParams | -| file://:0:0:0:0 | parameter 0 of UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: return (return[0]) in UnmarshalWithParams | -| file://:0:0:0:0 | parameter 0 of Unquote | file://:0:0:0:0 | [summary] to write: return (return[0]) in Unquote | -| file://:0:0:0:0 | parameter 0 of UnquoteChar | file://:0:0:0:0 | [summary] to write: return (return[2]) in UnquoteChar | -| file://:0:0:0:0 | parameter 0 of Unwrap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Unwrap | -| file://:0:0:0:0 | parameter 0 of User | file://:0:0:0:0 | [summary] to write: return (return[0]) in User | -| file://:0:0:0:0 | parameter 0 of UserPassword | file://:0:0:0:0 | [summary] to write: return (return[0]) in UserPassword | -| file://:0:0:0:0 | parameter 0 of ValueOf | file://:0:0:0:0 | [summary] to write: return (return[0]) in ValueOf | -| file://:0:0:0:0 | parameter 0 of VolumeName | file://:0:0:0:0 | [summary] to write: return (return[0]) in VolumeName | -| file://:0:0:0:0 | parameter 0 of WithCancel | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithCancel | -| file://:0:0:0:0 | parameter 0 of WithDeadline | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithDeadline | -| file://:0:0:0:0 | parameter 0 of WithTimeout | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithTimeout | -| file://:0:0:0:0 | parameter 0 of WithValue | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithValue | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of Write | file://:0:0:0:0 | [summary] to write: argument -1 in Write | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteAt | file://:0:0:0:0 | [summary] to write: argument -1 in WriteAt | -| file://:0:0:0:0 | parameter 0 of WriteField | file://:0:0:0:0 | [summary] to write: argument -1 in WriteField | -| file://:0:0:0:0 | parameter 0 of WriteMsgIP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgIP | -| file://:0:0:0:0 | parameter 0 of WriteMsgUDP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgUDP | -| file://:0:0:0:0 | parameter 0 of WriteMsgUnix | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgUnix | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteString | file://:0:0:0:0 | [summary] to write: argument -1 in WriteString | -| file://:0:0:0:0 | parameter 0 of WriteTo | file://:0:0:0:0 | [summary] to write: argument -1 in WriteTo | -| file://:0:0:0:0 | parameter 0 of WriteTo | file://:0:0:0:0 | [summary] to write: argument -1 in WriteTo | -| file://:0:0:0:0 | parameter 0 of WriteTo | file://:0:0:0:0 | [summary] to write: argument -1 in WriteTo | -| file://:0:0:0:0 | parameter 0 of WriteTo | file://:0:0:0:0 | [summary] to write: argument -1 in WriteTo | -| file://:0:0:0:0 | parameter 0 of WriteToIP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteToIP | -| file://:0:0:0:0 | parameter 0 of WriteToUDP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteToUDP | -| file://:0:0:0:0 | parameter 0 of WriteToUnix | file://:0:0:0:0 | [summary] to write: argument -1 in WriteToUnix | -| file://:0:0:0:0 | parameter 1 of Add | file://:0:0:0:0 | [summary] to write: argument -1 in Add | -| file://:0:0:0:0 | parameter 1 of Add | file://:0:0:0:0 | [summary] to write: argument -1 in Add | -| file://:0:0:0:0 | parameter 1 of AddUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in AddUintptr | -| file://:0:0:0:0 | parameter 1 of AddUintptr | file://:0:0:0:0 | [summary] to write: return (return[0]) in AddUintptr | -| file://:0:0:0:0 | parameter 1 of AppendQuote | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuote | -| file://:0:0:0:0 | parameter 1 of AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToASCII | -| file://:0:0:0:0 | parameter 1 of AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendQuoteToGraphic | -| file://:0:0:0:0 | parameter 1 of AppendSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in AppendSlice | -| file://:0:0:0:0 | parameter 1 of Compact | file://:0:0:0:0 | [summary] to write: argument 0 in Compact | -| file://:0:0:0:0 | parameter 1 of Copy | file://:0:0:0:0 | [summary] to write: argument 0 in Copy | -| file://:0:0:0:0 | parameter 1 of Copy | file://:0:0:0:0 | [summary] to write: argument 0 in Copy | -| file://:0:0:0:0 | parameter 1 of CopyBuffer | file://:0:0:0:0 | [summary] to write: argument 0 in CopyBuffer | -| file://:0:0:0:0 | parameter 1 of CopyN | file://:0:0:0:0 | [summary] to write: argument 0 in CopyN | -| file://:0:0:0:0 | parameter 1 of Decode | file://:0:0:0:0 | [summary] to write: argument 0 in Decode | -| file://:0:0:0:0 | parameter 1 of Decode | file://:0:0:0:0 | [summary] to write: argument 0 in Decode | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: argument 0 in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: argument 0 in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: argument 0 in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: argument 0 in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: argument 0 in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: return (return[0]) in Decrypt | -| file://:0:0:0:0 | parameter 1 of Decrypt | file://:0:0:0:0 | [summary] to write: return (return[0]) in Decrypt | -| file://:0:0:0:0 | parameter 1 of Encode | file://:0:0:0:0 | [summary] to write: argument 0 in Encode | -| file://:0:0:0:0 | parameter 1 of Encode | file://:0:0:0:0 | [summary] to write: return (return[0]) in Encode | -| file://:0:0:0:0 | parameter 1 of Error | file://:0:0:0:0 | [summary] to write: argument 0 in Error | -| file://:0:0:0:0 | parameter 1 of FormatMediaType | file://:0:0:0:0 | [summary] to write: return (return[0]) in FormatMediaType | -| file://:0:0:0:0 | parameter 1 of HTMLEscape | file://:0:0:0:0 | [summary] to write: argument 0 in HTMLEscape | -| file://:0:0:0:0 | parameter 1 of Indent | file://:0:0:0:0 | [summary] to write: argument 0 in Indent | -| file://:0:0:0:0 | parameter 1 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 1 of Join | file://:0:0:0:0 | [summary] to write: return (return[0]) in Join | -| file://:0:0:0:0 | parameter 1 of JoinHostPort | file://:0:0:0:0 | [summary] to write: return (return[0]) in JoinHostPort | -| file://:0:0:0:0 | parameter 1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: argument -1 in LoadOrStore | -| file://:0:0:0:0 | parameter 1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter 1 of Map | file://:0:0:0:0 | [summary] to write: return (return[0]) in Map | -| file://:0:0:0:0 | parameter 1 of Map | file://:0:0:0:0 | [summary] to write: return (return[0]) in Map | -| file://:0:0:0:0 | parameter 1 of MarshalIndent | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalIndent | -| file://:0:0:0:0 | parameter 1 of MarshalWithParams | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalWithParams | -| file://:0:0:0:0 | parameter 1 of MaxBytesReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in MaxBytesReader | -| file://:0:0:0:0 | parameter 1 of NewDecoder | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewDecoder | -| file://:0:0:0:0 | parameter 1 of NewRequest | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewRequest | -| file://:0:0:0:0 | parameter 1 of Rel | file://:0:0:0:0 | [summary] to write: return (return[0]) in Rel | -| file://:0:0:0:0 | parameter 1 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 1 of Set | file://:0:0:0:0 | [summary] to write: argument -1 in Set | -| file://:0:0:0:0 | parameter 1 of SetCookie | file://:0:0:0:0 | [summary] to write: argument 0 in SetCookie | -| file://:0:0:0:0 | parameter 1 of SetIndent | file://:0:0:0:0 | [summary] to write: argument -1 in SetIndent | -| file://:0:0:0:0 | parameter 1 of SetMapIndex | file://:0:0:0:0 | [summary] to write: argument -1 in SetMapIndex | -| file://:0:0:0:0 | parameter 1 of Store | file://:0:0:0:0 | [summary] to write: argument -1 in Store | -| file://:0:0:0:0 | parameter 1 of StorePointer | file://:0:0:0:0 | [summary] to write: argument 0 in StorePointer | -| file://:0:0:0:0 | parameter 1 of StoreUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in StoreUintptr | -| file://:0:0:0:0 | parameter 1 of Swap | file://:0:0:0:0 | [summary] to write: argument -1 in Swap | -| file://:0:0:0:0 | parameter 1 of SwapPointer | file://:0:0:0:0 | [summary] to write: argument 0 in SwapPointer | -| file://:0:0:0:0 | parameter 1 of SwapUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in SwapUintptr | -| file://:0:0:0:0 | parameter 1 of ToLowerSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLowerSpecial | -| file://:0:0:0:0 | parameter 1 of ToLowerSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToLowerSpecial | -| file://:0:0:0:0 | parameter 1 of ToTitleSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitleSpecial | -| file://:0:0:0:0 | parameter 1 of ToTitleSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToTitleSpecial | -| file://:0:0:0:0 | parameter 1 of ToUpperSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpperSpecial | -| file://:0:0:0:0 | parameter 1 of ToUpperSpecial | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToUpperSpecial | -| file://:0:0:0:0 | parameter 1 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 1 of ToValidUTF8 | file://:0:0:0:0 | [summary] to write: return (return[0]) in ToValidUTF8 | -| file://:0:0:0:0 | parameter 1 of UserPassword | file://:0:0:0:0 | [summary] to write: return (return[0]) in UserPassword | -| file://:0:0:0:0 | parameter 1 of WithValue | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithValue | -| file://:0:0:0:0 | parameter 1 of WriteField | file://:0:0:0:0 | [summary] to write: argument -1 in WriteField | -| file://:0:0:0:0 | parameter 1 of WriteMsgIP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgIP | -| file://:0:0:0:0 | parameter 1 of WriteMsgUDP | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgUDP | -| file://:0:0:0:0 | parameter 1 of WriteMsgUnix | file://:0:0:0:0 | [summary] to write: argument -1 in WriteMsgUnix | -| file://:0:0:0:0 | parameter 1 of WriteString | file://:0:0:0:0 | [summary] to write: argument 0 in WriteString | -| file://:0:0:0:0 | parameter 1 of WriteString | file://:0:0:0:0 | [summary] to write: argument 0 in WriteString | -| file://:0:0:0:0 | parameter 2 of CompareAndSwap | file://:0:0:0:0 | [summary] to write: argument -1 in CompareAndSwap | -| file://:0:0:0:0 | parameter 2 of CompareAndSwapPointer | file://:0:0:0:0 | [summary] to write: argument 0 in CompareAndSwapPointer | -| file://:0:0:0:0 | parameter 2 of CompareAndSwapUintptr | file://:0:0:0:0 | [summary] to write: argument 0 in CompareAndSwapUintptr | -| file://:0:0:0:0 | parameter 2 of DecryptPKCS1v15 | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecryptPKCS1v15 | -| file://:0:0:0:0 | parameter 2 of Indent | file://:0:0:0:0 | [summary] to write: argument 0 in Indent | -| file://:0:0:0:0 | parameter 2 of MarshalIndent | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalIndent | -| file://:0:0:0:0 | parameter 2 of NewRequestWithContext | file://:0:0:0:0 | [summary] to write: return (return[0]) in NewRequestWithContext | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: argument 0 in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter 2 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 2 of Replace | file://:0:0:0:0 | [summary] to write: return (return[0]) in Replace | -| file://:0:0:0:0 | parameter 2 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter 2 of ReplaceAll | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReplaceAll | -| file://:0:0:0:0 | parameter 2 of UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: argument 1 in UnmarshalWithParams | -| file://:0:0:0:0 | parameter 2 of UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: return (return[0]) in UnmarshalWithParams | -| file://:0:0:0:0 | parameter 2 of WithValue | file://:0:0:0:0 | [summary] to write: return (return[0]) in WithValue | -| file://:0:0:0:0 | parameter 2 of Write | file://:0:0:0:0 | [summary] to write: argument 0 in Write | -| file://:0:0:0:0 | parameter 3 of DecryptOAEP | file://:0:0:0:0 | [summary] to write: return (return[0]) in DecryptOAEP | -| file://:0:0:0:0 | parameter 3 of Indent | file://:0:0:0:0 | [summary] to write: argument 0 in Indent | -| file://:0:0:0:0 | parameter -1 of Addr | file://:0:0:0:0 | [summary] to write: return (return[0]) in Addr | -| file://:0:0:0:0 | parameter -1 of Back | file://:0:0:0:0 | [summary] to write: return (return[0]) in Back | -| file://:0:0:0:0 | parameter -1 of Buffered | file://:0:0:0:0 | [summary] to write: return (return[0]) in Buffered | -| file://:0:0:0:0 | parameter -1 of Bytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in Bytes | -| file://:0:0:0:0 | parameter -1 of Bytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in Bytes | -| file://:0:0:0:0 | parameter -1 of Bytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in Bytes | -| file://:0:0:0:0 | parameter -1 of Clone | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clone | -| file://:0:0:0:0 | parameter -1 of Clone | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clone | -| file://:0:0:0:0 | parameter -1 of Clone | file://:0:0:0:0 | [summary] to write: return (return[0]) in Clone | -| file://:0:0:0:0 | parameter -1 of Convert | file://:0:0:0:0 | [summary] to write: return (return[0]) in Convert | -| file://:0:0:0:0 | parameter -1 of Decode | file://:0:0:0:0 | [summary] to write: argument 0 in Decode | -| file://:0:0:0:0 | parameter -1 of DotReader | file://:0:0:0:0 | [summary] to write: return (return[0]) in DotReader | -| file://:0:0:0:0 | parameter -1 of Elem | file://:0:0:0:0 | [summary] to write: return (return[0]) in Elem | -| file://:0:0:0:0 | parameter -1 of Encode | file://:0:0:0:0 | [summary] to write: return (return[0]) in Encode | -| file://:0:0:0:0 | parameter -1 of EscapedPath | file://:0:0:0:0 | [summary] to write: return (return[0]) in EscapedPath | -| file://:0:0:0:0 | parameter -1 of Fd | file://:0:0:0:0 | [summary] to write: return (return[0]) in Fd | -| file://:0:0:0:0 | parameter -1 of Field | file://:0:0:0:0 | [summary] to write: return (return[0]) in Field | -| file://:0:0:0:0 | parameter -1 of FieldByIndex | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByIndex | -| file://:0:0:0:0 | parameter -1 of FieldByName | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByName | -| file://:0:0:0:0 | parameter -1 of FieldByNameFunc | file://:0:0:0:0 | [summary] to write: return (return[0]) in FieldByNameFunc | -| file://:0:0:0:0 | parameter -1 of File | file://:0:0:0:0 | [summary] to write: return (return[0]) in File | -| file://:0:0:0:0 | parameter -1 of File | file://:0:0:0:0 | [summary] to write: return (return[0]) in File | -| file://:0:0:0:0 | parameter -1 of FileName | file://:0:0:0:0 | [summary] to write: return (return[0]) in FileName | -| file://:0:0:0:0 | parameter -1 of FormName | file://:0:0:0:0 | [summary] to write: return (return[0]) in FormName | -| file://:0:0:0:0 | parameter -1 of Front | file://:0:0:0:0 | [summary] to write: return (return[0]) in Front | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Get | file://:0:0:0:0 | [summary] to write: return (return[0]) in Get | -| file://:0:0:0:0 | parameter -1 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter -1 of Glob | file://:0:0:0:0 | [summary] to write: return (return[0]) in Glob | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of GoString | file://:0:0:0:0 | [summary] to write: return (return[0]) in GoString | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[0]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[0]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[0]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[1]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[1]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hijack | file://:0:0:0:0 | [summary] to write: return (return[1]) in Hijack | -| file://:0:0:0:0 | parameter -1 of Hostname | file://:0:0:0:0 | [summary] to write: return (return[0]) in Hostname | -| file://:0:0:0:0 | parameter -1 of Index | file://:0:0:0:0 | [summary] to write: return (return[0]) in Index | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Info | file://:0:0:0:0 | [summary] to write: return (return[0]) in Info | -| file://:0:0:0:0 | parameter -1 of Init | file://:0:0:0:0 | [summary] to write: return (return[0]) in Init | -| file://:0:0:0:0 | parameter -1 of Interface | file://:0:0:0:0 | [summary] to write: return (return[0]) in Interface | -| file://:0:0:0:0 | parameter -1 of InterfaceData | file://:0:0:0:0 | [summary] to write: return (return[0]) in InterfaceData | -| file://:0:0:0:0 | parameter -1 of Key | file://:0:0:0:0 | [summary] to write: return (return[0]) in Key | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of Load | file://:0:0:0:0 | [summary] to write: return (return[0]) in Load | -| file://:0:0:0:0 | parameter -1 of LoadOrStore | file://:0:0:0:0 | [summary] to write: return (return[0]) in LoadOrStore | -| file://:0:0:0:0 | parameter -1 of Lookup | file://:0:0:0:0 | [summary] to write: return (return[0]) in Lookup | -| file://:0:0:0:0 | parameter -1 of MapIndex | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapIndex | -| file://:0:0:0:0 | parameter -1 of MapKeys | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapKeys | -| file://:0:0:0:0 | parameter -1 of MapRange | file://:0:0:0:0 | [summary] to write: return (return[0]) in MapRange | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalBinary | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalBinary | -| file://:0:0:0:0 | parameter -1 of MarshalJSON | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalJSON | -| file://:0:0:0:0 | parameter -1 of MarshalJSON | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalJSON | -| file://:0:0:0:0 | parameter -1 of MarshalJSON | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalJSON | -| file://:0:0:0:0 | parameter -1 of MarshalJSON | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalJSON | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of MarshalText | file://:0:0:0:0 | [summary] to write: return (return[0]) in MarshalText | -| file://:0:0:0:0 | parameter -1 of Method | file://:0:0:0:0 | [summary] to write: return (return[0]) in Method | -| file://:0:0:0:0 | parameter -1 of MethodByName | file://:0:0:0:0 | [summary] to write: return (return[0]) in MethodByName | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Name | file://:0:0:0:0 | [summary] to write: return (return[0]) in Name | -| file://:0:0:0:0 | parameter -1 of Next | file://:0:0:0:0 | [summary] to write: return (return[0]) in Next | -| file://:0:0:0:0 | parameter -1 of Next | file://:0:0:0:0 | [summary] to write: return (return[0]) in Next | -| file://:0:0:0:0 | parameter -1 of NextPart | file://:0:0:0:0 | [summary] to write: return (return[0]) in NextPart | -| file://:0:0:0:0 | parameter -1 of NextRawPart | file://:0:0:0:0 | [summary] to write: return (return[0]) in NextRawPart | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Open | file://:0:0:0:0 | [summary] to write: return (return[0]) in Open | -| file://:0:0:0:0 | parameter -1 of Parse | file://:0:0:0:0 | [summary] to write: return (return[0]) in Parse | -| file://:0:0:0:0 | parameter -1 of Password | file://:0:0:0:0 | [summary] to write: return (return[0]) in Password | -| file://:0:0:0:0 | parameter -1 of Peek | file://:0:0:0:0 | [summary] to write: return (return[0]) in Peek | -| file://:0:0:0:0 | parameter -1 of Pointer | file://:0:0:0:0 | [summary] to write: return (return[0]) in Pointer | -| file://:0:0:0:0 | parameter -1 of Port | file://:0:0:0:0 | [summary] to write: return (return[0]) in Port | -| file://:0:0:0:0 | parameter -1 of Prev | file://:0:0:0:0 | [summary] to write: return (return[0]) in Prev | -| file://:0:0:0:0 | parameter -1 of Query | file://:0:0:0:0 | [summary] to write: return (return[0]) in Query | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of Read | file://:0:0:0:0 | [summary] to write: argument 0 in Read | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadAt | file://:0:0:0:0 | [summary] to write: argument 0 in ReadAt | -| file://:0:0:0:0 | parameter -1 of ReadBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadBytes | -| file://:0:0:0:0 | parameter -1 of ReadBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadBytes | -| file://:0:0:0:0 | parameter -1 of ReadCodeLine | file://:0:0:0:0 | [summary] to write: return (return[1]) in ReadCodeLine | -| file://:0:0:0:0 | parameter -1 of ReadContinuedLine | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadContinuedLine | -| file://:0:0:0:0 | parameter -1 of ReadContinuedLineBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadContinuedLineBytes | -| file://:0:0:0:0 | parameter -1 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter -1 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter -1 of ReadDir | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDir | -| file://:0:0:0:0 | parameter -1 of ReadDotBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDotBytes | -| file://:0:0:0:0 | parameter -1 of ReadDotLines | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadDotLines | -| file://:0:0:0:0 | parameter -1 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter -1 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter -1 of ReadFile | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadFile | -| file://:0:0:0:0 | parameter -1 of ReadForm | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadForm | -| file://:0:0:0:0 | parameter -1 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFrom | -| file://:0:0:0:0 | parameter -1 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFrom | -| file://:0:0:0:0 | parameter -1 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFrom | -| file://:0:0:0:0 | parameter -1 of ReadFrom | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFrom | -| file://:0:0:0:0 | parameter -1 of ReadFromIP | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFromIP | -| file://:0:0:0:0 | parameter -1 of ReadFromUDP | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFromUDP | -| file://:0:0:0:0 | parameter -1 of ReadFromUnix | file://:0:0:0:0 | [summary] to write: argument 0 in ReadFromUnix | -| file://:0:0:0:0 | parameter -1 of ReadLine | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadLine | -| file://:0:0:0:0 | parameter -1 of ReadLine | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadLine | -| file://:0:0:0:0 | parameter -1 of ReadLineBytes | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadLineBytes | -| file://:0:0:0:0 | parameter -1 of ReadMIMEHeader | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadMIMEHeader | -| file://:0:0:0:0 | parameter -1 of ReadMsgIP | file://:0:0:0:0 | [summary] to write: argument 0 in ReadMsgIP | -| file://:0:0:0:0 | parameter -1 of ReadMsgIP | file://:0:0:0:0 | [summary] to write: argument 1 in ReadMsgIP | -| file://:0:0:0:0 | parameter -1 of ReadMsgUDP | file://:0:0:0:0 | [summary] to write: argument 0 in ReadMsgUDP | -| file://:0:0:0:0 | parameter -1 of ReadMsgUDP | file://:0:0:0:0 | [summary] to write: argument 1 in ReadMsgUDP | -| file://:0:0:0:0 | parameter -1 of ReadMsgUnix | file://:0:0:0:0 | [summary] to write: argument 0 in ReadMsgUnix | -| file://:0:0:0:0 | parameter -1 of ReadMsgUnix | file://:0:0:0:0 | [summary] to write: argument 1 in ReadMsgUnix | -| file://:0:0:0:0 | parameter -1 of ReadResponse | file://:0:0:0:0 | [summary] to write: return (return[1]) in ReadResponse | -| file://:0:0:0:0 | parameter -1 of ReadSlice | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadSlice | -| file://:0:0:0:0 | parameter -1 of ReadString | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadString | -| file://:0:0:0:0 | parameter -1 of ReadString | file://:0:0:0:0 | [summary] to write: return (return[0]) in ReadString | -| file://:0:0:0:0 | parameter -1 of Recv | file://:0:0:0:0 | [summary] to write: return (return[0]) in Recv | -| file://:0:0:0:0 | parameter -1 of RequestURI | file://:0:0:0:0 | [summary] to write: return (return[0]) in RequestURI | -| file://:0:0:0:0 | parameter -1 of Reset | file://:0:0:0:0 | [summary] to write: argument 0 in Reset | -| file://:0:0:0:0 | parameter -1 of Reset | file://:0:0:0:0 | [summary] to write: argument 0 in Reset | -| file://:0:0:0:0 | parameter -1 of Reset | file://:0:0:0:0 | [summary] to write: argument 0 in Reset | -| file://:0:0:0:0 | parameter -1 of ResolveReference | file://:0:0:0:0 | [summary] to write: return (return[0]) in ResolveReference | -| file://:0:0:0:0 | parameter -1 of SetOutput | file://:0:0:0:0 | [summary] to write: argument 0 in SetOutput | -| file://:0:0:0:0 | parameter -1 of Slice | file://:0:0:0:0 | [summary] to write: return (return[0]) in Slice | -| file://:0:0:0:0 | parameter -1 of Slice3 | file://:0:0:0:0 | [summary] to write: return (return[0]) in Slice3 | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of String | file://:0:0:0:0 | [summary] to write: return (return[0]) in String | -| file://:0:0:0:0 | parameter -1 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter -1 of Sub | file://:0:0:0:0 | [summary] to write: return (return[0]) in Sub | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of Swap | file://:0:0:0:0 | [summary] to write: return (return[0]) in Swap | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of SyscallConn | file://:0:0:0:0 | [summary] to write: return (return[0]) in SyscallConn | -| file://:0:0:0:0 | parameter -1 of Text | file://:0:0:0:0 | [summary] to write: return (return[0]) in Text | -| file://:0:0:0:0 | parameter -1 of Token | file://:0:0:0:0 | [summary] to write: return (return[0]) in Token | -| file://:0:0:0:0 | parameter -1 of Token | file://:0:0:0:0 | [summary] to write: return (return[0]) in Token | -| file://:0:0:0:0 | parameter -1 of Token | file://:0:0:0:0 | [summary] to write: return (return[0]) in Token | -| file://:0:0:0:0 | parameter -1 of TryRecv | file://:0:0:0:0 | [summary] to write: return (return[0]) in TryRecv | -| file://:0:0:0:0 | parameter -1 of UnsafeAddr | file://:0:0:0:0 | [summary] to write: return (return[0]) in UnsafeAddr | -| file://:0:0:0:0 | parameter -1 of Username | file://:0:0:0:0 | [summary] to write: return (return[0]) in Username | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Value | file://:0:0:0:0 | [summary] to write: return (return[0]) in Value | -| file://:0:0:0:0 | parameter -1 of Values | file://:0:0:0:0 | [summary] to write: return (return[0]) in Values | -| file://:0:0:0:0 | parameter -1 of Values | file://:0:0:0:0 | [summary] to write: return (return[0]) in Values | -| file://:0:0:0:0 | parameter -1 of Write | file://:0:0:0:0 | [summary] to write: argument 0 in Write | -| file://:0:0:0:0 | parameter -1 of Write | file://:0:0:0:0 | [summary] to write: argument 0 in Write | -| file://:0:0:0:0 | parameter -1 of Write | file://:0:0:0:0 | [summary] to write: argument 0 in Write | -| file://:0:0:0:0 | parameter -1 of WriteProxy | file://:0:0:0:0 | [summary] to write: argument 0 in WriteProxy | -| file://:0:0:0:0 | parameter -1 of WriteSubset | file://:0:0:0:0 | [summary] to write: argument 0 in WriteSubset | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of WriteTo | file://:0:0:0:0 | [summary] to write: argument 0 in WriteTo | -| file://:0:0:0:0 | parameter -1 of Writer | file://:0:0:0:0 | [summary] to write: return (return[0]) in Writer | +| file://:0:0:0:0 | [summary param] 0 in Abs | file://:0:0:0:0 | [summary] to write: ReturnValue in Abs | +| file://:0:0:0:0 | [summary param] 0 in Add | file://:0:0:0:0 | [summary] to write: Argument[-1] in Add | +| file://:0:0:0:0 | [summary param] 0 in Add | file://:0:0:0:0 | [summary] to write: Argument[-1] in Add | +| file://:0:0:0:0 | [summary param] 0 in AddCookie | file://:0:0:0:0 | [summary] to write: Argument[-1] in AddCookie | +| file://:0:0:0:0 | [summary param] 0 in AppendQuote | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuote | +| file://:0:0:0:0 | [summary param] 0 in AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToASCII | +| file://:0:0:0:0 | [summary param] 0 in AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToGraphic | +| file://:0:0:0:0 | [summary param] 0 in AppendSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendSlice | +| file://:0:0:0:0 | [summary param] 0 in As | file://:0:0:0:0 | [summary] to write: Argument[1] in As | +| file://:0:0:0:0 | [summary param] 0 in Base | file://:0:0:0:0 | [summary] to write: ReturnValue in Base | +| file://:0:0:0:0 | [summary param] 0 in Base | file://:0:0:0:0 | [summary] to write: ReturnValue in Base | +| file://:0:0:0:0 | [summary param] 0 in BytePtrFromString | file://:0:0:0:0 | [summary] to write: ReturnValue in BytePtrFromString | +| file://:0:0:0:0 | [summary param] 0 in ByteSliceFromString | file://:0:0:0:0 | [summary] to write: ReturnValue in ByteSliceFromString | +| file://:0:0:0:0 | [summary param] 0 in CanonicalHeaderKey | file://:0:0:0:0 | [summary] to write: ReturnValue in CanonicalHeaderKey | +| file://:0:0:0:0 | [summary param] 0 in CanonicalMIMEHeaderKey | file://:0:0:0:0 | [summary] to write: ReturnValue in CanonicalMIMEHeaderKey | +| file://:0:0:0:0 | [summary param] 0 in Clean | file://:0:0:0:0 | [summary] to write: ReturnValue in Clean | +| file://:0:0:0:0 | [summary param] 0 in Clean | file://:0:0:0:0 | [summary] to write: ReturnValue in Clean | +| file://:0:0:0:0 | [summary param] 0 in Client | file://:0:0:0:0 | [summary] to write: ReturnValue in Client | +| file://:0:0:0:0 | [summary param] 0 in Clone | file://:0:0:0:0 | [summary] to write: ReturnValue in Clone | +| file://:0:0:0:0 | [summary param] 0 in Cut | file://:0:0:0:0 | [summary] to write: ReturnValue in Cut | +| file://:0:0:0:0 | [summary param] 0 in Cut | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Cut | +| file://:0:0:0:0 | [summary param] 0 in CutPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in CutPrefix | +| file://:0:0:0:0 | [summary param] 0 in CutSuffix | file://:0:0:0:0 | [summary] to write: ReturnValue in CutSuffix | +| file://:0:0:0:0 | [summary param] 0 in Decode | file://:0:0:0:0 | [summary] to write: ReturnValue in Decode | +| file://:0:0:0:0 | [summary param] 0 in Decode | file://:0:0:0:0 | [summary] to write: ReturnValue in Decode | +| file://:0:0:0:0 | [summary param] 0 in Decode | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Decode | +| file://:0:0:0:0 | [summary param] 0 in DecodeHeader | file://:0:0:0:0 | [summary] to write: ReturnValue in DecodeHeader | +| file://:0:0:0:0 | [summary param] 0 in DecodeString | file://:0:0:0:0 | [summary] to write: ReturnValue in DecodeString | +| file://:0:0:0:0 | [summary param] 0 in DecodeString | file://:0:0:0:0 | [summary] to write: ReturnValue in DecodeString | +| file://:0:0:0:0 | [summary param] 0 in DecryptPEMBlock | file://:0:0:0:0 | [summary] to write: ReturnValue in DecryptPEMBlock | +| file://:0:0:0:0 | [summary param] 0 in Dir | file://:0:0:0:0 | [summary] to write: ReturnValue in Dir | +| file://:0:0:0:0 | [summary param] 0 in Dir | file://:0:0:0:0 | [summary] to write: ReturnValue in Dir | +| file://:0:0:0:0 | [summary param] 0 in Encode | file://:0:0:0:0 | [summary] to write: Argument[-1] in Encode | +| file://:0:0:0:0 | [summary param] 0 in EncodeToMemory | file://:0:0:0:0 | [summary] to write: ReturnValue in EncodeToMemory | +| file://:0:0:0:0 | [summary param] 0 in EvalSymlinks | file://:0:0:0:0 | [summary] to write: ReturnValue in EvalSymlinks | +| file://:0:0:0:0 | [summary param] 0 in Expand | file://:0:0:0:0 | [summary] to write: ReturnValue in Expand | +| file://:0:0:0:0 | [summary param] 0 in ExpandEnv | file://:0:0:0:0 | [summary] to write: ReturnValue in ExpandEnv | +| file://:0:0:0:0 | [summary param] 0 in Ext | file://:0:0:0:0 | [summary] to write: ReturnValue in Ext | +| file://:0:0:0:0 | [summary param] 0 in Ext | file://:0:0:0:0 | [summary] to write: ReturnValue in Ext | +| file://:0:0:0:0 | [summary param] 0 in Fields | file://:0:0:0:0 | [summary] to write: ReturnValue in Fields | +| file://:0:0:0:0 | [summary param] 0 in Fields | file://:0:0:0:0 | [summary] to write: ReturnValue in Fields | +| file://:0:0:0:0 | [summary param] 0 in FieldsFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldsFunc | +| file://:0:0:0:0 | [summary param] 0 in FieldsFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldsFunc | +| file://:0:0:0:0 | [summary param] 0 in FileConn | file://:0:0:0:0 | [summary] to write: ReturnValue in FileConn | +| file://:0:0:0:0 | [summary param] 0 in FileInfoToDirEntry | file://:0:0:0:0 | [summary] to write: ReturnValue in FileInfoToDirEntry | +| file://:0:0:0:0 | [summary param] 0 in FilePacketConn | file://:0:0:0:0 | [summary] to write: ReturnValue in FilePacketConn | +| file://:0:0:0:0 | [summary param] 0 in FormatMediaType | file://:0:0:0:0 | [summary] to write: ReturnValue in FormatMediaType | +| file://:0:0:0:0 | [summary param] 0 in FromSlash | file://:0:0:0:0 | [summary] to write: ReturnValue in FromSlash | +| file://:0:0:0:0 | [summary param] 0 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] 0 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] 0 in Indirect | file://:0:0:0:0 | [summary] to write: ReturnValue in Indirect | +| file://:0:0:0:0 | [summary param] 0 in InsertAfter | file://:0:0:0:0 | [summary] to write: Argument[-1] in InsertAfter | +| file://:0:0:0:0 | [summary param] 0 in InsertAfter | file://:0:0:0:0 | [summary] to write: ReturnValue in InsertAfter | +| file://:0:0:0:0 | [summary param] 0 in InsertBefore | file://:0:0:0:0 | [summary] to write: Argument[-1] in InsertBefore | +| file://:0:0:0:0 | [summary param] 0 in InsertBefore | file://:0:0:0:0 | [summary] to write: ReturnValue in InsertBefore | +| file://:0:0:0:0 | [summary param] 0 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 0 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 0 in JoinHostPort | file://:0:0:0:0 | [summary] to write: ReturnValue in JoinHostPort | +| file://:0:0:0:0 | [summary param] 0 in LimitReader | file://:0:0:0:0 | [summary] to write: ReturnValue in LimitReader | +| file://:0:0:0:0 | [summary param] 0 in LoadOrStore | file://:0:0:0:0 | [summary] to write: Argument[-1] in LoadOrStore | +| file://:0:0:0:0 | [summary param] 0 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] 0 in LoadPointer | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadPointer | +| file://:0:0:0:0 | [summary param] 0 in LoadUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadUintptr | +| file://:0:0:0:0 | [summary param] 0 in Marshal | file://:0:0:0:0 | [summary] to write: ReturnValue in Marshal | +| file://:0:0:0:0 | [summary param] 0 in Marshal | file://:0:0:0:0 | [summary] to write: ReturnValue in Marshal | +| file://:0:0:0:0 | [summary param] 0 in MarshalIndent | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalIndent | +| file://:0:0:0:0 | [summary param] 0 in MarshalWithParams | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalWithParams | +| file://:0:0:0:0 | [summary param] 0 in MoveAfter | file://:0:0:0:0 | [summary] to write: Argument[-1] in MoveAfter | +| file://:0:0:0:0 | [summary param] 0 in MoveBefore | file://:0:0:0:0 | [summary] to write: Argument[-1] in MoveBefore | +| file://:0:0:0:0 | [summary param] 0 in MoveToBack | file://:0:0:0:0 | [summary] to write: Argument[-1] in MoveToBack | +| file://:0:0:0:0 | [summary param] 0 in MoveToFront | file://:0:0:0:0 | [summary] to write: Argument[-1] in MoveToFront | +| file://:0:0:0:0 | [summary param] 0 in New | file://:0:0:0:0 | [summary] to write: ReturnValue in New | +| file://:0:0:0:0 | [summary param] 0 in NewBuffer | file://:0:0:0:0 | [summary] to write: ReturnValue in NewBuffer | +| file://:0:0:0:0 | [summary param] 0 in NewBufferString | file://:0:0:0:0 | [summary] to write: ReturnValue in NewBufferString | +| file://:0:0:0:0 | [summary param] 0 in NewConn | file://:0:0:0:0 | [summary] to write: ReturnValue in NewConn | +| file://:0:0:0:0 | [summary param] 0 in NewDecoder | file://:0:0:0:0 | [summary] to write: ReturnValue in NewDecoder | +| file://:0:0:0:0 | [summary param] 0 in NewDecoder | file://:0:0:0:0 | [summary] to write: ReturnValue in NewDecoder | +| file://:0:0:0:0 | [summary param] 0 in NewFile | file://:0:0:0:0 | [summary] to write: ReturnValue in NewFile | +| file://:0:0:0:0 | [summary param] 0 in NewListener | file://:0:0:0:0 | [summary] to write: ReturnValue in NewListener | +| file://:0:0:0:0 | [summary param] 0 in NewReadWriter | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReadWriter | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReader | +| file://:0:0:0:0 | [summary param] 0 in NewReaderDict | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReaderDict | +| file://:0:0:0:0 | [summary param] 0 in NewReaderSize | file://:0:0:0:0 | [summary] to write: ReturnValue in NewReaderSize | +| file://:0:0:0:0 | [summary param] 0 in NewScanner | file://:0:0:0:0 | [summary] to write: ReturnValue in NewScanner | +| file://:0:0:0:0 | [summary param] 0 in NewSectionReader | file://:0:0:0:0 | [summary] to write: ReturnValue in NewSectionReader | +| file://:0:0:0:0 | [summary param] 0 in NopCloser | file://:0:0:0:0 | [summary] to write: ReturnValue in NopCloser | +| file://:0:0:0:0 | [summary param] 0 in NopCloser | file://:0:0:0:0 | [summary] to write: ReturnValue in NopCloser | +| file://:0:0:0:0 | [summary param] 0 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] 0 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] 0 in ParseMediaType | file://:0:0:0:0 | [summary] to write: ReturnValue in ParseMediaType | +| file://:0:0:0:0 | [summary param] 0 in ParseMediaType | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ParseMediaType | +| file://:0:0:0:0 | [summary param] 0 in ParseQuery | file://:0:0:0:0 | [summary] to write: ReturnValue in ParseQuery | +| file://:0:0:0:0 | [summary param] 0 in ParseRequestURI | file://:0:0:0:0 | [summary] to write: ReturnValue in ParseRequestURI | +| file://:0:0:0:0 | [summary param] 0 in PathEscape | file://:0:0:0:0 | [summary] to write: ReturnValue in PathEscape | +| file://:0:0:0:0 | [summary param] 0 in PathUnescape | file://:0:0:0:0 | [summary] to write: ReturnValue in PathUnescape | +| file://:0:0:0:0 | [summary param] 0 in PushBack | file://:0:0:0:0 | [summary] to write: Argument[-1] in PushBack | +| file://:0:0:0:0 | [summary param] 0 in PushBack | file://:0:0:0:0 | [summary] to write: ReturnValue in PushBack | +| file://:0:0:0:0 | [summary param] 0 in PushBackList | file://:0:0:0:0 | [summary] to write: Argument[-1] in PushBackList | +| file://:0:0:0:0 | [summary param] 0 in PushFront | file://:0:0:0:0 | [summary] to write: Argument[-1] in PushFront | +| file://:0:0:0:0 | [summary param] 0 in PushFront | file://:0:0:0:0 | [summary] to write: ReturnValue in PushFront | +| file://:0:0:0:0 | [summary param] 0 in PushFrontList | file://:0:0:0:0 | [summary] to write: Argument[-1] in PushFrontList | +| file://:0:0:0:0 | [summary param] 0 in Put | file://:0:0:0:0 | [summary] to write: Argument[-1] in Put | +| file://:0:0:0:0 | [summary param] 0 in QueryEscape | file://:0:0:0:0 | [summary] to write: ReturnValue in QueryEscape | +| file://:0:0:0:0 | [summary param] 0 in QueryUnescape | file://:0:0:0:0 | [summary] to write: ReturnValue in QueryUnescape | +| file://:0:0:0:0 | [summary param] 0 in Quote | file://:0:0:0:0 | [summary] to write: ReturnValue in Quote | +| file://:0:0:0:0 | [summary param] 0 in QuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in QuoteToASCII | +| file://:0:0:0:0 | [summary param] 0 in QuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in QuoteToGraphic | +| file://:0:0:0:0 | [summary param] 0 in QuotedPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in QuotedPrefix | +| file://:0:0:0:0 | [summary param] 0 in Read | file://:0:0:0:0 | [summary] to write: Argument[2] in Read | +| file://:0:0:0:0 | [summary param] 0 in ReadAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadAll | +| file://:0:0:0:0 | [summary param] 0 in ReadAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadAll | +| file://:0:0:0:0 | [summary param] 0 in ReadAtLeast | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadAtLeast | +| file://:0:0:0:0 | [summary param] 0 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] 0 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[-1] in ReadFrom | +| file://:0:0:0:0 | [summary param] 0 in ReadFull | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadFull | +| file://:0:0:0:0 | [summary param] 0 in ReadRequest | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadRequest | +| file://:0:0:0:0 | [summary param] 0 in ReadResponse | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadResponse | +| file://:0:0:0:0 | [summary param] 0 in Rel | file://:0:0:0:0 | [summary] to write: ReturnValue in Rel | +| file://:0:0:0:0 | [summary param] 0 in Remove | file://:0:0:0:0 | [summary] to write: ReturnValue in Remove | +| file://:0:0:0:0 | [summary param] 0 in Repeat | file://:0:0:0:0 | [summary] to write: ReturnValue in Repeat | +| file://:0:0:0:0 | [summary param] 0 in Repeat | file://:0:0:0:0 | [summary] to write: ReturnValue in Repeat | +| file://:0:0:0:0 | [summary param] 0 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 0 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 0 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 0 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] 0 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in Reset | file://:0:0:0:0 | [summary] to write: Argument[-1] in Reset | +| file://:0:0:0:0 | [summary param] 0 in ResolveReference | file://:0:0:0:0 | [summary] to write: ReturnValue in ResolveReference | +| file://:0:0:0:0 | [summary param] 0 in Reverse | file://:0:0:0:0 | [summary] to write: ReturnValue in Reverse | +| file://:0:0:0:0 | [summary param] 0 in Runes | file://:0:0:0:0 | [summary] to write: ReturnValue in Runes | +| file://:0:0:0:0 | [summary param] 0 in ScanBytes | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ScanBytes | +| file://:0:0:0:0 | [summary param] 0 in ScanLines | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ScanLines | +| file://:0:0:0:0 | [summary param] 0 in ScanRunes | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ScanRunes | +| file://:0:0:0:0 | [summary param] 0 in ScanWords | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ScanWords | +| file://:0:0:0:0 | [summary param] 0 in Send | file://:0:0:0:0 | [summary] to write: Argument[-1] in Send | +| file://:0:0:0:0 | [summary param] 0 in Server | file://:0:0:0:0 | [summary] to write: ReturnValue in Server | +| file://:0:0:0:0 | [summary param] 0 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 0 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 0 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 0 in SetBytes | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetBytes | +| file://:0:0:0:0 | [summary param] 0 in SetIndent | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetIndent | +| file://:0:0:0:0 | [summary param] 0 in SetMapIndex | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetMapIndex | +| file://:0:0:0:0 | [summary param] 0 in SetPointer | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetPointer | +| file://:0:0:0:0 | [summary param] 0 in SetPrefix | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetPrefix | +| file://:0:0:0:0 | [summary param] 0 in SetString | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetString | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Split | +| file://:0:0:0:0 | [summary param] 0 in Split | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Split | +| file://:0:0:0:0 | [summary param] 0 in SplitAfter | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfter | +| file://:0:0:0:0 | [summary param] 0 in SplitAfter | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfter | +| file://:0:0:0:0 | [summary param] 0 in SplitAfterN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfterN | +| file://:0:0:0:0 | [summary param] 0 in SplitAfterN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitAfterN | +| file://:0:0:0:0 | [summary param] 0 in SplitHostPort | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitHostPort | +| file://:0:0:0:0 | [summary param] 0 in SplitHostPort | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in SplitHostPort | +| file://:0:0:0:0 | [summary param] 0 in SplitList | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitList | +| file://:0:0:0:0 | [summary param] 0 in SplitN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitN | +| file://:0:0:0:0 | [summary param] 0 in SplitN | file://:0:0:0:0 | [summary] to write: ReturnValue in SplitN | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 0 in StringBytePtr | file://:0:0:0:0 | [summary] to write: ReturnValue in StringBytePtr | +| file://:0:0:0:0 | [summary param] 0 in StringByteSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in StringByteSlice | +| file://:0:0:0:0 | [summary param] 0 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 0 in SwapPointer | file://:0:0:0:0 | [summary] to write: ReturnValue in SwapPointer | +| file://:0:0:0:0 | [summary param] 0 in SwapUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in SwapUintptr | +| file://:0:0:0:0 | [summary param] 0 in TeeReader | file://:0:0:0:0 | [summary] to write: Argument[1] in TeeReader | +| file://:0:0:0:0 | [summary param] 0 in TeeReader | file://:0:0:0:0 | [summary] to write: ReturnValue in TeeReader | +| file://:0:0:0:0 | [summary param] 0 in Title | file://:0:0:0:0 | [summary] to write: ReturnValue in Title | +| file://:0:0:0:0 | [summary param] 0 in Title | file://:0:0:0:0 | [summary] to write: ReturnValue in Title | +| file://:0:0:0:0 | [summary param] 0 in ToLower | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLower | +| file://:0:0:0:0 | [summary param] 0 in ToLower | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLower | +| file://:0:0:0:0 | [summary param] 0 in ToSlash | file://:0:0:0:0 | [summary] to write: ReturnValue in ToSlash | +| file://:0:0:0:0 | [summary param] 0 in ToTitle | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitle | +| file://:0:0:0:0 | [summary param] 0 in ToTitle | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitle | +| file://:0:0:0:0 | [summary param] 0 in ToUpper | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpper | +| file://:0:0:0:0 | [summary param] 0 in ToUpper | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpper | +| file://:0:0:0:0 | [summary param] 0 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 0 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 0 in Trim | file://:0:0:0:0 | [summary] to write: ReturnValue in Trim | +| file://:0:0:0:0 | [summary param] 0 in Trim | file://:0:0:0:0 | [summary] to write: ReturnValue in Trim | +| file://:0:0:0:0 | [summary param] 0 in TrimBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimBytes | +| file://:0:0:0:0 | [summary param] 0 in TrimFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimLeft | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeft | +| file://:0:0:0:0 | [summary param] 0 in TrimLeft | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeft | +| file://:0:0:0:0 | [summary param] 0 in TrimLeftFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeftFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimLeftFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimLeftFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimPrefix | +| file://:0:0:0:0 | [summary param] 0 in TrimPrefix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimPrefix | +| file://:0:0:0:0 | [summary param] 0 in TrimRight | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRight | +| file://:0:0:0:0 | [summary param] 0 in TrimRight | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRight | +| file://:0:0:0:0 | [summary param] 0 in TrimRightFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRightFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimRightFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimRightFunc | +| file://:0:0:0:0 | [summary param] 0 in TrimSpace | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSpace | +| file://:0:0:0:0 | [summary param] 0 in TrimSpace | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSpace | +| file://:0:0:0:0 | [summary param] 0 in TrimString | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimString | +| file://:0:0:0:0 | [summary param] 0 in TrimSuffix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSuffix | +| file://:0:0:0:0 | [summary param] 0 in TrimSuffix | file://:0:0:0:0 | [summary] to write: ReturnValue in TrimSuffix | +| file://:0:0:0:0 | [summary param] 0 in TrySend | file://:0:0:0:0 | [summary] to write: Argument[-1] in TrySend | +| file://:0:0:0:0 | [summary param] 0 in Unmarshal | file://:0:0:0:0 | [summary] to write: Argument[1] in Unmarshal | +| file://:0:0:0:0 | [summary param] 0 in Unmarshal | file://:0:0:0:0 | [summary] to write: Argument[1] in Unmarshal | +| file://:0:0:0:0 | [summary param] 0 in Unmarshal | file://:0:0:0:0 | [summary] to write: ReturnValue in Unmarshal | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalBinary | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalBinary | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalJSON | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalJSON | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalJSON | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalJSON | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalJSON | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalJSON | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalJSON | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalJSON | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalText | file://:0:0:0:0 | [summary] to write: Argument[-1] in UnmarshalText | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: Argument[1] in UnmarshalWithParams | +| file://:0:0:0:0 | [summary param] 0 in UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: ReturnValue in UnmarshalWithParams | +| file://:0:0:0:0 | [summary param] 0 in Unquote | file://:0:0:0:0 | [summary] to write: ReturnValue in Unquote | +| file://:0:0:0:0 | [summary param] 0 in UnquoteChar | file://:0:0:0:0 | [summary] to write: ReturnValue[2] in UnquoteChar | +| file://:0:0:0:0 | [summary param] 0 in Unwrap | file://:0:0:0:0 | [summary] to write: ReturnValue in Unwrap | +| file://:0:0:0:0 | [summary param] 0 in User | file://:0:0:0:0 | [summary] to write: ReturnValue in User | +| file://:0:0:0:0 | [summary param] 0 in UserPassword | file://:0:0:0:0 | [summary] to write: ReturnValue in UserPassword | +| file://:0:0:0:0 | [summary param] 0 in ValueOf | file://:0:0:0:0 | [summary] to write: ReturnValue in ValueOf | +| file://:0:0:0:0 | [summary param] 0 in VolumeName | file://:0:0:0:0 | [summary] to write: ReturnValue in VolumeName | +| file://:0:0:0:0 | [summary param] 0 in WithCancel | file://:0:0:0:0 | [summary] to write: ReturnValue in WithCancel | +| file://:0:0:0:0 | [summary param] 0 in WithDeadline | file://:0:0:0:0 | [summary] to write: ReturnValue in WithDeadline | +| file://:0:0:0:0 | [summary param] 0 in WithTimeout | file://:0:0:0:0 | [summary] to write: ReturnValue in WithTimeout | +| file://:0:0:0:0 | [summary param] 0 in WithValue | file://:0:0:0:0 | [summary] to write: ReturnValue in WithValue | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in Write | file://:0:0:0:0 | [summary] to write: Argument[-1] in Write | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteAt | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteAt | +| file://:0:0:0:0 | [summary param] 0 in WriteField | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteField | +| file://:0:0:0:0 | [summary param] 0 in WriteMsgIP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgIP | +| file://:0:0:0:0 | [summary param] 0 in WriteMsgUDP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgUDP | +| file://:0:0:0:0 | [summary param] 0 in WriteMsgUnix | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgUnix | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteString | +| file://:0:0:0:0 | [summary param] 0 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteTo | +| file://:0:0:0:0 | [summary param] 0 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteTo | +| file://:0:0:0:0 | [summary param] 0 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteTo | +| file://:0:0:0:0 | [summary param] 0 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteTo | +| file://:0:0:0:0 | [summary param] 0 in WriteToIP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteToIP | +| file://:0:0:0:0 | [summary param] 0 in WriteToUDP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteToUDP | +| file://:0:0:0:0 | [summary param] 0 in WriteToUnix | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteToUnix | +| file://:0:0:0:0 | [summary param] 1 in Add | file://:0:0:0:0 | [summary] to write: Argument[-1] in Add | +| file://:0:0:0:0 | [summary param] 1 in Add | file://:0:0:0:0 | [summary] to write: Argument[-1] in Add | +| file://:0:0:0:0 | [summary param] 1 in AddUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in AddUintptr | +| file://:0:0:0:0 | [summary param] 1 in AddUintptr | file://:0:0:0:0 | [summary] to write: ReturnValue in AddUintptr | +| file://:0:0:0:0 | [summary param] 1 in AppendQuote | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuote | +| file://:0:0:0:0 | [summary param] 1 in AppendQuoteToASCII | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToASCII | +| file://:0:0:0:0 | [summary param] 1 in AppendQuoteToGraphic | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendQuoteToGraphic | +| file://:0:0:0:0 | [summary param] 1 in AppendSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in AppendSlice | +| file://:0:0:0:0 | [summary param] 1 in Compact | file://:0:0:0:0 | [summary] to write: Argument[0] in Compact | +| file://:0:0:0:0 | [summary param] 1 in Copy | file://:0:0:0:0 | [summary] to write: Argument[0] in Copy | +| file://:0:0:0:0 | [summary param] 1 in Copy | file://:0:0:0:0 | [summary] to write: Argument[0] in Copy | +| file://:0:0:0:0 | [summary param] 1 in CopyBuffer | file://:0:0:0:0 | [summary] to write: Argument[0] in CopyBuffer | +| file://:0:0:0:0 | [summary param] 1 in CopyN | file://:0:0:0:0 | [summary] to write: Argument[0] in CopyN | +| file://:0:0:0:0 | [summary param] 1 in Decode | file://:0:0:0:0 | [summary] to write: Argument[0] in Decode | +| file://:0:0:0:0 | [summary param] 1 in Decode | file://:0:0:0:0 | [summary] to write: Argument[0] in Decode | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: Argument[0] in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: Argument[0] in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: Argument[0] in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: Argument[0] in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: Argument[0] in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: ReturnValue in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Decrypt | file://:0:0:0:0 | [summary] to write: ReturnValue in Decrypt | +| file://:0:0:0:0 | [summary param] 1 in Encode | file://:0:0:0:0 | [summary] to write: Argument[0] in Encode | +| file://:0:0:0:0 | [summary param] 1 in Encode | file://:0:0:0:0 | [summary] to write: ReturnValue in Encode | +| file://:0:0:0:0 | [summary param] 1 in Error | file://:0:0:0:0 | [summary] to write: Argument[0] in Error | +| file://:0:0:0:0 | [summary param] 1 in FormatMediaType | file://:0:0:0:0 | [summary] to write: ReturnValue in FormatMediaType | +| file://:0:0:0:0 | [summary param] 1 in HTMLEscape | file://:0:0:0:0 | [summary] to write: Argument[0] in HTMLEscape | +| file://:0:0:0:0 | [summary param] 1 in Indent | file://:0:0:0:0 | [summary] to write: Argument[0] in Indent | +| file://:0:0:0:0 | [summary param] 1 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 1 in Join | file://:0:0:0:0 | [summary] to write: ReturnValue in Join | +| file://:0:0:0:0 | [summary param] 1 in JoinHostPort | file://:0:0:0:0 | [summary] to write: ReturnValue in JoinHostPort | +| file://:0:0:0:0 | [summary param] 1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: Argument[-1] in LoadOrStore | +| file://:0:0:0:0 | [summary param] 1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] 1 in Map | file://:0:0:0:0 | [summary] to write: ReturnValue in Map | +| file://:0:0:0:0 | [summary param] 1 in Map | file://:0:0:0:0 | [summary] to write: ReturnValue in Map | +| file://:0:0:0:0 | [summary param] 1 in MarshalIndent | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalIndent | +| file://:0:0:0:0 | [summary param] 1 in MarshalWithParams | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalWithParams | +| file://:0:0:0:0 | [summary param] 1 in MaxBytesReader | file://:0:0:0:0 | [summary] to write: ReturnValue in MaxBytesReader | +| file://:0:0:0:0 | [summary param] 1 in NewDecoder | file://:0:0:0:0 | [summary] to write: ReturnValue in NewDecoder | +| file://:0:0:0:0 | [summary param] 1 in NewRequest | file://:0:0:0:0 | [summary] to write: ReturnValue in NewRequest | +| file://:0:0:0:0 | [summary param] 1 in Rel | file://:0:0:0:0 | [summary] to write: ReturnValue in Rel | +| file://:0:0:0:0 | [summary param] 1 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 1 in Set | file://:0:0:0:0 | [summary] to write: Argument[-1] in Set | +| file://:0:0:0:0 | [summary param] 1 in SetCookie | file://:0:0:0:0 | [summary] to write: Argument[0] in SetCookie | +| file://:0:0:0:0 | [summary param] 1 in SetIndent | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetIndent | +| file://:0:0:0:0 | [summary param] 1 in SetMapIndex | file://:0:0:0:0 | [summary] to write: Argument[-1] in SetMapIndex | +| file://:0:0:0:0 | [summary param] 1 in Store | file://:0:0:0:0 | [summary] to write: Argument[-1] in Store | +| file://:0:0:0:0 | [summary param] 1 in StorePointer | file://:0:0:0:0 | [summary] to write: Argument[0] in StorePointer | +| file://:0:0:0:0 | [summary param] 1 in StoreUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in StoreUintptr | +| file://:0:0:0:0 | [summary param] 1 in Swap | file://:0:0:0:0 | [summary] to write: Argument[-1] in Swap | +| file://:0:0:0:0 | [summary param] 1 in SwapPointer | file://:0:0:0:0 | [summary] to write: Argument[0] in SwapPointer | +| file://:0:0:0:0 | [summary param] 1 in SwapUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in SwapUintptr | +| file://:0:0:0:0 | [summary param] 1 in ToLowerSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLowerSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToLowerSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToLowerSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToTitleSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitleSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToTitleSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToTitleSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToUpperSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpperSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToUpperSpecial | file://:0:0:0:0 | [summary] to write: ReturnValue in ToUpperSpecial | +| file://:0:0:0:0 | [summary param] 1 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 1 in ToValidUTF8 | file://:0:0:0:0 | [summary] to write: ReturnValue in ToValidUTF8 | +| file://:0:0:0:0 | [summary param] 1 in UserPassword | file://:0:0:0:0 | [summary] to write: ReturnValue in UserPassword | +| file://:0:0:0:0 | [summary param] 1 in WithValue | file://:0:0:0:0 | [summary] to write: ReturnValue in WithValue | +| file://:0:0:0:0 | [summary param] 1 in WriteField | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteField | +| file://:0:0:0:0 | [summary param] 1 in WriteMsgIP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgIP | +| file://:0:0:0:0 | [summary param] 1 in WriteMsgUDP | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgUDP | +| file://:0:0:0:0 | [summary param] 1 in WriteMsgUnix | file://:0:0:0:0 | [summary] to write: Argument[-1] in WriteMsgUnix | +| file://:0:0:0:0 | [summary param] 1 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteString | +| file://:0:0:0:0 | [summary param] 1 in WriteString | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteString | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwap | file://:0:0:0:0 | [summary] to write: Argument[-1] in CompareAndSwap | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwapPointer | file://:0:0:0:0 | [summary] to write: Argument[0] in CompareAndSwapPointer | +| file://:0:0:0:0 | [summary param] 2 in CompareAndSwapUintptr | file://:0:0:0:0 | [summary] to write: Argument[0] in CompareAndSwapUintptr | +| file://:0:0:0:0 | [summary param] 2 in DecryptPKCS1v15 | file://:0:0:0:0 | [summary] to write: ReturnValue in DecryptPKCS1v15 | +| file://:0:0:0:0 | [summary param] 2 in Indent | file://:0:0:0:0 | [summary] to write: Argument[0] in Indent | +| file://:0:0:0:0 | [summary param] 2 in MarshalIndent | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalIndent | +| file://:0:0:0:0 | [summary param] 2 in NewRequestWithContext | file://:0:0:0:0 | [summary] to write: ReturnValue in NewRequestWithContext | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: Argument[0] in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] 2 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 2 in Replace | file://:0:0:0:0 | [summary] to write: ReturnValue in Replace | +| file://:0:0:0:0 | [summary param] 2 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] 2 in ReplaceAll | file://:0:0:0:0 | [summary] to write: ReturnValue in ReplaceAll | +| file://:0:0:0:0 | [summary param] 2 in UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: Argument[1] in UnmarshalWithParams | +| file://:0:0:0:0 | [summary param] 2 in UnmarshalWithParams | file://:0:0:0:0 | [summary] to write: ReturnValue in UnmarshalWithParams | +| file://:0:0:0:0 | [summary param] 2 in WithValue | file://:0:0:0:0 | [summary] to write: ReturnValue in WithValue | +| file://:0:0:0:0 | [summary param] 2 in Write | file://:0:0:0:0 | [summary] to write: Argument[0] in Write | +| file://:0:0:0:0 | [summary param] 3 in DecryptOAEP | file://:0:0:0:0 | [summary] to write: ReturnValue in DecryptOAEP | +| file://:0:0:0:0 | [summary param] 3 in Indent | file://:0:0:0:0 | [summary] to write: Argument[0] in Indent | +| file://:0:0:0:0 | [summary param] -1 in Addr | file://:0:0:0:0 | [summary] to write: ReturnValue in Addr | +| file://:0:0:0:0 | [summary param] -1 in Back | file://:0:0:0:0 | [summary] to write: ReturnValue in Back | +| file://:0:0:0:0 | [summary param] -1 in Buffered | file://:0:0:0:0 | [summary] to write: ReturnValue in Buffered | +| file://:0:0:0:0 | [summary param] -1 in Bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in Bytes | +| file://:0:0:0:0 | [summary param] -1 in Bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in Bytes | +| file://:0:0:0:0 | [summary param] -1 in Bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in Bytes | +| file://:0:0:0:0 | [summary param] -1 in Clone | file://:0:0:0:0 | [summary] to write: ReturnValue in Clone | +| file://:0:0:0:0 | [summary param] -1 in Clone | file://:0:0:0:0 | [summary] to write: ReturnValue in Clone | +| file://:0:0:0:0 | [summary param] -1 in Clone | file://:0:0:0:0 | [summary] to write: ReturnValue in Clone | +| file://:0:0:0:0 | [summary param] -1 in Convert | file://:0:0:0:0 | [summary] to write: ReturnValue in Convert | +| file://:0:0:0:0 | [summary param] -1 in Decode | file://:0:0:0:0 | [summary] to write: Argument[0] in Decode | +| file://:0:0:0:0 | [summary param] -1 in DotReader | file://:0:0:0:0 | [summary] to write: ReturnValue in DotReader | +| file://:0:0:0:0 | [summary param] -1 in Elem | file://:0:0:0:0 | [summary] to write: ReturnValue in Elem | +| file://:0:0:0:0 | [summary param] -1 in Encode | file://:0:0:0:0 | [summary] to write: ReturnValue in Encode | +| file://:0:0:0:0 | [summary param] -1 in EscapedPath | file://:0:0:0:0 | [summary] to write: ReturnValue in EscapedPath | +| file://:0:0:0:0 | [summary param] -1 in Fd | file://:0:0:0:0 | [summary] to write: ReturnValue in Fd | +| file://:0:0:0:0 | [summary param] -1 in Field | file://:0:0:0:0 | [summary] to write: ReturnValue in Field | +| file://:0:0:0:0 | [summary param] -1 in FieldByIndex | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByIndex | +| file://:0:0:0:0 | [summary param] -1 in FieldByName | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByName | +| file://:0:0:0:0 | [summary param] -1 in FieldByNameFunc | file://:0:0:0:0 | [summary] to write: ReturnValue in FieldByNameFunc | +| file://:0:0:0:0 | [summary param] -1 in File | file://:0:0:0:0 | [summary] to write: ReturnValue in File | +| file://:0:0:0:0 | [summary param] -1 in File | file://:0:0:0:0 | [summary] to write: ReturnValue in File | +| file://:0:0:0:0 | [summary param] -1 in FileName | file://:0:0:0:0 | [summary] to write: ReturnValue in FileName | +| file://:0:0:0:0 | [summary param] -1 in FormName | file://:0:0:0:0 | [summary] to write: ReturnValue in FormName | +| file://:0:0:0:0 | [summary param] -1 in Front | file://:0:0:0:0 | [summary] to write: ReturnValue in Front | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Get | file://:0:0:0:0 | [summary] to write: ReturnValue in Get | +| file://:0:0:0:0 | [summary param] -1 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] -1 in Glob | file://:0:0:0:0 | [summary] to write: ReturnValue in Glob | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in GoString | file://:0:0:0:0 | [summary] to write: ReturnValue in GoString | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hijack | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in Hijack | +| file://:0:0:0:0 | [summary param] -1 in Hostname | file://:0:0:0:0 | [summary] to write: ReturnValue in Hostname | +| file://:0:0:0:0 | [summary param] -1 in Index | file://:0:0:0:0 | [summary] to write: ReturnValue in Index | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Info | file://:0:0:0:0 | [summary] to write: ReturnValue in Info | +| file://:0:0:0:0 | [summary param] -1 in Init | file://:0:0:0:0 | [summary] to write: ReturnValue in Init | +| file://:0:0:0:0 | [summary param] -1 in Interface | file://:0:0:0:0 | [summary] to write: ReturnValue in Interface | +| file://:0:0:0:0 | [summary param] -1 in InterfaceData | file://:0:0:0:0 | [summary] to write: ReturnValue in InterfaceData | +| file://:0:0:0:0 | [summary param] -1 in Key | file://:0:0:0:0 | [summary] to write: ReturnValue in Key | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in Load | file://:0:0:0:0 | [summary] to write: ReturnValue in Load | +| file://:0:0:0:0 | [summary param] -1 in LoadOrStore | file://:0:0:0:0 | [summary] to write: ReturnValue in LoadOrStore | +| file://:0:0:0:0 | [summary param] -1 in Lookup | file://:0:0:0:0 | [summary] to write: ReturnValue in Lookup | +| file://:0:0:0:0 | [summary param] -1 in MapIndex | file://:0:0:0:0 | [summary] to write: ReturnValue in MapIndex | +| file://:0:0:0:0 | [summary param] -1 in MapKeys | file://:0:0:0:0 | [summary] to write: ReturnValue in MapKeys | +| file://:0:0:0:0 | [summary param] -1 in MapRange | file://:0:0:0:0 | [summary] to write: ReturnValue in MapRange | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalBinary | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalBinary | +| file://:0:0:0:0 | [summary param] -1 in MarshalJSON | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalJSON | +| file://:0:0:0:0 | [summary param] -1 in MarshalJSON | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalJSON | +| file://:0:0:0:0 | [summary param] -1 in MarshalJSON | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalJSON | +| file://:0:0:0:0 | [summary param] -1 in MarshalJSON | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalJSON | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in MarshalText | file://:0:0:0:0 | [summary] to write: ReturnValue in MarshalText | +| file://:0:0:0:0 | [summary param] -1 in Method | file://:0:0:0:0 | [summary] to write: ReturnValue in Method | +| file://:0:0:0:0 | [summary param] -1 in MethodByName | file://:0:0:0:0 | [summary] to write: ReturnValue in MethodByName | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Name | file://:0:0:0:0 | [summary] to write: ReturnValue in Name | +| file://:0:0:0:0 | [summary param] -1 in Next | file://:0:0:0:0 | [summary] to write: ReturnValue in Next | +| file://:0:0:0:0 | [summary param] -1 in Next | file://:0:0:0:0 | [summary] to write: ReturnValue in Next | +| file://:0:0:0:0 | [summary param] -1 in NextPart | file://:0:0:0:0 | [summary] to write: ReturnValue in NextPart | +| file://:0:0:0:0 | [summary param] -1 in NextRawPart | file://:0:0:0:0 | [summary] to write: ReturnValue in NextRawPart | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Open | file://:0:0:0:0 | [summary] to write: ReturnValue in Open | +| file://:0:0:0:0 | [summary param] -1 in Parse | file://:0:0:0:0 | [summary] to write: ReturnValue in Parse | +| file://:0:0:0:0 | [summary param] -1 in Password | file://:0:0:0:0 | [summary] to write: ReturnValue in Password | +| file://:0:0:0:0 | [summary param] -1 in Peek | file://:0:0:0:0 | [summary] to write: ReturnValue in Peek | +| file://:0:0:0:0 | [summary param] -1 in Pointer | file://:0:0:0:0 | [summary] to write: ReturnValue in Pointer | +| file://:0:0:0:0 | [summary param] -1 in Port | file://:0:0:0:0 | [summary] to write: ReturnValue in Port | +| file://:0:0:0:0 | [summary param] -1 in Prev | file://:0:0:0:0 | [summary] to write: ReturnValue in Prev | +| file://:0:0:0:0 | [summary param] -1 in Query | file://:0:0:0:0 | [summary] to write: ReturnValue in Query | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in Read | file://:0:0:0:0 | [summary] to write: Argument[0] in Read | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadAt | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadAt | +| file://:0:0:0:0 | [summary param] -1 in ReadBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadBytes | +| file://:0:0:0:0 | [summary param] -1 in ReadBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadBytes | +| file://:0:0:0:0 | [summary param] -1 in ReadCodeLine | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ReadCodeLine | +| file://:0:0:0:0 | [summary param] -1 in ReadContinuedLine | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadContinuedLine | +| file://:0:0:0:0 | [summary param] -1 in ReadContinuedLineBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadContinuedLineBytes | +| file://:0:0:0:0 | [summary param] -1 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] -1 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] -1 in ReadDir | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDir | +| file://:0:0:0:0 | [summary param] -1 in ReadDotBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDotBytes | +| file://:0:0:0:0 | [summary param] -1 in ReadDotLines | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadDotLines | +| file://:0:0:0:0 | [summary param] -1 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] -1 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] -1 in ReadFile | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadFile | +| file://:0:0:0:0 | [summary param] -1 in ReadForm | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadForm | +| file://:0:0:0:0 | [summary param] -1 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFrom | +| file://:0:0:0:0 | [summary param] -1 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFrom | +| file://:0:0:0:0 | [summary param] -1 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFrom | +| file://:0:0:0:0 | [summary param] -1 in ReadFrom | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFrom | +| file://:0:0:0:0 | [summary param] -1 in ReadFromIP | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFromIP | +| file://:0:0:0:0 | [summary param] -1 in ReadFromUDP | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFromUDP | +| file://:0:0:0:0 | [summary param] -1 in ReadFromUnix | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadFromUnix | +| file://:0:0:0:0 | [summary param] -1 in ReadLine | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadLine | +| file://:0:0:0:0 | [summary param] -1 in ReadLine | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadLine | +| file://:0:0:0:0 | [summary param] -1 in ReadLineBytes | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadLineBytes | +| file://:0:0:0:0 | [summary param] -1 in ReadMIMEHeader | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadMIMEHeader | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgIP | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadMsgIP | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgIP | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadMsgIP | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgUDP | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadMsgUDP | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgUDP | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadMsgUDP | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgUnix | file://:0:0:0:0 | [summary] to write: Argument[0] in ReadMsgUnix | +| file://:0:0:0:0 | [summary param] -1 in ReadMsgUnix | file://:0:0:0:0 | [summary] to write: Argument[1] in ReadMsgUnix | +| file://:0:0:0:0 | [summary param] -1 in ReadResponse | file://:0:0:0:0 | [summary] to write: ReturnValue[1] in ReadResponse | +| file://:0:0:0:0 | [summary param] -1 in ReadSlice | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadSlice | +| file://:0:0:0:0 | [summary param] -1 in ReadString | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadString | +| file://:0:0:0:0 | [summary param] -1 in ReadString | file://:0:0:0:0 | [summary] to write: ReturnValue in ReadString | +| file://:0:0:0:0 | [summary param] -1 in Recv | file://:0:0:0:0 | [summary] to write: ReturnValue in Recv | +| file://:0:0:0:0 | [summary param] -1 in RequestURI | file://:0:0:0:0 | [summary] to write: ReturnValue in RequestURI | +| file://:0:0:0:0 | [summary param] -1 in Reset | file://:0:0:0:0 | [summary] to write: Argument[0] in Reset | +| file://:0:0:0:0 | [summary param] -1 in Reset | file://:0:0:0:0 | [summary] to write: Argument[0] in Reset | +| file://:0:0:0:0 | [summary param] -1 in Reset | file://:0:0:0:0 | [summary] to write: Argument[0] in Reset | +| file://:0:0:0:0 | [summary param] -1 in ResolveReference | file://:0:0:0:0 | [summary] to write: ReturnValue in ResolveReference | +| file://:0:0:0:0 | [summary param] -1 in SetOutput | file://:0:0:0:0 | [summary] to write: Argument[0] in SetOutput | +| file://:0:0:0:0 | [summary param] -1 in Slice | file://:0:0:0:0 | [summary] to write: ReturnValue in Slice | +| file://:0:0:0:0 | [summary param] -1 in Slice3 | file://:0:0:0:0 | [summary] to write: ReturnValue in Slice3 | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in String | file://:0:0:0:0 | [summary] to write: ReturnValue in String | +| file://:0:0:0:0 | [summary param] -1 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] -1 in Sub | file://:0:0:0:0 | [summary] to write: ReturnValue in Sub | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in Swap | file://:0:0:0:0 | [summary] to write: ReturnValue in Swap | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in SyscallConn | file://:0:0:0:0 | [summary] to write: ReturnValue in SyscallConn | +| file://:0:0:0:0 | [summary param] -1 in Text | file://:0:0:0:0 | [summary] to write: ReturnValue in Text | +| file://:0:0:0:0 | [summary param] -1 in Token | file://:0:0:0:0 | [summary] to write: ReturnValue in Token | +| file://:0:0:0:0 | [summary param] -1 in Token | file://:0:0:0:0 | [summary] to write: ReturnValue in Token | +| file://:0:0:0:0 | [summary param] -1 in Token | file://:0:0:0:0 | [summary] to write: ReturnValue in Token | +| file://:0:0:0:0 | [summary param] -1 in TryRecv | file://:0:0:0:0 | [summary] to write: ReturnValue in TryRecv | +| file://:0:0:0:0 | [summary param] -1 in UnsafeAddr | file://:0:0:0:0 | [summary] to write: ReturnValue in UnsafeAddr | +| file://:0:0:0:0 | [summary param] -1 in Username | file://:0:0:0:0 | [summary] to write: ReturnValue in Username | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Value | file://:0:0:0:0 | [summary] to write: ReturnValue in Value | +| file://:0:0:0:0 | [summary param] -1 in Values | file://:0:0:0:0 | [summary] to write: ReturnValue in Values | +| file://:0:0:0:0 | [summary param] -1 in Values | file://:0:0:0:0 | [summary] to write: ReturnValue in Values | +| file://:0:0:0:0 | [summary param] -1 in Write | file://:0:0:0:0 | [summary] to write: Argument[0] in Write | +| file://:0:0:0:0 | [summary param] -1 in Write | file://:0:0:0:0 | [summary] to write: Argument[0] in Write | +| file://:0:0:0:0 | [summary param] -1 in Write | file://:0:0:0:0 | [summary] to write: Argument[0] in Write | +| file://:0:0:0:0 | [summary param] -1 in WriteProxy | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteProxy | +| file://:0:0:0:0 | [summary param] -1 in WriteSubset | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteSubset | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in WriteTo | file://:0:0:0:0 | [summary] to write: Argument[0] in WriteTo | +| file://:0:0:0:0 | [summary param] -1 in Writer | file://:0:0:0:0 | [summary] to write: ReturnValue in Writer | | io.go:14:31:14:43 | "some string" | io.go:14:13:14:44 | call to NewReader | | io.go:16:3:16:3 | definition of w | io.go:16:23:16:27 | &... | | io.go:16:3:16:3 | definition of w | io.go:16:30:16:34 | &... | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.expected b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.ql b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.ql index 273f031fc32..c4c0cafb50e 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/tests.ql @@ -11,32 +11,29 @@ DataFlow::CallNode getAYamlCall() { isYamlFunction(result.getACalleeIncludingExternals().asFunction()) } -class TaintTransitsFunctionConfig extends TaintTracking::Configuration { - TaintTransitsFunctionConfig() { this = "TaintTransitsFunctionConfig" } - - predicate isSourceSinkPair(DataFlow::Node inNode, DataFlow::Node outNode) { - exists(DataFlow::CallNode cn | cn = getAYamlCall() | - inNode = [cn.getAnArgument(), cn.getReceiver()] and - ( - outNode.(DataFlow::PostUpdateNode).getPreUpdateNode() = - [cn.getAnArgument(), cn.getReceiver()] - or - outNode = cn.getAResult() - ) +predicate isSourceSinkPair(DataFlow::Node inNode, DataFlow::Node outNode) { + exists(DataFlow::CallNode cn | cn = getAYamlCall() | + inNode = [cn.getAnArgument(), cn.getReceiver()] and + ( + outNode.(DataFlow::PostUpdateNode).getPreUpdateNode() = [cn.getAnArgument(), cn.getReceiver()] + or + outNode = cn.getAResult() ) - } - - override predicate isSource(DataFlow::Node n) { this.isSourceSinkPair(n, _) } - - override predicate isSink(DataFlow::Node n) { this.isSourceSinkPair(_, n) } + ) } -class TaintFunctionModelTest extends InlineExpectationsTest { - TaintFunctionModelTest() { this = "TaintFunctionModelTest" } +module TaintTransitsFunctionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { isSourceSinkPair(n, _) } - override string getARelevantTag() { result = "ttfnmodelstep" } + predicate isSink(DataFlow::Node n) { isSourceSinkPair(_, n) } +} - override predicate hasActualResult(Location location, string element, string tag, string value) { +module TaintTransitsFunctionFlow = TaintTracking::Global; + +module TaintFunctionModelTest implements TestSig { + string getARelevantTag() { result = "ttfnmodelstep" } + + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "ttfnmodelstep" and ( exists(TaintTracking::FunctionModel model, DataFlow::CallNode call | call = model.getACall() | @@ -46,9 +43,9 @@ class TaintFunctionModelTest extends InlineExpectationsTest { value = "\"" + model.getAnInputNode(call) + " -> " + model.getAnOutputNode(call) + "\"" ) or - exists(TaintTransitsFunctionConfig config, DataFlow::Node arg, DataFlow::Node output | - config.hasFlow(arg, output) and - config.isSourceSinkPair(arg, output) and + exists(DataFlow::Node arg, DataFlow::Node output | + TaintTransitsFunctionFlow::flow(arg, output) and + isSourceSinkPair(arg, output) and arg.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and element = arg.toString() and @@ -58,12 +55,10 @@ class TaintFunctionModelTest extends InlineExpectationsTest { } } -class MarshalerTest extends InlineExpectationsTest { - MarshalerTest() { this = "MarshalerTest" } +module MarshalerTest implements TestSig { + string getARelevantTag() { result = "marshaler" } - override string getARelevantTag() { result = "marshaler" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "marshaler" and exists(MarshalingFunction m, DataFlow::CallNode call | call = m.getACall() | call.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -76,12 +71,10 @@ class MarshalerTest extends InlineExpectationsTest { } } -class UnmarshalerTest extends InlineExpectationsTest { - UnmarshalerTest() { this = "UnmarshalerTest" } +module UnmarshalerTest implements TestSig { + string getARelevantTag() { result = "unmarshaler" } - override string getARelevantTag() { result = "unmarshaler" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "unmarshaler" and exists(UnmarshalingFunction m, DataFlow::CallNode call | call = m.getACall() | call.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), @@ -93,3 +86,5 @@ class UnmarshalerTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.expected b/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.ql b/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.ql index a012615e48e..14650f8f20d 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/Zap/TaintFlows.ql @@ -13,12 +13,10 @@ class TestConfig extends TaintTracking::Configuration { } } -class ZapTest extends InlineExpectationsTest { - ZapTest() { this = "ZapTest" } +module ZapTest implements TestSig { + string getARelevantTag() { result = "zap" } - override string getARelevantTag() { result = "zap" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "zap" and exists(DataFlow::Node sink | any(TestConfig c).hasFlow(_, sink) | element = sink.toString() and @@ -28,3 +26,5 @@ class ZapTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected index 2e7a965b514..307906f7e9b 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected @@ -1,13 +1,15 @@ edges | TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | | TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | -| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:28:20:69 | call to Join | +| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | +| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | | tst.go:14:2:14:39 | ... := ...[1] | tst.go:17:41:17:56 | selection of Filename | nodes | TaintedPath.go:13:18:13:22 | selection of URL | semmle.label | selection of URL | | TaintedPath.go:13:18:13:30 | call to Query | semmle.label | call to Query | | TaintedPath.go:16:29:16:40 | tainted_path | semmle.label | tainted_path | | TaintedPath.go:20:28:20:69 | call to Join | semmle.label | call to Join | +| TaintedPath.go:20:57:20:68 | tainted_path | semmle.label | tainted_path | | tst.go:14:2:14:39 | ... := ...[1] | semmle.label | ... := ...[1] | | tst.go:17:41:17:56 | selection of Filename | semmle.label | selection of Filename | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected index 1c3a46096c2..f10f103c963 100644 --- a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected +++ b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected @@ -1,5 +1,6 @@ edges -| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | +| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | +| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | | UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | | UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | @@ -13,6 +14,7 @@ edges nodes | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | semmle.label | definition of candidate | | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | semmle.label | call to Join | +| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | semmle.label | candidate | | UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | semmle.label | ... := ...[0] | | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | semmle.label | selection of Linkname | | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | semmle.label | selection of Name | diff --git a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index cfc49180bba..19c94698899 100644 --- a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -11,25 +11,47 @@ edges | GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:16:36:16:42 | tainted | | SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | +| SanitizingDoubleDash.go:39:14:39:44 | call to append | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | +| SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | call to append | +| SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | +| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | +| SanitizingDoubleDash.go:68:14:68:38 | call to append | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | +| SanitizingDoubleDash.go:68:31:68:37 | tainted | SanitizingDoubleDash.go:68:14:68:38 | call to append | +| SanitizingDoubleDash.go:69:14:69:35 | call to append | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | +| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | | SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:101:24:101:34 | slice expression | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:105:30:105:36 | tainted | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:111:37:111:43 | tainted | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:117:31:117:37 | tainted | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:123:31:123:37 | tainted | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:129:21:129:28 | arrayLit | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:136:31:136:37 | tainted | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:142:31:142:37 | tainted | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:148:30:148:36 | tainted | | SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:152:24:152:30 | tainted | | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | | SanitizingDoubleDash.go:105:30:105:36 | tainted | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | +| SanitizingDoubleDash.go:111:14:111:44 | call to append | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | +| SanitizingDoubleDash.go:111:37:111:43 | tainted | SanitizingDoubleDash.go:111:14:111:44 | call to append | +| SanitizingDoubleDash.go:117:14:117:44 | call to append | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | +| SanitizingDoubleDash.go:117:31:117:37 | tainted | SanitizingDoubleDash.go:117:14:117:44 | call to append | +| SanitizingDoubleDash.go:123:14:123:38 | call to append | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | +| SanitizingDoubleDash.go:123:31:123:37 | tainted | SanitizingDoubleDash.go:123:14:123:38 | call to append | +| SanitizingDoubleDash.go:129:14:129:35 | call to append | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | +| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | SanitizingDoubleDash.go:129:14:129:35 | call to append | +| SanitizingDoubleDash.go:136:14:136:38 | call to append | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | +| SanitizingDoubleDash.go:136:31:136:37 | tainted | SanitizingDoubleDash.go:136:14:136:38 | call to append | +| SanitizingDoubleDash.go:142:14:142:38 | call to append | SanitizingDoubleDash.go:143:21:143:28 | arrayLit | +| SanitizingDoubleDash.go:142:31:142:37 | tainted | SanitizingDoubleDash.go:142:14:142:38 | call to append | +| SanitizingDoubleDash.go:143:14:143:35 | call to append | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | +| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | SanitizingDoubleDash.go:143:14:143:35 | call to append | nodes | ArgumentInjection.go:9:10:9:16 | selection of URL | semmle.label | selection of URL | | ArgumentInjection.go:9:10:9:24 | call to Query | semmle.label | call to Query | @@ -47,8 +69,16 @@ nodes | SanitizingDoubleDash.go:9:13:9:19 | selection of URL | semmle.label | selection of URL | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | semmle.label | call to Query | | SanitizingDoubleDash.go:14:23:14:33 | slice expression | semmle.label | slice expression | +| SanitizingDoubleDash.go:39:14:39:44 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:39:31:39:37 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:53:14:53:35 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:68:14:68:38 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:68:31:68:37 | tainted | semmle.label | tainted | +| SanitizingDoubleDash.go:69:14:69:35 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:80:23:80:29 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:92:13:92:19 | selection of URL | semmle.label | selection of URL | @@ -58,11 +88,25 @@ nodes | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | semmle.label | slice literal [array] | | SanitizingDoubleDash.go:105:30:105:36 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:111:14:111:44 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:111:37:111:43 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:117:14:117:44 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:117:31:117:37 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:123:14:123:38 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:123:31:123:37 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:129:14:129:35 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:136:14:136:38 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:136:31:136:37 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | semmle.label | arrayLit | +| SanitizingDoubleDash.go:142:14:142:38 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:142:31:142:37 | tainted | semmle.label | tainted | +| SanitizingDoubleDash.go:143:14:143:35 | call to append | semmle.label | call to append | +| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | semmle.label | arrayLit | | SanitizingDoubleDash.go:148:30:148:36 | tainted | semmle.label | tainted | | SanitizingDoubleDash.go:152:24:152:30 | tainted | semmle.label | tainted | diff --git a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected index ea667480966..e0e028fff91 100644 --- a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected +++ b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected @@ -1,7 +1,12 @@ edges -| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:14:22:14:28 | cmdName | +| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | +| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | nodes | StoredCommand.go:11:2:11:27 | ... := ...[0] | semmle.label | ... := ...[0] | +| StoredCommand.go:13:2:13:5 | rows | semmle.label | rows | +| StoredCommand.go:13:12:13:19 | &... | semmle.label | &... | | StoredCommand.go:14:22:14:28 | cmdName | semmle.label | cmdName | subpaths #select diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 4f3ee95ffe8..31a8d097158 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -9,19 +9,27 @@ edges | contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | | contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | | contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | -| reflectedxsstest.go:27:2:27:38 | ... := ...[0] | reflectedxsstest.go:28:10:28:57 | type conversion | +| reflectedxsstest.go:27:2:27:38 | ... := ...[0] | reflectedxsstest.go:28:50:28:55 | cookie | +| reflectedxsstest.go:28:17:28:56 | call to Sprintf | reflectedxsstest.go:28:10:28:57 | type conversion | +| reflectedxsstest.go:28:50:28:55 | cookie | reflectedxsstest.go:28:17:28:56 | call to Sprintf | | reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | -| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:10:34:62 | type conversion | -| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:10:33:57 | type conversion | +| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | +| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | | reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | +| reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | +| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | call to Sprintf | +| reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | | reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | | reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | | reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | -| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:10:44:55 | type conversion | +| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | | reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | +| reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | +| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | | reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | | reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | | tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | @@ -56,12 +64,18 @@ nodes | contenttype.go:114:50:114:53 | data | semmle.label | data | | reflectedxsstest.go:27:2:27:38 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:28:10:28:57 | type conversion | semmle.label | type conversion | +| reflectedxsstest.go:28:17:28:56 | call to Sprintf | semmle.label | call to Sprintf | +| reflectedxsstest.go:28:50:28:55 | cookie | semmle.label | cookie | | reflectedxsstest.go:31:2:31:44 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:31:2:31:44 | ... := ...[1] | semmle.label | ... := ...[1] | | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:32:34:32:37 | file | semmle.label | file | | reflectedxsstest.go:33:10:33:57 | type conversion | semmle.label | type conversion | +| reflectedxsstest.go:33:17:33:56 | call to Sprintf | semmle.label | call to Sprintf | +| reflectedxsstest.go:33:49:33:55 | content | semmle.label | content | | reflectedxsstest.go:34:10:34:62 | type conversion | semmle.label | type conversion | +| reflectedxsstest.go:34:17:34:61 | call to Sprintf | semmle.label | call to Sprintf | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | semmle.label | selection of Filename | | reflectedxsstest.go:38:2:38:35 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | semmle.label | ... := ...[0] | | reflectedxsstest.go:39:16:39:21 | reader | semmle.label | reader | @@ -70,6 +84,8 @@ nodes | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | semmle.label | definition of byteSlice | | reflectedxsstest.go:42:2:42:5 | part | semmle.label | part | | reflectedxsstest.go:44:10:44:55 | type conversion | semmle.label | type conversion | +| reflectedxsstest.go:44:17:44:54 | call to Sprintf | semmle.label | call to Sprintf | +| reflectedxsstest.go:44:46:44:53 | partName | semmle.label | partName | | reflectedxsstest.go:45:10:45:18 | byteSlice | semmle.label | byteSlice | | reflectedxsstest.go:51:14:51:18 | selection of URL | semmle.label | selection of URL | | reflectedxsstest.go:51:14:51:26 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index 1e513a5d4a9..f51eda4c93c 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -1,11 +1,16 @@ edges | StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | -| stored.go:18:3:18:28 | ... := ...[0] | stored.go:30:22:30:25 | name | +| stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | +| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | +| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | +| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | | stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | nodes | StoredXss.go:13:21:13:31 | call to Name | semmle.label | call to Name | | StoredXss.go:13:21:13:36 | ...+... | semmle.label | ...+... | | stored.go:18:3:18:28 | ... := ...[0] | semmle.label | ... := ...[0] | +| stored.go:25:14:25:17 | rows | semmle.label | rows | +| stored.go:25:29:25:33 | &... | semmle.label | &... | | stored.go:30:22:30:25 | name | semmle.label | name | | stored.go:59:30:59:33 | definition of path | semmle.label | definition of path | | stored.go:61:22:61:25 | path | semmle.label | path | diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 93d447e40ab..c1ded7d69f8 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,21 +1,30 @@ edges +| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | | SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | -| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:12:11:12:11 | q | +| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | +| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | | issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | | issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | | issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | -| issue48.go:18:20:18:39 | &... | issue48.go:22:11:22:12 | q3 | +| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | +| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | +| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | | issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | | issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | | issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | -| issue48.go:28:21:28:41 | &... | issue48.go:32:11:32:12 | q4 | +| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | +| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | +| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | | issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | | issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | | issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | -| issue48.go:37:53:37:73 | &... | issue48.go:41:11:41:12 | q5 | +| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | +| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | +| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | | main.go:10:11:10:16 | selection of Form | main.go:10:11:10:28 | index expression | | main.go:14:63:14:67 | selection of URL | main.go:14:63:14:75 | call to Query | -| main.go:14:63:14:75 | call to Query | main.go:14:11:14:84 | call to Sprintf | +| main.go:14:63:14:75 | call to Query | main.go:14:63:14:83 | index expression | +| main.go:14:63:14:83 | index expression | main.go:14:11:14:84 | call to Sprintf | | main.go:15:63:15:70 | selection of Header | main.go:15:63:15:84 | call to Get | | main.go:15:63:15:84 | call to Get | main.go:15:11:15:85 | call to Sprintf | | main.go:27:17:30:2 | &... [pointer, Category] | main.go:33:3:33:13 | RequestData [pointer, Category] | @@ -23,9 +32,10 @@ edges | main.go:29:13:29:19 | selection of URL | main.go:29:13:29:27 | call to Query | | main.go:29:13:29:27 | call to Query | main.go:29:13:29:39 | index expression | | main.go:29:13:29:39 | index expression | main.go:27:18:30:2 | struct literal [Category] | +| main.go:32:7:33:23 | call to Sprintf | main.go:34:11:34:11 | q | | main.go:33:3:33:13 | RequestData [pointer, Category] | main.go:33:3:33:13 | implicit dereference [Category] | | main.go:33:3:33:13 | implicit dereference [Category] | main.go:33:3:33:22 | selection of Category | -| main.go:33:3:33:22 | selection of Category | main.go:34:11:34:11 | q | +| main.go:33:3:33:22 | selection of Category | main.go:32:7:33:23 | call to Sprintf | | main.go:38:2:38:12 | definition of RequestData [pointer, Category] | main.go:39:2:39:12 | RequestData [pointer, Category] | | main.go:38:2:38:12 | definition of RequestData [pointer, Category] | main.go:42:3:42:13 | RequestData [pointer, Category] | | main.go:39:2:39:12 | RequestData [pointer, Category] | main.go:39:2:39:12 | implicit dereference [Category] | @@ -33,9 +43,10 @@ edges | main.go:39:25:39:31 | selection of URL | main.go:39:25:39:39 | call to Query | | main.go:39:25:39:39 | call to Query | main.go:39:25:39:51 | index expression | | main.go:39:25:39:51 | index expression | main.go:39:2:39:12 | implicit dereference [Category] | +| main.go:41:7:42:23 | call to Sprintf | main.go:43:11:43:11 | q | | main.go:42:3:42:13 | RequestData [pointer, Category] | main.go:42:3:42:13 | implicit dereference [Category] | | main.go:42:3:42:13 | implicit dereference [Category] | main.go:42:3:42:22 | selection of Category | -| main.go:42:3:42:22 | selection of Category | main.go:43:11:43:11 | q | +| main.go:42:3:42:22 | selection of Category | main.go:41:7:42:23 | call to Sprintf | | main.go:47:2:47:12 | definition of RequestData [pointer, Category] | main.go:48:4:48:14 | RequestData [pointer, Category] | | main.go:47:2:47:12 | definition of RequestData [pointer, Category] | main.go:51:3:51:13 | RequestData [pointer, Category] | | main.go:48:3:48:14 | star expression [Category] | main.go:47:2:47:12 | definition of RequestData [pointer, Category] | @@ -43,9 +54,10 @@ edges | main.go:48:28:48:34 | selection of URL | main.go:48:28:48:42 | call to Query | | main.go:48:28:48:42 | call to Query | main.go:48:28:48:54 | index expression | | main.go:48:28:48:54 | index expression | main.go:48:3:48:14 | star expression [Category] | +| main.go:50:7:51:23 | call to Sprintf | main.go:52:11:52:11 | q | | main.go:51:3:51:13 | RequestData [pointer, Category] | main.go:51:3:51:13 | implicit dereference [Category] | | main.go:51:3:51:13 | implicit dereference [Category] | main.go:51:3:51:22 | selection of Category | -| main.go:51:3:51:22 | selection of Category | main.go:52:11:52:11 | q | +| main.go:51:3:51:22 | selection of Category | main.go:50:7:51:23 | call to Sprintf | | main.go:56:2:56:12 | definition of RequestData [pointer, Category] | main.go:57:4:57:14 | RequestData [pointer, Category] | | main.go:56:2:56:12 | definition of RequestData [pointer, Category] | main.go:60:5:60:15 | RequestData [pointer, Category] | | main.go:57:3:57:14 | star expression [Category] | main.go:56:2:56:12 | definition of RequestData [pointer, Category] | @@ -53,7 +65,8 @@ edges | main.go:57:28:57:34 | selection of URL | main.go:57:28:57:42 | call to Query | | main.go:57:28:57:42 | call to Query | main.go:57:28:57:54 | index expression | | main.go:57:28:57:54 | index expression | main.go:57:3:57:14 | star expression [Category] | -| main.go:60:3:60:25 | selection of Category | main.go:61:11:61:11 | q | +| main.go:59:7:60:26 | call to Sprintf | main.go:61:11:61:11 | q | +| main.go:60:3:60:25 | selection of Category | main.go:59:7:60:26 | call to Sprintf | | main.go:60:4:60:15 | star expression [Category] | main.go:60:3:60:25 | selection of Category | | main.go:60:5:60:15 | RequestData [pointer, Category] | main.go:60:4:60:15 | star expression [Category] | | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:57:22:57:29 | pipeline | @@ -71,29 +84,38 @@ edges | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:80:22:80:27 | filter | | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:81:18:81:25 | pipeline | nodes +| SqlInjection.go:10:7:11:30 | call to Sprintf | semmle.label | call to Sprintf | | SqlInjection.go:11:3:11:9 | selection of URL | semmle.label | selection of URL | | SqlInjection.go:11:3:11:17 | call to Query | semmle.label | call to Query | +| SqlInjection.go:11:3:11:29 | index expression | semmle.label | index expression | | SqlInjection.go:12:11:12:11 | q | semmle.label | q | | issue48.go:17:2:17:33 | ... := ...[0] | semmle.label | ... := ...[0] | | issue48.go:17:25:17:32 | selection of Body | semmle.label | selection of Body | | issue48.go:18:17:18:17 | b | semmle.label | b | | issue48.go:18:20:18:39 | &... | semmle.label | &... | +| issue48.go:20:8:21:34 | call to Sprintf | semmle.label | call to Sprintf | +| issue48.go:21:3:21:33 | index expression | semmle.label | index expression | | issue48.go:22:11:22:12 | q3 | semmle.label | q3 | | issue48.go:27:2:27:34 | ... := ...[0] | semmle.label | ... := ...[0] | | issue48.go:27:26:27:33 | selection of Body | semmle.label | selection of Body | | issue48.go:28:17:28:18 | b2 | semmle.label | b2 | | issue48.go:28:21:28:41 | &... | semmle.label | &... | +| issue48.go:30:8:31:32 | call to Sprintf | semmle.label | call to Sprintf | +| issue48.go:31:3:31:31 | selection of Category | semmle.label | selection of Category | | issue48.go:32:11:32:12 | q4 | semmle.label | q4 | | issue48.go:37:17:37:50 | type conversion | semmle.label | type conversion | | issue48.go:37:24:37:30 | selection of URL | semmle.label | selection of URL | | issue48.go:37:24:37:38 | call to Query | semmle.label | call to Query | | issue48.go:37:53:37:73 | &... | semmle.label | &... | +| issue48.go:39:8:40:32 | call to Sprintf | semmle.label | call to Sprintf | +| issue48.go:40:3:40:31 | selection of Category | semmle.label | selection of Category | | issue48.go:41:11:41:12 | q5 | semmle.label | q5 | | main.go:10:11:10:16 | selection of Form | semmle.label | selection of Form | | main.go:10:11:10:28 | index expression | semmle.label | index expression | | main.go:14:11:14:84 | call to Sprintf | semmle.label | call to Sprintf | | main.go:14:63:14:67 | selection of URL | semmle.label | selection of URL | | main.go:14:63:14:75 | call to Query | semmle.label | call to Query | +| main.go:14:63:14:83 | index expression | semmle.label | index expression | | main.go:15:11:15:85 | call to Sprintf | semmle.label | call to Sprintf | | main.go:15:63:15:70 | selection of Header | semmle.label | selection of Header | | main.go:15:63:15:84 | call to Get | semmle.label | call to Get | @@ -102,6 +124,7 @@ nodes | main.go:29:13:29:19 | selection of URL | semmle.label | selection of URL | | main.go:29:13:29:27 | call to Query | semmle.label | call to Query | | main.go:29:13:29:39 | index expression | semmle.label | index expression | +| main.go:32:7:33:23 | call to Sprintf | semmle.label | call to Sprintf | | main.go:33:3:33:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | | main.go:33:3:33:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:33:3:33:22 | selection of Category | semmle.label | selection of Category | @@ -112,6 +135,7 @@ nodes | main.go:39:25:39:31 | selection of URL | semmle.label | selection of URL | | main.go:39:25:39:39 | call to Query | semmle.label | call to Query | | main.go:39:25:39:51 | index expression | semmle.label | index expression | +| main.go:41:7:42:23 | call to Sprintf | semmle.label | call to Sprintf | | main.go:42:3:42:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | | main.go:42:3:42:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:42:3:42:22 | selection of Category | semmle.label | selection of Category | @@ -122,6 +146,7 @@ nodes | main.go:48:28:48:34 | selection of URL | semmle.label | selection of URL | | main.go:48:28:48:42 | call to Query | semmle.label | call to Query | | main.go:48:28:48:54 | index expression | semmle.label | index expression | +| main.go:50:7:51:23 | call to Sprintf | semmle.label | call to Sprintf | | main.go:51:3:51:13 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | | main.go:51:3:51:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:51:3:51:22 | selection of Category | semmle.label | selection of Category | @@ -132,6 +157,7 @@ nodes | main.go:57:28:57:34 | selection of URL | semmle.label | selection of URL | | main.go:57:28:57:42 | call to Query | semmle.label | call to Query | | main.go:57:28:57:54 | index expression | semmle.label | index expression | +| main.go:59:7:60:26 | call to Sprintf | semmle.label | call to Sprintf | | main.go:60:3:60:25 | selection of Category | semmle.label | selection of Category | | main.go:60:4:60:15 | star expression [Category] | semmle.label | star expression [Category] | | main.go:60:5:60:15 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | diff --git a/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.expected b/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.expected +++ b/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.ql b/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.ql index 576ce9ba342..298287ec4aa 100644 --- a/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.ql +++ b/go/ql/test/query-tests/Security/CWE-117/LogInjectionTest.ql @@ -1,11 +1,4 @@ import go import TestUtilities.InlineFlowTest import semmle.go.security.LogInjection - -class LogInjectionTest extends InlineFlowTest { - override DataFlow::Configuration getTaintFlowConfig() { - result = any(LogInjection::Configuration config) - } - - override DataFlow::Configuration getValueFlowConfig() { none() } -} +import TaintFlowTest diff --git a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected index ba37534511a..e47a4768465 100644 --- a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected +++ b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected @@ -14,9 +14,18 @@ edges | UnsafeTLS.go:305:5:305:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:304:18:306:4 | slice literal | | UnsafeTLS.go:313:5:313:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:312:18:314:4 | slice literal | | UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:329:25:329:94 | call to append | -| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:26:336:58 | call to append | -| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:346:25:346:36 | cipherSuites | -| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:355:25:355:36 | cipherSuites | +| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:54:336:57 | selection of ID | +| UnsafeTLS.go:336:54:336:57 | selection of ID | UnsafeTLS.go:336:26:336:58 | call to append | +| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:344:40:344:43 | selection of ID | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:344:26:344:37 | cipherSuites | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:346:25:346:36 | cipherSuites | +| UnsafeTLS.go:344:26:344:37 | cipherSuites | UnsafeTLS.go:344:19:344:44 | call to append | +| UnsafeTLS.go:344:40:344:43 | selection of ID | UnsafeTLS.go:344:19:344:44 | call to append | +| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:353:40:353:51 | selection of ID | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:353:26:353:37 | cipherSuites | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:355:25:355:36 | cipherSuites | +| UnsafeTLS.go:353:26:353:37 | cipherSuites | UnsafeTLS.go:353:19:353:52 | call to append | +| UnsafeTLS.go:353:40:353:51 | selection of ID | UnsafeTLS.go:353:19:353:52 | call to append | | UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:362:18:364:4 | slice literal | | UnsafeTLS.go:371:5:371:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:370:18:372:4 | slice literal | | UnsafeTLS.go:379:5:379:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:378:18:380:4 | slice literal | @@ -94,9 +103,16 @@ nodes | UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | semmle.label | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | | UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | semmle.label | call to InsecureCipherSuites | | UnsafeTLS.go:336:26:336:58 | call to append | semmle.label | call to append | +| UnsafeTLS.go:336:54:336:57 | selection of ID | semmle.label | selection of ID | | UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | semmle.label | call to InsecureCipherSuites | +| UnsafeTLS.go:344:19:344:44 | call to append | semmle.label | call to append | +| UnsafeTLS.go:344:26:344:37 | cipherSuites | semmle.label | cipherSuites | +| UnsafeTLS.go:344:40:344:43 | selection of ID | semmle.label | selection of ID | | UnsafeTLS.go:346:25:346:36 | cipherSuites | semmle.label | cipherSuites | | UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | semmle.label | call to InsecureCipherSuites | +| UnsafeTLS.go:353:19:353:52 | call to append | semmle.label | call to append | +| UnsafeTLS.go:353:26:353:37 | cipherSuites | semmle.label | cipherSuites | +| UnsafeTLS.go:353:40:353:51 | selection of ID | semmle.label | selection of ID | | UnsafeTLS.go:355:25:355:36 | cipherSuites | semmle.label | cipherSuites | | UnsafeTLS.go:362:18:364:4 | slice literal | semmle.label | slice literal | | UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | semmle.label | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected index 59af6f28787..e1e037af120 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected @@ -1,6 +1,8 @@ edges -| sample.go:15:24:15:63 | type conversion | sample.go:16:9:16:15 | slice expression | -| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:24:15:63 | type conversion | +| sample.go:15:10:15:64 | call to Sum256 | sample.go:16:9:16:15 | slice expression | +| sample.go:15:24:15:63 | type conversion | sample.go:15:10:15:64 | call to Sum256 | +| sample.go:15:31:15:62 | call to Sprintf | sample.go:15:24:15:63 | type conversion | +| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | | sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | | sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | | sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | @@ -8,7 +10,9 @@ edges | sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | nodes | InsecureRandomness.go:12:18:12:40 | call to Intn | semmle.label | call to Intn | +| sample.go:15:10:15:64 | call to Sum256 | semmle.label | call to Sum256 | | sample.go:15:24:15:63 | type conversion | semmle.label | type conversion | +| sample.go:15:31:15:62 | call to Sprintf | semmle.label | call to Sprintf | | sample.go:15:49:15:61 | call to Uint32 | semmle.label | call to Uint32 | | sample.go:16:9:16:15 | slice expression | semmle.label | slice expression | | sample.go:26:25:26:30 | call to Guid | semmle.label | call to Guid | diff --git a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected index c21e28717c7..35b84bf249a 100644 --- a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected +++ b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected @@ -17,7 +17,8 @@ edges | ConstantOauth2State.go:210:9:210:42 | call to AuthCodeURL | ConstantOauth2State.go:211:54:211:56 | url | | ConstantOauth2State.go:232:9:232:42 | call to AuthCodeURL | ConstantOauth2State.go:233:28:233:30 | url | | ConstantOauth2State.go:239:17:239:39 | "http://localhost:8080" | ConstantOauth2State.go:249:9:249:12 | conf | -| ConstantOauth2State.go:256:38:256:60 | "http://localhost:8080" | ConstantOauth2State.go:266:9:266:12 | conf | +| ConstantOauth2State.go:256:17:256:67 | call to Sprintf | ConstantOauth2State.go:266:9:266:12 | conf | +| ConstantOauth2State.go:256:38:256:60 | "http://localhost:8080" | ConstantOauth2State.go:256:17:256:67 | call to Sprintf | | ConstantOauth2State.go:272:17:272:21 | "oob" | ConstantOauth2State.go:282:9:282:12 | conf | nodes | ConstantOauth2State.go:20:26:20:32 | "state" | semmle.label | "state" | @@ -46,6 +47,7 @@ nodes | ConstantOauth2State.go:239:17:239:39 | "http://localhost:8080" | semmle.label | "http://localhost:8080" | | ConstantOauth2State.go:249:9:249:12 | conf | semmle.label | conf | | ConstantOauth2State.go:249:26:249:41 | stateStringConst | semmle.label | stateStringConst | +| ConstantOauth2State.go:256:17:256:67 | call to Sprintf | semmle.label | call to Sprintf | | ConstantOauth2State.go:256:38:256:60 | "http://localhost:8080" | semmle.label | "http://localhost:8080" | | ConstantOauth2State.go:266:9:266:12 | conf | semmle.label | conf | | ConstantOauth2State.go:266:26:266:41 | stateStringConst | semmle.label | stateStringConst | diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected index e69de29bb2d..48de9172b36 100644 --- a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected +++ b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql index e4eb088abd8..3e7ccd8d8c1 100644 --- a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql +++ b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql @@ -2,12 +2,10 @@ import go import TestUtilities.InlineExpectationsTest import semmle.go.security.IncorrectIntegerConversionLib -class TestIncorrectIntegerConversion extends InlineExpectationsTest { - TestIncorrectIntegerConversion() { this = "TestIncorrectIntegerConversion" } +module TestIncorrectIntegerConversion implements TestSig { + string getARelevantTag() { result = "hasValueFlow" } - override string getARelevantTag() { result = "hasValueFlow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasValueFlow" and exists(DataFlow::Node sink, DataFlow::Node sinkConverted | any(ConversionWithoutBoundsCheckConfig config).hasFlowTo(sink) and @@ -21,3 +19,5 @@ class TestIncorrectIntegerConversion extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 93c93f8ef46..bf73577e7cc 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,174 +1,183 @@ -package,sink,source,summary,sink:bean-validation,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:ognl-injection,sink:path-injection,sink:pending-intents,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:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:remote,summary:taint,summary:value -android.app,35,,103,,,11,,,,,7,,,,,,,,,17,,,,,,,,,,,,,,,,,,18,85 -android.content,24,31,154,,,,,,,,16,,,,,,,,,,,,,,,,,,,8,,,,,4,27,,63,91 -android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,41, -android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 -android.os,,2,122,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,41,81 -android.support.v4.app,11,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -android.util,6,16,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,, -android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, -androidx.core.app,6,,95,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,12,83 -androidx.fragment.app,11,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -androidx.slice,2,5,88,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,5,,27,61 -cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.alibaba.druid.sql,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,2,,6,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,6, -com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,63,24 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.flogger,29,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,, -com.google.common.io,8,,73,,1,,,,,,,,,,,,,,7,,,,,,,,,,,,,,,,,,,72,1 -com.google.gson,,,39,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,14 -com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,, -com.jcraft.jsch,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1, -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 -freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,, -freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,, -groovy.lang,26,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.text,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,44,,16,,2,,,,,,,,,,,,,,36,,,,,,,,,6,,,,,,,,,,16, -io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, -io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,, -io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 -io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,2,, -io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,13,143,116 -io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,, -io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, -io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -io.netty.util,2,,23,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,21,2 -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.awt,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3 -java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,49,,45,,22,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,43,2 -java.lang,18,,92,,,,,,,,,,,,,8,,,5,,,4,,,1,,,,,,,,,,,,,56,36 -java.net,13,3,20,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,3,20, -java.nio,47,,35,,3,,,,,,,,,,,,,,44,,,,,,,,,,,,,,,,,,,35, -java.sql,13,,3,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,2,1 -java.util,44,,484,,,,,,,,,,,,,34,,,,,,,5,2,,1,2,,,,,,,,,,,44,440 -javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -javax.faces.context,2,7,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, -javax.imageio.stream,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, -javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -javax.management.remote,2,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.naming,7,,1,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,1, -javax.net.ssl,2,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -javax.script,1,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,, -javax.servlet,5,21,2,,,,,,,1,,,,,,,,,1,,,,,,,,,,3,,,,,,,,21,2, -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,2,,6,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1,,,,6, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,, -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 -kotlin,16,,1847,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,1836,11 -net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,, -ognl,6,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,, -okhttp3,4,,48,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,23,25 -org.antlr.runtime,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, -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,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, -org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,111,,560,,2,,,,,,,,,,,,,,94,,,,,,,,,15,,,,,,,,,,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 -org.apache.commons.logging,6,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.net,9,12,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,12,, -org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 -org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hadoop.fs,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10, -org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, -org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,, -org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,, -org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,, -org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,73,2,45,,,,,,1,,,,,,,,,,,,,,,,,,,72,,,,,,,,,2,45, -org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 -org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,, -org.apache.http,48,3,94,,,,,,2,,,,,,,,,,,,,,,,,,,46,,,,,,,,,3,86,8 -org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,57, -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,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,, -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,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,, -org.eclipse.jetty.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, -org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,, -org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,, -org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -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 -org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 -org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.springframework.core.io,2,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,, -org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -org.springframework.http,14,,71,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,61,10 -org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,, -org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,, -org.springframework.jndi,1,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.ldap,47,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,3,,142,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,90,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, -org.springframework.web.util,,,165,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,140,25 -org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,2, -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, -org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, -play.mvc,,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,24, -ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 -ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 -retrofit2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +package,sink,source,summary,sink:bean-validation,sink:command-injection,sink:file-content-store,sink:fragment-injection,sink:groovy-injection,sink:hostname-verification,sink:html-injection,sink:information-leak,sink:intent-redirection,sink:jexl-injection,sink:jndi-injection,sink:js-injection,sink:ldap-injection,sink:log-injection,sink:mvel-injection,sink:ognl-injection,sink:path-injection,sink:pending-intents,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:request-forgery,sink:response-splitting,sink:sql-injection,sink:template-injection,sink:url-redirection,sink:xpath-injection,sink:xslt-injection,source:android-external-storage-dir,source:contentprovider,source:remote,summary:taint,summary:value +android.app,35,,103,,,,11,,,,,7,,,,,,,,,17,,,,,,,,,,,,,,,,,,18,85 +android.content,24,31,154,,,,,,,,,16,,,,,,,,,,,,,,,,,,,8,,,,,4,27,,63,91 +android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,41, +android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 +android.os,,2,122,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,41,81 +android.support.v4.app,11,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +android.util,6,16,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,2,, +android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1, +androidx.core.app,6,,95,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,12,83 +androidx.fragment.app,11,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +androidx.slice,2,5,88,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,5,,27,61 +antlr,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.alibaba.druid.sql,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,2,,6,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,6, +com.google.common.base,4,,87,,,,,,,,,,,,,,,,,,,,,3,1,,,,,,,,,,,,,,63,24 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.flogger,29,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,, +com.google.common.io,8,,73,,,1,,,,,,,,,,,,,,7,,,,,,,,,,,,,,,,,,,72,1 +com.google.gson,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,30,14 +com.hubspot.jinjava,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,, +com.jcraft.jsch,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1, +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 +freemarker.cache,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,, +freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,, +groovy.lang,26,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.text,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +hudson,68,4,2334,,4,3,,,,4,,,,,,,,,,51,,,,,,,,,6,,,,,,,,,4,2258,76 +io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, +io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,, +io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 +io.netty.channel,9,2,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,,2,, +io.netty.handler.codec,4,13,259,,,,,,,,,,,,,,,,,1,,,,,,,,,3,,,,,,,,,13,143,116 +io.netty.handler.ssl,4,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,, +io.netty.handler.stream,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, +io.netty.resolver,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +io.netty.util,2,,23,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,21,2 +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.awt,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +java.io,49,,45,,,22,,,,,,,,,,,,,,27,,,,,,,,,,,,,,,,,,,43,2 +java.lang,31,,92,,13,,,,,,,,,,,,8,,,5,,,4,,,1,,,,,,,,,,,,,56,36 +java.net,13,3,21,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,3,21, +java.nio,47,,35,,,3,,,,,,,,,,,,,,44,,,,,,,,,,,,,,,,,,,35, +java.sql,13,,2,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,2, +java.util,44,,484,,,,,,,,,,,,,,34,,,,,,,5,2,,1,2,,,,,,,,,,,44,440 +javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +javax.faces.context,2,7,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,, +javax.imageio.stream,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +javax.management.remote,2,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.naming,7,,1,,,,,,,,,,,6,,1,,,,,,,,,,,,,,,,,,,,,,,1, +javax.net.ssl,2,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +javax.portlet,,,61,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,61, +javax.script,1,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,, +javax.servlet,5,21,2,,,,,,,,1,,,,,,,,,1,,,,,,,,,,3,,,,,,,,21,2, +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,2,,6,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,1,,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,, +jenkins,,,446,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,423,23 +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10 +kotlin,16,,1847,,,,,,,,,,,,,,,,,14,,,,,,,,,2,,,,,,,,,,1836,11 +net.sf.json,2,,338,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,321,17 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5,,,,, +ognl,6,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,, +okhttp3,4,,48,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,23,25 +org.acegisecurity,,,49,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,49, +org.antlr.runtime,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, +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,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, +org.apache.commons.exec,6,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.commons.io,111,,560,,,2,,,,,,,,,,,,,,94,,,,,,,,,15,,,,,,,,,,546,14 +org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,, +org.apache.commons.jexl2,15,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.lang,,,765,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,594,171 +org.apache.commons.lang3,6,,424,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,293,131 +org.apache.commons.logging,6,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.net,9,12,,,,,,,,,,,,,,,,,,3,,,,,,,,,6,,,,,,,,,12,, +org.apache.commons.ognl,6,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, +org.apache.hadoop.fs,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10, +org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,, +org.apache.hc.client5.http.async.methods,84,,,,,,,,,,,,,,,,,,,,,,,,,,,,84,,,,,,,,,,, +org.apache.hc.client5.http.classic.methods,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,, +org.apache.hc.client5.http.fluent,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,, +org.apache.hc.core5.benchmark,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,73,2,45,,,,,,,1,,,,,,,,,,,,,,,,,,,72,,,,,,,,,2,45, +org.apache.hc.core5.net,,,18,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.hive.hcatalog.templeton,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,, +org.apache.http,48,3,94,,,,,,,2,,,,,,,,,,,,,,,,,,,46,,,,,,,,,3,86,8 +org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,57, +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,,,,,,,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,, +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,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,, +org.eclipse.jetty.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,, +org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,, +org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,, +org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +org.jboss.logging,324,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,, +org.jdbi.v3.core,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,, +org.jenkins.ui.icon,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,41,1 +org.jenkins.ui.symbol,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24,8 +org.jooq,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 +org.kohsuke.stapler,20,24,343,,,,,,,2,,,,,,,,,,9,,,,,,,,,4,,,,5,,,,,24,332,11 +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 +org.springframework.boot.jdbc,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.springframework.core.io,2,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,, +org.springframework.data.repository,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +org.springframework.http,14,,71,,,,,,,,,,,,,,,,,,,,,,,,,,14,,,,,,,,,,61,10 +org.springframework.jdbc.core,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,, +org.springframework.jdbc.datasource,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,,,,,,,, +org.springframework.jndi,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.ldap,47,,,,,,,,,,,,,33,,14,,,,,,,,,,,,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,3,,142,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,90,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,,,,,,,,,,,,,,,,13,,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +org.springframework.web.util,,,165,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,140,25 +org.thymeleaf,2,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,2, +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,, +org.yaml.snakeyaml,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +play.libs.ws,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,, +play.mvc,,13,24,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,13,24, +ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48 +ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +retrofit2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index ffd3ce0ed91..c8831af7a5b 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,41,7,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,3,683,184,76,,9,,,17 - Java extensions,"``javax.*``, ``jakarta.*``",63,611,34,2,4,,1,1,2 + Java Standard Library,``java.*``,3,683,197,76,,9,,,17 + Java extensions,"``javax.*``, ``jakarta.*``",63,672,34,2,4,,1,1,2 Kotlin Standard Library,``kotlin*``,,1847,16,14,,,,,2 `Spring `_,``org.springframework.*``,29,483,115,4,,28,14,,35 - Others,"``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.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.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.hibernate``, ``org.influxdb``, ``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``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``",98,894,528,66,,18,18,,195 - Totals,,255,9194,1997,263,10,122,33,1,385 + Others,"``antlr``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.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.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``",126,5232,577,89,6,18,18,,200 + Totals,,283,13593,2059,286,16,122,33,1,390 diff --git a/java/downgrades/qlpack.yml b/java/downgrades/qlpack.yml index b5a0f1bf411..6489ad2d9f6 100644 --- a/java/downgrades/qlpack.yml +++ b/java/downgrades/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/java-downgrades groups: java downgrades: . library: true +warnOnImplicitThis: true diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index 2735f6af1c1..009017b0073 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -133,30 +133,6 @@ def find_sources(path): return glob.glob(path + '/**/*.kt', recursive=True) + glob.glob(path + '/**/*.java', recursive=True) -def get_kotlin_lib_folder(): - x = run_process([kotlinc, '-version', '-verbose'], capture_output=True) - output = x.stderr.decode(encoding='UTF-8', errors='strict') - m = re.match( - r'.*\nlogging: using Kotlin home directory ([^\n]+)\n.*', output) - if m is None: - raise Exception('Cannot determine kotlinc home directory') - kotlin_home = m.group(1) - print("Kotlin home directory: " + kotlin_home) - return kotlin_home + '/lib' - - -def get_gradle_lib_folder(): - x = run_process(['gradle', 'getHomeDir'], capture_output=True) - output = x.stdout.decode(encoding='UTF-8', errors='strict') - m = re.search(r'(?m)^> Task :getHomeDir\n([^\n]+)$', output) - if m is None: - print("gradle getHomeDir output:\n" + output, file=sys.stderr) - raise Exception('Cannot determine gradle home directory') - gradle_home = m.group(1) - print("Gradle home directory: " + gradle_home) - return gradle_home + '/lib' - - def find_jar(path, base): fn = path + '/' + base + '.jar' if not os.path.isfile(fn): diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java index 81a9f46a71f..79ce2d8d8d3 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java @@ -27,7 +27,6 @@ import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.security.AccessControlException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; @@ -279,47 +278,6 @@ public class FileUtil || path.charAt(2) == '\\')); } - /** - * Copies a file - * - * @return false if failed to copy. - */ - public static boolean copy (File from, File to) - { - boolean targetFileExisted = to.exists(); - try { - copyFile(from, to, false); - return true; - } - catch (IOException e) { - // If the target did not exist before, make sure - // we delete it if there was any error - if (!targetFileExisted) - to.delete(); - - logger.error("Cannot copy " + from + " to " + to, e); - return false; - } - } - - /** - * Append all of sourceFile to the end of targetFile - like - * copy, but just adds to the end of the file. - * - * @return true iff the append succeeded - */ - public static boolean append (File sourceFile, File targetFile) - { - try { - copyFile(sourceFile, targetFile, true); - return true; - } - catch (IOException e) { - logger.error("Cannot append contents of " + sourceFile + " to " + targetFile, e); - return false; - } - } - /** * Write the contents of the given string to the file, creating it if it does not exist and overwriting it if it does. * @@ -443,82 +401,6 @@ public class FileUtil } } - /** - * Copies a folder recursively, by overwriting files if necessary. Copies all folders but filters - * files. - *

    - * IMPORTANT:The contents of from are copied to to, but a - * subdirectory is not created for them. This behaves like rsync -a from/ to. - *

    - * If {@code from} is a file rather than a directory, it is copied (assuming the filter matches - * it) to the file named by {@code to} -- this must not already exist as a directory. - * - * @deprecated Use FileUtil8.recursiveCopy instead. - * @param from Directory whose contents should be copied, or a file. - * @param to Directory to which files and subdirectories of from should be copied, or - * a file path (if {@code from} is a file). - * @param filter the filter to use for selecting which files to copy, or null - * @return false if failed to copy. - */ - @Deprecated - public static boolean recursiveCopy (File from, File to, final FileFilter filter) - { - // Make sure we include all subfolders - FileFilter realFilter = new FileFilter() { - @Override - public boolean accept (File pathname) - { - if (filter == null || pathname.isDirectory()) - return true; - else - return filter == null || filter.accept(pathname); - } - }; - return strictRecursiveCopy(from, to, realFilter); - } - - /** - * Copies a folder recursively, by overwriting files if necessary. Unlike - * {@link #recursiveCopy(File, File, FileFilter)}, this version applies the filter to directories - * as well, and only recurses into directories that are accepted by the filter. - *

    - * IMPORTANT:The contents of from are copied to to, but a - * subdirectory is not created for them. This behaves like rsync -a from/ to. - *

    - * If {@code from} is a file rather than a directory, it is copied (assuming the filter matches - * it) to the file named by {@code to} -- this must not already exist as a directory. - * - * @deprecated Use FileUtil8.recursiveCopy instead. - * @param from Directory whose contents should be copied, or a file. - * @param to Directory to which files and subdirectories of from should be copied, or - * a file path (if {@code from} is a file). - * @param filter the filter to use for selecting which files to copy, or null - * @return false if failed to copy. - */ - @Deprecated - public static boolean strictRecursiveCopy (File from, File to, FileFilter filter) - { - if (!from.exists()) { - return false; - } - if (from.isFile()) { - return copy(from, to); - } - else { - if (!to.exists()) { - if (!to.mkdir()) { - return false; - } - } - boolean success = true; - for (File childFrom : list(from, filter)) { - File childTo = new File(to, childFrom.getName()); - success &= strictRecursiveCopy(childFrom, childTo, filter); - } - return success; - } - } - /** * Writes the entire contents of a stream to a file. Closes input stream when writing is done * @@ -589,62 +471,6 @@ public class FileUtil } } - private static void copyFile (File from, File to, boolean append) throws IOException - { - // Try to exclude the case where the files are the same. If that happens, - // succeed except in 'append' mode since that is probably not the intention - // The logic below works if from and to both exist - and if one of them - // doesn't they can't be the same file! - from = tryMakeCanonical(from); - to = tryMakeCanonical(to); - if (from.equals(to)) { - if (append) - throw new IOException("Trying to append the contents of file " + from + " onto itself"); - else - return; // Nothing to do. - } - - try (FileInputStream fis = new FileInputStream(from); - InputStream in = new BufferedInputStream(fis)) - { - if (!to.exists()) - to.createNewFile(); - try (FileOutputStream fos = new FileOutputStream(to, append); - OutputStream out = new BufferedOutputStream(fos)) - { - byte[] buf = new byte[16 * 1024]; - int count; - while ((count = in.read(buf)) > 0) - out.write(buf, 0, count); - } - } - to.setExecutable(canExecute(from)); - } - - /** - * In the current Java security model, calling {@link File#canExecute()} requires the same - * permission as calling {@link Runtime#exec(String)}. This makes it impossible to run under a - * restrictive security manager if we blindly check for a file's execute bit. - *

    - * To work around, if an {@link AccessControlException} arises, and it seems to refer to a lack of - * {@link SecurityConstants#FILE_EXECUTE_ACTION} permission, we suppress the exception and return - * false. Other {@link AccessControlException}s are re-thrown, and otherwise the - * return value coincides with {@link File#canExecute()} on the argument. - */ - private static boolean canExecute (File file) - { - try { - return file.canExecute(); - } - catch (AccessControlException e) { - if (e.getPermission() instanceof FilePermission - && ((FilePermission) e.getPermission()).getActions().contains("execute")) - return false; // deliberately ignoring security failure - throw e; - } - } - - private static final BitSet allowedCharacters = new BitSet(256); static { for (int i = 'a'; i <= 'z'; i++) @@ -1633,22 +1459,6 @@ public class FileUtil } } - /** - * Copy the source properties file to the target, appending the given variable definitions as - * properties (with proper escaping). An optional marker string is printed as a comment before the - * extra variables, if any. - */ - public static void copyPropertiesFile ( - File source, - File target, - Set> extraVariables, - String extraComment) - { - if (source.isFile()) - copy(source, target); - appendProperties(target, extraVariables, extraComment); - } - /** * Append the given set of properties to a specified file, taking care of proper escaping of * special characters. @@ -1904,31 +1714,6 @@ public class FileUtil + "'."); } - /** - * Copy a file, creating any directories as needed. If the destination file (or directory) - * exists, it is overwritten. - * - * @param src The file to be renamed. Must be non-null and must exist. - * @param dest The path to copy the file to. Must be non-null. Will be overwritten if it already exists. - */ - public static void forceCopy(File src, File dest) - { - final String errorPrefix = "FileUtil.forceCopy: "; - if (src == null) - throw new CatastrophicError(errorPrefix + "source File is null."); - if (dest == null) - throw new CatastrophicError(errorPrefix + "destination File is null."); - if (!src.exists()) - throw new ResourceError(errorPrefix + "source File '" + src.toString() + "' does not exist.", new FileNotFoundException(src.toString())); - - mkdirs(dest.getAbsoluteFile().getParentFile()); - if (dest.exists() && !recursiveDelete(dest)) - throw new ResourceError(errorPrefix + "Couldn't overwrite destination file '" + dest.toString() + "'."); - if (!copy(src, dest)) - throw new ResourceError(errorPrefix + "Couldn't copy file '" + src.toString() + "' to '" + dest.toString() - + "'."); - } - /** * Query whether a {@link File} is non-null, and represents an existing file that can be * read. diff --git a/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt b/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt index c45e0a454b7..a426c7bd622 100644 --- a/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt @@ -14,7 +14,7 @@ import java.util.ArrayList import java.util.HashSet import java.util.zip.GZIPOutputStream -class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: String, val sourceFilePath: String, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState, val diagnosticTrapWriter: TrapWriter) { +class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: String, val sourceFilePath: String, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState, val diagnosticTrapWriter: DiagnosticTrapWriter) { val declBinaryNames = HashMap() val externalDeclsDone = HashSet>() @@ -95,8 +95,8 @@ class ExternalDeclExtractor(val logger: FileLogger, val invocationTrapFile: Stri val binaryPath = getIrClassBinaryPath(containingClass) // We want our comments to be the first thing in the file, - // so start off with a mere TrapWriter - val tw = TrapWriter(logger.loggerBase, TrapLabelManager(), trapFileBW, diagnosticTrapWriter) + // so start off with a PlainTrapWriter + val tw = PlainTrapWriter(logger.loggerBase, TrapLabelManager(), trapFileBW, diagnosticTrapWriter) tw.writeComment("Generated by the CodeQL Kotlin extractor for external dependencies") tw.writeComment("Part of invocation $invocationTrapFile") if (signature != possiblyLongSignature) { diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9bfcabd20fb..c766d70df33 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -127,7 +127,7 @@ class KotlinExtractorExtension( val lm = TrapLabelManager() val logCounter = LogCounter() val loggerBase = LoggerBase(logCounter) - val tw = TrapWriter(loggerBase, lm, invocationTrapFileBW, null) + val tw = DiagnosticTrapWriter(loggerBase, lm, invocationTrapFileBW) // The interceptor has already defined #compilation = * val compilation: Label = StringLabel("compilation") tw.writeCompilation_started(compilation) @@ -324,13 +324,13 @@ private fun doFile( trapFileWriter.getTempWriter().use { trapFileBW -> // We want our comments to be the first thing in the file, // so start off with a mere TrapWriter - val tw = TrapWriter(loggerBase, TrapLabelManager(), trapFileBW, fileTrapWriter) + val tw = PlainTrapWriter(loggerBase, TrapLabelManager(), trapFileBW, fileTrapWriter.getDiagnosticTrapWriter()) tw.writeComment("Generated by the CodeQL Kotlin extractor for kotlin source code") tw.writeComment("Part of invocation $invocationTrapFile") // Now elevate to a SourceFileTrapWriter, and populate the // file information val sftw = tw.makeSourceFileTrapWriter(srcFile, true) - val externalDeclExtractor = ExternalDeclExtractor(logger, invocationTrapFile, srcFilePath, primitiveTypeMapping, pluginContext, globalExtensionState, fileTrapWriter) + val externalDeclExtractor = ExternalDeclExtractor(logger, invocationTrapFile, srcFilePath, primitiveTypeMapping, pluginContext, globalExtensionState, fileTrapWriter.getDiagnosticTrapWriter()) val linesOfCode = LinesOfCode(logger, sftw, srcFile) val fileExtractor = KotlinFileExtractor(logger, sftw, linesOfCode, srcFilePath, null, externalDeclExtractor, primitiveTypeMapping, pluginContext, KotlinFileExtractor.DeclarationStack(), globalExtensionState) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 39fd82a77ea..6e5d921a406 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -1559,7 +1559,7 @@ open class KotlinFileExtractor( val setter = p.setter if (getter == null) { - if (p.modality != Modality.FINAL || !isExternalDeclaration(p)) { + if (!isExternalDeclaration(p)) { logger.warnElement("IrProperty without a getter", p) } } else if (shouldExtractDecl(getter, extractPrivateMembers)) { @@ -2398,9 +2398,9 @@ open class KotlinFileExtractor( return result } - private fun findTopLevelFunctionOrWarn(functionFilter: String, type: String, parameterTypes: Array, warnAgainstElement: IrElement): IrFunction? { + private fun findTopLevelFunctionOrWarn(functionPkg: String, functionName: String, type: String, parameterTypes: Array, warnAgainstElement: IrElement): IrFunction? { - val fn = getFunctionsByFqName(pluginContext, functionFilter) + val fn = getFunctionsByFqName(pluginContext, functionPkg, functionName) .firstOrNull { fnSymbol -> fnSymbol.owner.parentClassOrNull?.fqNameWhenAvailable?.asString() == type && fnSymbol.owner.valueParameters.map { it.type.classFqName?.asString() }.toTypedArray() contentEquals parameterTypes @@ -2411,15 +2411,15 @@ open class KotlinFileExtractor( extractExternalClassLater(fn.parentAsClass) } } else { - logger.errorElement("Couldn't find JVM intrinsic function $functionFilter in $type", warnAgainstElement) + logger.errorElement("Couldn't find JVM intrinsic function $functionPkg $functionName in $type", warnAgainstElement) } return fn } - private fun findTopLevelPropertyOrWarn(propertyFilter: String, type: String, warnAgainstElement: IrElement): IrProperty? { + private fun findTopLevelPropertyOrWarn(propertyPkg: String, propertyName: String, type: String, warnAgainstElement: IrElement): IrProperty? { - val prop = getPropertiesByFqName(pluginContext, propertyFilter) + val prop = getPropertiesByFqName(pluginContext, propertyPkg, propertyName) .firstOrNull { it.owner.parentClassOrNull?.fqNameWhenAvailable?.asString() == type } ?.owner @@ -2428,7 +2428,7 @@ open class KotlinFileExtractor( extractExternalClassLater(prop.parentAsClass) } } else { - logger.errorElement("Couldn't find JVM intrinsic property $propertyFilter in $type", warnAgainstElement) + logger.errorElement("Couldn't find JVM intrinsic property $propertyPkg $propertyName in $type", warnAgainstElement) } return prop @@ -3020,7 +3020,7 @@ open class KotlinFileExtractor( } isBuiltinCall(c, "", "kotlin.jvm") -> { // Special case for KClass<*>.java, which is used in the Parcelize plugin. In normal cases, this is already rewritten to the property referenced below: - findTopLevelPropertyOrWarn("kotlin.jvm.java", "kotlin.jvm.JvmClassMappingKt", c)?.let { javaProp -> + findTopLevelPropertyOrWarn("kotlin.jvm", "java", "kotlin.jvm.JvmClassMappingKt", c)?.let { javaProp -> val getter = javaProp.getter if (getter == null) { logger.error("Couldn't find getter of `kotlin.jvm.JvmClassMappingKt::java`") @@ -3052,7 +3052,7 @@ open class KotlinFileExtractor( "kotlin.jvm.internal.ArrayIteratorsKt" } - findTopLevelFunctionOrWarn("kotlin.jvm.internal.iterator", typeFilter, arrayOf(parentClass.kotlinFqName.asString()), c)?.let { iteratorFn -> + findTopLevelFunctionOrWarn("kotlin.jvm.internal", "iterator", typeFilter, arrayOf(parentClass.kotlinFqName.asString()), c)?.let { iteratorFn -> val dispatchReceiver = c.dispatchReceiver if (dispatchReceiver == null) { logger.errorElement("No dispatch receiver found for array iterator call", c) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt index 9c552233158..fdaebe5f1c8 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt @@ -139,13 +139,13 @@ open class KotlinUsesExtractor( if (clsFile == null || isExternalDeclaration(cls)) { val filePath = getIrClassBinaryPath(cls) val newTrapWriter = tw.makeFileTrapWriter(filePath, true) - val newLoggerTrapWriter = logger.tw.makeFileTrapWriter(filePath, false) + val newLoggerTrapWriter = logger.dtw.makeFileTrapWriter(filePath, false) val newLogger = FileLogger(logger.loggerBase, newLoggerTrapWriter) return KotlinFileExtractor(newLogger, newTrapWriter, null, filePath, dependencyCollector, externalClassExtractor, primitiveTypeMapping, pluginContext, newDeclarationStack, globalExtensionState) } val newTrapWriter = tw.makeSourceFileTrapWriter(clsFile, true) - val newLoggerTrapWriter = logger.tw.makeSourceFileTrapWriter(clsFile, false) + val newLoggerTrapWriter = logger.dtw.makeSourceFileTrapWriter(clsFile, false) val newLogger = FileLogger(logger.loggerBase, newLoggerTrapWriter) return KotlinFileExtractor(newLogger, newTrapWriter, null, clsFile.path, dependencyCollector, externalClassExtractor, primitiveTypeMapping, pluginContext, newDeclarationStack, globalExtensionState) } diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index eb9feeb4559..b27aec9cc52 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -57,7 +57,9 @@ class TrapLabelManager { * share the same `TrapLabelManager` and `BufferedWriter`. */ // TODO lm was `protected` before anonymousTypeMapping and locallyVisibleFunctionLabelMapping moved into it. Should we re-protect it and provide accessors? -open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelManager, private val bw: BufferedWriter, val diagnosticTrapWriter: TrapWriter?) { +abstract class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelManager, private val bw: BufferedWriter) { + abstract fun getDiagnosticTrapWriter(): DiagnosticTrapWriter + /** * Returns the label that is defined to be the given key, if such * a label exists, and `null` otherwise. Most users will want to use @@ -223,7 +225,7 @@ open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelMa val len = str.length val newLen = UTF8Util.encodablePrefixLength(str, MAX_STRLEN) if (newLen < len) { - loggerBase.warn(diagnosticTrapWriter ?: this, + loggerBase.warn(this.getDiagnosticTrapWriter(), "Truncated string of length $len", "Truncated string of length $len, starting '${str.take(100)}', ending '${str.takeLast(100)}'") return str.take(newLen) @@ -237,14 +239,43 @@ open class TrapWriter (protected val loggerBase: LoggerBase, val lm: TrapLabelMa * writer etc), but using the given `filePath` for locations. */ fun makeFileTrapWriter(filePath: String, populateFileTables: Boolean) = - FileTrapWriter(loggerBase, lm, bw, diagnosticTrapWriter, filePath, populateFileTables) + FileTrapWriter(loggerBase, lm, bw, this.getDiagnosticTrapWriter(), filePath, populateFileTables) /** * Gets a FileTrapWriter like this one (using the same label manager, * writer etc), but using the given `IrFile` for locations. */ fun makeSourceFileTrapWriter(file: IrFile, populateFileTables: Boolean) = - SourceFileTrapWriter(loggerBase, lm, bw, diagnosticTrapWriter, file, populateFileTables) + SourceFileTrapWriter(loggerBase, lm, bw, this.getDiagnosticTrapWriter(), file, populateFileTables) +} + +/** + * A `PlainTrapWriter` has no additional context of its own. + */ +class PlainTrapWriter ( + loggerBase: LoggerBase, + lm: TrapLabelManager, + bw: BufferedWriter, + val dtw: DiagnosticTrapWriter +): TrapWriter (loggerBase, lm, bw) { + override fun getDiagnosticTrapWriter(): DiagnosticTrapWriter { + return dtw + } +} + +/** + * A `DiagnosticTrapWriter` is a TrapWriter that diagnostics can be + * written to; i.e. it has the #compilation label defined. In practice, + * this means that it is a TrapWriter for the invocation TRAP file. + */ +class DiagnosticTrapWriter ( + loggerBase: LoggerBase, + lm: TrapLabelManager, + bw: BufferedWriter +): TrapWriter (loggerBase, lm, bw) { + override fun getDiagnosticTrapWriter(): DiagnosticTrapWriter { + return this + } } /** @@ -259,16 +290,20 @@ open class FileTrapWriter ( loggerBase: LoggerBase, lm: TrapLabelManager, bw: BufferedWriter, - diagnosticTrapWriter: TrapWriter?, + val dtw: DiagnosticTrapWriter, val filePath: String, populateFileTables: Boolean -): TrapWriter (loggerBase, lm, bw, diagnosticTrapWriter) { +): TrapWriter (loggerBase, lm, bw) { /** * The ID for the file that we are extracting from. */ val fileId = mkFileId(filePath, populateFileTables) + override fun getDiagnosticTrapWriter(): DiagnosticTrapWriter { + return dtw + } + private fun offsetMinOf(default: Int, vararg options: Int?): Int { if (default == UNDEFINED_OFFSET || default == SYNTHETIC_OFFSET) { return default @@ -349,10 +384,10 @@ class SourceFileTrapWriter ( loggerBase: LoggerBase, lm: TrapLabelManager, bw: BufferedWriter, - diagnosticTrapWriter: TrapWriter?, + dtw: DiagnosticTrapWriter, val irFile: IrFile, populateFileTables: Boolean) : - FileTrapWriter(loggerBase, lm, bw, diagnosticTrapWriter, irFile.path, populateFileTables) { + FileTrapWriter(loggerBase, lm, bw, dtw, irFile.path, populateFileTables) { /** * The file entry for the file that we are extracting from. @@ -363,14 +398,14 @@ class SourceFileTrapWriter ( override fun getLocation(startOffset: Int, endOffset: Int): Label { if (startOffset == UNDEFINED_OFFSET || endOffset == UNDEFINED_OFFSET) { if (startOffset != endOffset) { - loggerBase.warn(this, "Location with inconsistent offsets (start $startOffset, end $endOffset)", null) + loggerBase.warn(dtw, "Location with inconsistent offsets (start $startOffset, end $endOffset)", null) } return getWholeFileLocation() } if (startOffset == SYNTHETIC_OFFSET || endOffset == SYNTHETIC_OFFSET) { if (startOffset != endOffset) { - loggerBase.warn(this, "Location with inconsistent offsets (start $startOffset, end $endOffset)", null) + loggerBase.warn(dtw, "Location with inconsistent offsets (start $startOffset, end $endOffset)", null) } return getWholeFileLocation() } @@ -390,14 +425,14 @@ class SourceFileTrapWriter ( override fun getLocationString(e: IrElement): String { if (e.startOffset == UNDEFINED_OFFSET || e.endOffset == UNDEFINED_OFFSET) { if (e.startOffset != e.endOffset) { - loggerBase.warn(this, "Location with inconsistent offsets (start ${e.startOffset}, end ${e.endOffset})", null) + loggerBase.warn(dtw, "Location with inconsistent offsets (start ${e.startOffset}, end ${e.endOffset})", null) } return "" } if (e.startOffset == SYNTHETIC_OFFSET || e.endOffset == SYNTHETIC_OFFSET) { if (e.startOffset != e.endOffset) { - loggerBase.warn(this, "Location with inconsistent offsets (start ${e.startOffset}, end ${e.endOffset})", null) + loggerBase.warn(dtw, "Location with inconsistent offsets (start ${e.startOffset}, end ${e.endOffset})", null) } return "" } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/GetByFqName.kt b/java/kotlin-extractor/src/main/kotlin/utils/GetByFqName.kt index 57815fc4409..b429224bc71 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/GetByFqName.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/GetByFqName.kt @@ -1,33 +1,18 @@ package com.github.codeql.utils -import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name fun getClassByFqName(pluginContext: IrPluginContext, fqName: String): IrClassSymbol? { return getClassByFqName(pluginContext, FqName(fqName)) } -fun getClassByFqName(pluginContext: IrPluginContext, fqName: FqName): IrClassSymbol? { - @OptIn(FirIncompatiblePluginAPI::class) - return pluginContext.referenceClass(fqName) +fun getFunctionsByFqName(pluginContext: IrPluginContext, pkgName: String, name: String): Collection { + return getFunctionsByFqName(pluginContext, FqName(pkgName), Name.identifier(name)) } -fun getFunctionsByFqName(pluginContext: IrPluginContext, fqName: String): Collection { - return getFunctionsByFqName(pluginContext, FqName(fqName)) -} - -private fun getFunctionsByFqName(pluginContext: IrPluginContext, fqName: FqName): Collection { - @OptIn(FirIncompatiblePluginAPI::class) - return pluginContext.referenceFunctions(fqName) -} - -fun getPropertiesByFqName(pluginContext: IrPluginContext, fqName: String): Collection { - return getPropertiesByFqName(pluginContext, FqName(fqName)) -} - -private fun getPropertiesByFqName(pluginContext: IrPluginContext, fqName: FqName): Collection { - @OptIn(FirIncompatiblePluginAPI::class) - return pluginContext.referenceProperties(fqName) +fun getPropertiesByFqName(pluginContext: IrPluginContext, pkgName: String, name: String): Collection { + return getPropertiesByFqName(pluginContext, FqName(pkgName), Name.identifier(name)) } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 3b66e527429..2dee392247e 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -107,7 +107,7 @@ open class LoggerBase(val logCounter: LogCounter) { file_number_diagnostic_number = 0 } - fun diagnostic(tw: TrapWriter, severity: Severity, msg: String, extraInfo: String?, locationString: String? = null, mkLocationId: () -> Label = { tw.unknownLocation }) { + fun diagnostic(dtw: DiagnosticTrapWriter, severity: Severity, msg: String, extraInfo: String?, locationString: String? = null, mkLocationId: () -> Label = { dtw.unknownLocation }) { val diagnosticLoc = getDiagnosticLocation() val diagnosticLocStr = if(diagnosticLoc == null) "" else diagnosticLoc val suffix = @@ -121,7 +121,7 @@ open class LoggerBase(val logCounter: LogCounter) { // counting machinery if (verbosity >= 1) { val message = "Severity mismatch ($severity vs ${oldInfo.first}) at $diagnosticLoc" - emitDiagnostic(tw, Severity.Error, "Inconsistency", message, message) + emitDiagnostic(dtw, Severity.Error, "Inconsistency", message, message) } } val newCount = oldInfo.second + 1 @@ -149,18 +149,18 @@ open class LoggerBase(val logCounter: LogCounter) { fullMsgBuilder.append(suffix) val fullMsg = fullMsgBuilder.toString() - emitDiagnostic(tw, severity, diagnosticLocStr, msg, fullMsg, locationString, mkLocationId) + emitDiagnostic(dtw, severity, diagnosticLocStr, msg, fullMsg, locationString, mkLocationId) } - private fun emitDiagnostic(tw: TrapWriter, severity: Severity, diagnosticLocStr: String, msg: String, fullMsg: String, locationString: String? = null, mkLocationId: () -> Label = { tw.unknownLocation }) { + private fun emitDiagnostic(dtw: DiagnosticTrapWriter, severity: Severity, diagnosticLocStr: String, msg: String, fullMsg: String, locationString: String? = null, mkLocationId: () -> Label = { dtw.unknownLocation }) { val locStr = if (locationString == null) "" else "At " + locationString + ": " val kind = if (severity <= Severity.WarnHigh) "WARN" else "ERROR" val logMessage = LogMessage(kind, "Diagnostic($diagnosticLocStr): $locStr$fullMsg") // We don't actually make the location until after the `return` above val locationId = mkLocationId() - val diagLabel = tw.getFreshIdLabel() - tw.writeDiagnostics(diagLabel, "CodeQL Kotlin extractor", severity.sev, "", msg, "${logMessage.timestamp} $fullMsg", locationId) - tw.writeDiagnostic_for(diagLabel, StringLabel("compilation"), file_number, file_number_diagnostic_number++) + val diagLabel = dtw.getFreshIdLabel() + dtw.writeDiagnostics(diagLabel, "CodeQL Kotlin extractor", severity.sev, "", msg, "${logMessage.timestamp} $fullMsg", locationId) + dtw.writeDiagnostic_for(diagLabel, StringLabel("compilation"), file_number, file_number_diagnostic_number++) logStream.write(logMessage.toJsonLine()) } @@ -188,28 +188,25 @@ open class LoggerBase(val logCounter: LogCounter) { } } - fun warn(tw: TrapWriter, msg: String, extraInfo: String?) { + fun warn(dtw: DiagnosticTrapWriter, msg: String, extraInfo: String?) { if (verbosity >= 2) { - diagnostic(tw, Severity.Warn, msg, extraInfo) + diagnostic(dtw, Severity.Warn, msg, extraInfo) } } - fun error(tw: TrapWriter, msg: String, extraInfo: String?) { + fun error(dtw: DiagnosticTrapWriter, msg: String, extraInfo: String?) { if (verbosity >= 1) { - diagnostic(tw, Severity.Error, msg, extraInfo) + diagnostic(dtw, Severity.Error, msg, extraInfo) } } - fun printLimitedDiagnosticCounts(tw: TrapWriter) { + fun printLimitedDiagnosticCounts(dtw: DiagnosticTrapWriter) { for((caller, info) in logCounter.diagnosticInfo) { val severity = info.first val count = info.second if(count >= logCounter.diagnosticLimit) { - // We don't know if this location relates to an error - // or a warning, so we just declare hitting the limit - // to be an error regardless. val message = "Total of $count diagnostics (reached limit of ${logCounter.diagnosticLimit}) from $caller." if (verbosity >= 1) { - emitDiagnostic(tw, severity, "Limit", message, message) + emitDiagnostic(dtw, severity, "Limit", message, message) } } } @@ -224,28 +221,28 @@ open class LoggerBase(val logCounter: LogCounter) { } } -open class Logger(val loggerBase: LoggerBase, open val tw: TrapWriter) { +open class Logger(val loggerBase: LoggerBase, open val dtw: DiagnosticTrapWriter) { fun flush() { - tw.flush() + dtw.flush() loggerBase.flush() } fun trace(msg: String) { - loggerBase.trace(tw, msg) + loggerBase.trace(dtw, msg) } fun trace(msg: String, exn: Throwable) { trace(msg + "\n" + exn.stackTraceToString()) } fun debug(msg: String) { - loggerBase.debug(tw, msg) + loggerBase.debug(dtw, msg) } fun info(msg: String) { - loggerBase.info(tw, msg) + loggerBase.info(dtw, msg) } private fun warn(msg: String, extraInfo: String?) { - loggerBase.warn(tw, msg, extraInfo) + loggerBase.warn(dtw, msg, extraInfo) } fun warn(msg: String, exn: Throwable) { warn(msg, exn.stackTraceToString()) @@ -255,7 +252,7 @@ open class Logger(val loggerBase: LoggerBase, open val tw: TrapWriter) { } private fun error(msg: String, extraInfo: String?) { - loggerBase.error(tw, msg, extraInfo) + loggerBase.error(dtw, msg, extraInfo) } fun error(msg: String) { error(msg, null) @@ -265,16 +262,16 @@ open class Logger(val loggerBase: LoggerBase, open val tw: TrapWriter) { } } -class FileLogger(loggerBase: LoggerBase, override val tw: FileTrapWriter): Logger(loggerBase, tw) { +class FileLogger(loggerBase: LoggerBase, val ftw: FileTrapWriter): Logger(loggerBase, ftw.getDiagnosticTrapWriter()) { fun warnElement(msg: String, element: IrElement, exn: Throwable? = null) { - val locationString = tw.getLocationString(element) - val mkLocationId = { tw.getLocation(element) } - loggerBase.diagnostic(tw, Severity.Warn, msg, exn?.stackTraceToString(), locationString, mkLocationId) + val locationString = ftw.getLocationString(element) + val mkLocationId = { ftw.getLocation(element) } + loggerBase.diagnostic(ftw.getDiagnosticTrapWriter(), Severity.Warn, msg, exn?.stackTraceToString(), locationString, mkLocationId) } fun errorElement(msg: String, element: IrElement, exn: Throwable? = null) { - val locationString = tw.getLocationString(element) - val mkLocationId = { tw.getLocation(element) } - loggerBase.diagnostic(tw, Severity.Error, msg, exn?.stackTraceToString(), locationString, mkLocationId) + val locationString = ftw.getLocationString(element) + val mkLocationId = { ftw.getLocation(element) } + loggerBase.diagnostic(ftw.getDiagnosticTrapWriter(), Severity.Error, msg, exn?.stackTraceToString(), locationString, mkLocationId) } } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/FirIncompatiblePluginAPI.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/FirIncompatiblePluginAPI.kt deleted file mode 100644 index 45d573da9c7..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/FirIncompatiblePluginAPI.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.jetbrains.kotlin.backend.common.extensions - -@RequiresOptIn("This API is not available after FIR") -annotation class FirIncompatiblePluginAPI - diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/ReferenceEntity.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/ReferenceEntity.kt new file mode 100644 index 00000000000..755772d90c6 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_4_32/ReferenceEntity.kt @@ -0,0 +1,20 @@ +package com.github.codeql.utils + +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name + +fun getClassByFqName(pluginContext: IrPluginContext, fqName: FqName): IrClassSymbol? { + return pluginContext.referenceClass(fqName) +} + +fun getFunctionsByFqName(pluginContext: IrPluginContext, pkgName: FqName, name: Name): Collection { + val fqName = pkgName.child(name) + return pluginContext.referenceFunctions(fqName) +} + +fun getPropertiesByFqName(pluginContext: IrPluginContext, pkgName: FqName, name: Name): Collection { + val fqName = pkgName.child(name) + return pluginContext.referenceProperties(fqName) +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/FirIncompatiblePluginAPI.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/FirIncompatiblePluginAPI.kt deleted file mode 100644 index 48829cc30c5..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/FirIncompatiblePluginAPI.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.github.codeql - -// The compiler provides the annotation class, so we don't need to do -// anything diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/ReferenceEntity.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/ReferenceEntity.kt new file mode 100644 index 00000000000..8d70b66cf27 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/ReferenceEntity.kt @@ -0,0 +1,24 @@ +package com.github.codeql.utils + +import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.CallableId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name + +fun getClassByFqName(pluginContext: IrPluginContext, fqName: FqName): IrClassSymbol? { + val id = ClassId.topLevel(fqName) + return pluginContext.referenceClass(id) +} + +fun getFunctionsByFqName(pluginContext: IrPluginContext, pkgName: FqName, name: Name): Collection { + val id = CallableId(pkgName, name) + return pluginContext.referenceFunctions(id) +} + +fun getPropertiesByFqName(pluginContext: IrPluginContext, pkgName: FqName, name: Name): Collection { + val id = CallableId(pkgName, name) + return pluginContext.referenceProperties(id) +} diff --git a/java/ql/consistency-queries/qlpack.yml b/java/ql/consistency-queries/qlpack.yml index e5ab40251bb..1501c7fa736 100644 --- a/java/ql/consistency-queries/qlpack.yml +++ b/java/ql/consistency-queries/qlpack.yml @@ -2,3 +2,4 @@ name: codeql-java-consistency-queries version: 0.0.0 dependencies: codeql/java-all: '*' +warnOnImplicitThis: true diff --git a/java/ql/examples/qlpack.yml b/java/ql/examples/qlpack.yml index 25699c305b0..bbd44274625 100644 --- a/java/ql/examples/qlpack.yml +++ b/java/ql/examples/qlpack.yml @@ -4,3 +4,4 @@ groups: - examples dependencies: codeql/java-all: ${workspace} +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts index 95b77607cb3..75f63e5d4c4 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/project/build.gradle.kts @@ -54,6 +54,9 @@ android { versionName = "1.0" } + lintOptions { + disable("Instantiatable") + } } androidComponents { diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected index 5ea6cd8c5ca..94266bb00a1 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.expected @@ -13,6 +13,7 @@ xmlFiles | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | | project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | +| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | | project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | | project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts index 95b77607cb3..75f63e5d4c4 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/project/build.gradle.kts @@ -54,6 +54,9 @@ android { versionName = "1.0" } + lintOptions { + disable("Instantiatable") + } } androidComponents { diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected index 5ea6cd8c5ca..94266bb00a1 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-kotlin-build-script/test.expected @@ -13,6 +13,7 @@ xmlFiles | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | | project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | +| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | | project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | | project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle index 7751b92ae54..4d52801f178 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/project/build.gradle @@ -55,4 +55,8 @@ android { } variantFilter { variant -> if (variant.buildType.name == "debug") { setIgnore(true) } } + + lintOptions { + disable "Instantiatable" + } } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected index 5ea6cd8c5ca..94266bb00a1 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style-no-wrapper/test.expected @@ -13,6 +13,7 @@ xmlFiles | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | | project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | +| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | | project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | | project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle index 7751b92ae54..4d52801f178 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/project/build.gradle @@ -55,4 +55,8 @@ android { } variantFilter { variant -> if (variant.buildType.name == "debug") { setIgnore(true) } } + + lintOptions { + disable "Instantiatable" + } } diff --git a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected index 5ea6cd8c5ca..94266bb00a1 100644 --- a/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected +++ b/java/ql/integration-tests/all-platforms/java/android-sample-old-style/test.expected @@ -13,6 +13,7 @@ xmlFiles | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml | | project/build/intermediates/incremental/mergeReleaseResources/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseResources/merger.xml | | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml:0:0:0:0 | project/build/intermediates/incremental/mergeReleaseShaders/merger.xml | +| project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml:0:0:0:0 | project/build/intermediates/lint_vital_partial_results/release/out/lint-issues-release.xml | | project/build/intermediates/merged_manifest/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifest/release/AndroidManifest.xml | | project/build/intermediates/merged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/merged_manifests/release/AndroidManifest.xml | | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml:0:0:0:0 | project/build/intermediates/packaged_manifests/release/AndroidManifest.xml | diff --git a/java/ql/integration-tests/all-platforms/java/qlpack.yml b/java/ql/integration-tests/all-platforms/java/qlpack.yml index 9ead02fc564..4994af85a75 100644 --- a/java/ql/integration-tests/all-platforms/java/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/java/qlpack.yml @@ -2,3 +2,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml index 74fbac535d7..eeaa0e9f1b7 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/annotation-id-consistency/qlpack.yml @@ -5,3 +5,4 @@ dependencies: codeql/java-queries: '*' dataExtensions: ext/*.model.yml +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml index f1e981e8791..61fd32f9eb9 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/qlpack.yml @@ -5,3 +5,4 @@ dependencies: codeql/java-queries: '*' dataExtensions: ext/*.model.yml +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql index 78afdd7bb66..65f44797116 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql +++ b/java/ql/integration-tests/all-platforms/kotlin/default-parameter-mad-flow/test.ql @@ -19,12 +19,10 @@ module Config implements DataFlow::ConfigSig { module Flow = TaintTracking::Global; -class InlineFlowTest extends InlineExpectationsTest { - InlineFlowTest() { this = "HasFlowTest" } +module InlineFlowTest implements TestSig { + string getARelevantTag() { result = "flow" } - override string getARelevantTag() { result = "flow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "flow" and exists(DataFlow::Node sink | Flow::flowTo(sink) | sink.getLocation() = location and @@ -33,3 +31,5 @@ class InlineFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/qlpack.yml index 8b18f2ea94a..d9848346b6f 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/gradle_kotlinx_serialization/qlpack.yml @@ -3,3 +3,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/qlpack.yml index 814d1059ed5..69d3f0b3658 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/kotlin-interface-inherited-default/qlpack.yml @@ -3,3 +3,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/qlpack.yml index ecc3ee3e4ff..1902aa3a68f 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/qlpack.yml @@ -3,3 +3,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/all-platforms/kotlin/qlpack.yml b/java/ql/integration-tests/all-platforms/kotlin/qlpack.yml index 9ead02fc564..4994af85a75 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/qlpack.yml +++ b/java/ql/integration-tests/all-platforms/kotlin/qlpack.yml @@ -2,3 +2,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml b/java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml index e2f6b6de7ba..18ab2b37444 100644 --- a/java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml +++ b/java/ql/integration-tests/linux-only/kotlin/custom_plugin/qlpack.yml @@ -1,3 +1,4 @@ name: integrationtest-custom-plugin dependencies: codeql/java-all: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/linux-only/kotlin/qlpack.yml b/java/ql/integration-tests/linux-only/kotlin/qlpack.yml index a1e82f7365a..b2ae6491ab8 100644 --- a/java/ql/integration-tests/linux-only/kotlin/qlpack.yml +++ b/java/ql/integration-tests/linux-only/kotlin/qlpack.yml @@ -1,2 +1,3 @@ dependencies: codeql/java-all: '*' +warnOnImplicitThis: true diff --git a/java/ql/integration-tests/posix-only/kotlin/qlpack.yml b/java/ql/integration-tests/posix-only/kotlin/qlpack.yml index 0c0975df53f..4994af85a75 100644 --- a/java/ql/integration-tests/posix-only/kotlin/qlpack.yml +++ b/java/ql/integration-tests/posix-only/kotlin/qlpack.yml @@ -2,4 +2,4 @@ dependencies: codeql/java-all: '*' codeql/java-tests: '*' codeql/java-queries: '*' - +warnOnImplicitThis: true diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 8c5b6fdcd9e..77961e193da 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,25 @@ +## 0.7.0 + +### Deprecated APIs + +* The `ExecCallable` class in `ExternalProcess.qll` has been deprecated. + +### Major Analysis Improvements + +* The data flow library now performs type strengthening. This increases precision for all data flow queries by excluding paths that can be inferred to be impossible due to incompatible types. + +### Minor Analysis Improvements + +* Added automatically-generated dataflow models for `javax.portlet`. +* Added a missing summary model for the method `java.net.URL.toString`. +* Added automatically-generated dataflow models for the following frameworks and libraries: + * `hudson` + * `jenkins` + * `net.sf.json` + * `stapler` +* Added more models for the Hudson framework. +* Added more models for the Stapler framework. + ## 0.6.4 No user-facing changes. diff --git a/java/ql/lib/change-notes/released/0.7.0.md b/java/ql/lib/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..d355c5e5a18 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.7.0.md @@ -0,0 +1,21 @@ +## 0.7.0 + +### Deprecated APIs + +* The `ExecCallable` class in `ExternalProcess.qll` has been deprecated. + +### Major Analysis Improvements + +* The data flow library now performs type strengthening. This increases precision for all data flow queries by excluding paths that can be inferred to be impossible due to incompatible types. + +### Minor Analysis Improvements + +* Added automatically-generated dataflow models for `javax.portlet`. +* Added a missing summary model for the method `java.net.URL.toString`. +* Added automatically-generated dataflow models for the following frameworks and libraries: + * `hudson` + * `jenkins` + * `net.sf.json` + * `stapler` +* Added more models for the Hudson framework. +* Added more models for the Stapler framework. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/java/ql/lib/ext/experimental/com.jcraft.jsch.model.yml b/java/ql/lib/ext/experimental/com.jcraft.jsch.model.yml new file mode 100644 index 00000000000..1a8783d91a5 --- /dev/null +++ b/java/ql/lib/ext/experimental/com.jcraft.jsch.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: experimentalSinkModel + data: + - ["com.jcraft.jsch", "ChannelExec", True, "setCommand", "", "", "Argument[0]", "command-injection", "manual", "jsch-os-injection"] diff --git a/java/ql/lib/ext/generated/javax.portlet.model.yml b/java/ql/lib/ext/generated/javax.portlet.model.yml new file mode 100644 index 00000000000..085d5f4800a --- /dev/null +++ b/java/ql/lib/ext/generated/javax.portlet.model.yml @@ -0,0 +1,190 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +# Definitions of models for the Java Portlet framework. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.portlet.filter", "ActionRequestWrapper", true, "ActionRequestWrapper", "(ActionRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ActionRequestWrapper", true, "setRequest", "(ActionRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ActionResponseWrapper", true, "ActionResponseWrapper", "(ActionResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ActionResponseWrapper", true, "setResponse", "(ActionResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "EventRequestWrapper", true, "EventRequestWrapper", "(EventRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "EventRequestWrapper", true, "setRequest", "(EventRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "EventResponseWrapper", true, "EventResponseWrapper", "(EventResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "EventResponseWrapper", true, "setResponse", "(EventResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletRequestWrapper", true, "PortletRequestWrapper", "(PortletRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletRequestWrapper", true, "getRequest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletRequestWrapper", true, "setRequest", "(PortletRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletResponseWrapper", true, "PortletResponseWrapper", "(PortletResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletResponseWrapper", true, "getResponse", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet.filter", "PortletResponseWrapper", true, "setResponse", "(PortletResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "RenderRequestWrapper", true, "RenderRequestWrapper", "(RenderRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "RenderRequestWrapper", true, "setRequest", "(RenderRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "RenderResponseWrapper", true, "RenderResponseWrapper", "(RenderResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "RenderResponseWrapper", true, "setResponse", "(RenderResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ResourceRequestWrapper", true, "ResourceRequestWrapper", "(ResourceRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ResourceRequestWrapper", true, "setRequest", "(ResourceRequest)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ResourceResponseWrapper", true, "ResourceResponseWrapper", "(ResourceResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet.filter", "ResourceResponseWrapper", true, "setResponse", "(ResourceResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "GenericPortlet", true, "getPortletConfig", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "Portlet", true, "init", "(PortletConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletException", true, "PortletException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletException", true, "PortletException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletException", true, "PortletException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletMode", true, "PortletMode", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletMode", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(String,PortletMode)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(String,PortletMode)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(String,Throwable,PortletMode)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(String,Throwable,PortletMode)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(String,Throwable,PortletMode)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "PortletModeException", "(Throwable,PortletMode)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletModeException", true, "getMode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "PortletSecurityException", true, "PortletSecurityException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletSecurityException", true, "PortletSecurityException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletSecurityException", true, "PortletSecurityException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "PortletSessionUtil", true, "decodeAttributeName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "ReadOnlyException", true, "ReadOnlyException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ReadOnlyException", true, "ReadOnlyException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ReadOnlyException", true, "ReadOnlyException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "UnavailableException", true, "UnavailableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "UnavailableException", true, "UnavailableException", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(String,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(String,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(String,Throwable,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(String,Throwable,Collection)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(String,Throwable,Collection)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "ValidatorException", "(Throwable,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "ValidatorException", true, "getFailedKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "WindowState", true, "WindowState", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowState", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(String,Throwable,WindowState)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(String,Throwable,WindowState)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(String,Throwable,WindowState)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(String,WindowState)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(String,WindowState)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "WindowStateException", "(Throwable,WindowState)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["javax.portlet", "WindowStateException", true, "getState", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.portlet", "ActionResponse", "sendRedirect", "(String)", "summary", "df-generated"] + - ["javax.portlet", "ActionResponse", "sendRedirect", "(String,String)", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getCharacterEncoding", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getContentLength", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getContentType", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getMethod", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getPortletInputStream", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "getReader", "()", "summary", "df-generated"] + - ["javax.portlet", "ClientDataRequest", "setCharacterEncoding", "(String)", "summary", "df-generated"] + - ["javax.portlet", "EventPortlet", "processEvent", "(EventRequest,EventResponse)", "summary", "df-generated"] + - ["javax.portlet", "EventRequest", "getEvent", "()", "summary", "df-generated"] + - ["javax.portlet", "EventRequest", "getMethod", "()", "summary", "df-generated"] + - ["javax.portlet", "EventResponse", "setRenderParameters", "(EventRequest)", "summary", "df-generated"] + - ["javax.portlet", "GenericPortlet", "init", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "createActionURL", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "createRenderURL", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "createResourceURL", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "flushBuffer", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getBufferSize", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getCacheControl", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getCharacterEncoding", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getContentType", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getLocale", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getPortletOutputStream", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "getWriter", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "isCommitted", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "reset", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "resetBuffer", "()", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "setBufferSize", "(int)", "summary", "df-generated"] + - ["javax.portlet", "MimeResponse", "setContentType", "(String)", "summary", "df-generated"] + - ["javax.portlet", "Portlet", "destroy", "()", "summary", "df-generated"] + - ["javax.portlet", "Portlet", "processAction", "(ActionRequest,ActionResponse)", "summary", "df-generated"] + - ["javax.portlet", "Portlet", "render", "(RenderRequest,RenderResponse)", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getContainerRuntimeOptions", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getDefaultNamespace", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getInitParameter", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getInitParameterNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getPortletContext", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getPortletName", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getProcessingEventQNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getPublicRenderParameterNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getPublishingEventQNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getResourceBundle", "(Locale)", "summary", "df-generated"] + - ["javax.portlet", "PortletConfig", "getSupportedLocales", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletException", "PortletException", "(Throwable)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest$P3PUserInfos", "toString", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getAttribute", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getAttributeNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getAuthType", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getContextPath", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getCookies", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getLocale", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getLocales", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getParameter", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getParameterMap", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getParameterNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getParameterValues", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPortalContext", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPortletMode", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPortletSession", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPortletSession", "(boolean)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPreferences", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPrivateParameterMap", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getProperties", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getProperty", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPropertyNames", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getPublicParameterMap", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getRemoteUser", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getRequestedSessionId", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getResponseContentType", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getResponseContentTypes", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getScheme", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getServerName", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getServerPort", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getUserPrincipal", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getWindowID", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "getWindowState", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "isPortletModeAllowed", "(PortletMode)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "isRequestedSessionIdValid", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "isSecure", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "isUserInRole", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "isWindowStateAllowed", "(WindowState)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "removeAttribute", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletRequest", "setAttribute", "(String,Object)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "addProperty", "(Cookie)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "addProperty", "(String,Element)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "addProperty", "(String,String)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "createElement", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "encodeURL", "(String)", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "getNamespace", "()", "summary", "df-generated"] + - ["javax.portlet", "PortletResponse", "setProperty", "(String,String)", "summary", "df-generated"] + - ["javax.portlet", "PortletSecurityException", "PortletSecurityException", "(Throwable)", "summary", "df-generated"] + - ["javax.portlet", "PortletSessionUtil", "decodeScope", "(String)", "summary", "df-generated"] + - ["javax.portlet", "ReadOnlyException", "ReadOnlyException", "(Throwable)", "summary", "df-generated"] + - ["javax.portlet", "RenderRequest", "getETag", "()", "summary", "df-generated"] + - ["javax.portlet", "RenderResponse", "setNextPossiblePortletModes", "(Collection)", "summary", "df-generated"] + - ["javax.portlet", "RenderResponse", "setTitle", "(String)", "summary", "df-generated"] + - ["javax.portlet", "ResourceRequest", "getCacheability", "()", "summary", "df-generated"] + - ["javax.portlet", "ResourceRequest", "getETag", "()", "summary", "df-generated"] + - ["javax.portlet", "ResourceRequest", "getPrivateRenderParameterMap", "()", "summary", "df-generated"] + - ["javax.portlet", "ResourceRequest", "getResourceID", "()", "summary", "df-generated"] + - ["javax.portlet", "ResourceResponse", "setCharacterEncoding", "(String)", "summary", "df-generated"] + - ["javax.portlet", "ResourceResponse", "setContentLength", "(int)", "summary", "df-generated"] + - ["javax.portlet", "ResourceResponse", "setLocale", "(Locale)", "summary", "df-generated"] + - ["javax.portlet", "ResourceServingPortlet", "serveResource", "(ResourceRequest,ResourceResponse)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "getPortletMode", "()", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "getRenderParameterMap", "()", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "getWindowState", "()", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "removePublicRenderParameter", "(String)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setEvent", "(QName,Serializable)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setEvent", "(String,Serializable)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setPortletMode", "(PortletMode)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setRenderParameter", "(String,String)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setRenderParameter", "(String,String[])", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setRenderParameters", "(Map)", "summary", "df-generated"] + - ["javax.portlet", "StateAwareResponse", "setWindowState", "(WindowState)", "summary", "df-generated"] + - ["javax.portlet", "UnavailableException", "getUnavailableSeconds", "()", "summary", "df-generated"] + - ["javax.portlet", "UnavailableException", "isPermanent", "()", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jenkins-json-lib.model.yml b/java/ql/lib/ext/generated/jenkins-json-lib.model.yml new file mode 100644 index 00000000000..b028104472f --- /dev/null +++ b/java/ql/lib/ext/generated/jenkins-json-lib.model.yml @@ -0,0 +1,598 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +# Definitions of models for the Jenkins JSON Lib framework. +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["net.sf.json.groovy", "JsonSlurper", true, "parse", "(String)", "", "Argument[0]", "request-forgery", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", true, "parse", "(URL)", "", "Argument[0]", "request-forgery", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["net.sf.json.filters", "AndPropertyFilter", true, "AndPropertyFilter", "(PropertyFilter,PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "AndPropertyFilter", true, "AndPropertyFilter", "(PropertyFilter,PropertyFilter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "CompositePropertyFilter", true, "CompositePropertyFilter", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "CompositePropertyFilter", true, "addPropertyFilter", "(PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "MappingPropertyFilter", true, "MappingPropertyFilter", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "MappingPropertyFilter", true, "addPropertyFilter", "(Object,PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "MappingPropertyFilter", true, "addPropertyFilter", "(Object,PropertyFilter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "NotPropertyFilter", true, "NotPropertyFilter", "(PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "OrPropertyFilter", true, "OrPropertyFilter", "(PropertyFilter,PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.filters", "OrPropertyFilter", true, "OrPropertyFilter", "(PropertyFilter,PropertyFilter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonGroovyBuilder", true, "getJsonConfig", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonGroovyBuilder", true, "setJsonConfig", "(JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", true, "JsonSlurper", "(JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", true, "parse", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", true, "parse", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", true, "parseText", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.regexp", "RegexpMatcher", true, "getGroupIfMatches", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "JSONBuilder", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "array", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "endArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "endObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "key", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "object", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONBuilder", true, "value", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "JSONTokener", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "next", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "nextValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "nextValue", "(JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "nextValue", "(JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONTokener", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "convertToJavaIdentifier", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "convertToJavaIdentifier", "(String,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "getFunctionBody", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "getFunctionParams", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "getProperties", "(JSONObject)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "stripQuotes", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "valueToCanonicalString", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "valueToString", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JSONUtils", false, "valueToString", "(Object,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "JavaIdentifierTransformer", true, "transformToJavaIdentifier", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "PropertySetStrategy", true, "setProperty", "(Object,String,Object)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["net.sf.json.util", "PropertySetStrategy", true, "setProperty", "(Object,String,Object)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["net.sf.json.util", "PropertySetStrategy", true, "setProperty", "(Object,String,Object,JsonConfig)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["net.sf.json.util", "PropertySetStrategy", true, "setProperty", "(Object,String,Object,JsonConfig)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["net.sf.json.util", "WebHijackPreventionStrategy", true, "protect", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "WebUtils", true, "protect", "(JSON)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "WebUtils", true, "protect", "(JSON,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.util", "WebUtils", true, "toString", "(JSON)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "addNamespace", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "addNamespace", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "addNamespace", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "addNamespace", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "addNamespace", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "getArrayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "getElementName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "getExpandableProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "getObjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "getRootName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setArrayName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setElementName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setExpandableProperties", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setNamespace", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setNamespace", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setNamespace", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setNamespace", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setNamespace", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setObjectName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", true, "setRootName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSON", true, "toString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSON", true, "toString", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSON", true, "write", "(Writer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSON", true, "writeCanonical", "(Writer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "add", "(Object,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "add", "(int,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "addAll", "(Collection,JsonConfig)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "addAll", "(int,Collection,JsonConfig)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "discard", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "discard", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Collection,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Collection,JsonConfig)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(JSONNull)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(JSONNull)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(JSONObject)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(JSONObject)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Map,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Map,JsonConfig)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(Object,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(String,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(String,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Collection,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Collection,JsonConfig)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Map,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Map,JsonConfig)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,String,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,String,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(int,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "element", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "fromObject", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "fromObject", "(Object,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "getJSONArray", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "getJSONObject", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "getString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "join", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "join", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "join", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "join", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "opt", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "optJSONArray", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "optJSONObject", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "optString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "optString", "(int,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "optString", "(int,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "set", "(int,Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "set", "(int,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toCollection", "(JSONArray)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toCollection", "(JSONArray,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toCollection", "(JSONArray,JsonConfig)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toCollection", "(JSONArray,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toJSONObject", "(JSONArray)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toJSONObject", "(JSONArray)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,Class,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,JsonConfig)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,Object,JsonConfig)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toList", "(JSONArray,Object,JsonConfig)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONArray", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "JSONFunction", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "JSONFunction", "(String[],String)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "JSONFunction", "(String[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "getParams", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "parse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONFunction", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,Object,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,double)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulate", "(String,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulateAll", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "accumulateAll", "(Map,JsonConfig)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "discard", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection,JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection,JsonConfig)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Collection,JsonConfig)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map,JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map,JsonConfig)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Map,JsonConfig)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,double)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "element", "(String,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object,JsonConfig)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object,JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "elementOpt", "(String,Object,JsonConfig)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "fromObject", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "fromObject", "(Object,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "fromObject", "(Object,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "getJSONArray", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "getJSONObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "getString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "names", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "names", "(JsonConfig)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "opt", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "optJSONArray", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "optJSONObject", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "optString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "optString", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "optString", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "putAll", "(Map,JsonConfig)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "remove", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Class,Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,JsonConfig)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Object,JsonConfig)", "", "Argument[0].Element", "Argument[1]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Object,JsonConfig)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Object,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Object,JsonConfig)", "", "Argument[2]", "Argument[1]", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toBean", "(JSONObject,Object,JsonConfig)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toJSONArray", "(JSONArray)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONObject", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJSON", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJSON", "(Object,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJSON", "(Object,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJava", "(JSON)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJava", "(JSON,JsonConfig)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JSONSerializer", true, "toJava", "(JSON,JsonConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "addIgnoreFieldAnnotation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "addJsonEventListener", "(JsonEventListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "copy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findDefaultValueProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJavaPropertyNameProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJsonBeanProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJsonPropertyNameProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJsonValueProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJsonValueProcessor", "(Class,Class,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findJsonValueProcessor", "(Class,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "findPropertyNameProcessor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getClassMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getCycleDetectionStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getDefaultValueProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getExcludes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getIgnoreFieldAnnotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJavaIdentifierTransformer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJavaPropertyFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJavaPropertyNameProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJsonBeanProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJsonEventListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJsonPropertyFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJsonPropertyNameProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getJsonValueProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getMergedExcludes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getMergedExcludes", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getNewBeanInstanceStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getPropertyExclusionClassMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getPropertyNameProcessorMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "getPropertySetStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerDefaultValueProcessor", "(Class,DefaultValueProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJavaPropertyNameProcessor", "(Class,PropertyNameProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonBeanProcessor", "(Class,JsonBeanProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonPropertyNameProcessor", "(Class,PropertyNameProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonValueProcessor", "(Class,Class,JsonValueProcessor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonValueProcessor", "(Class,JsonValueProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonValueProcessor", "(Class,String,JsonValueProcessor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonValueProcessor", "(String,JsonValueProcessor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerJsonValueProcessor", "(String,JsonValueProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "registerPropertyNameProcessor", "(Class,PropertyNameProcessor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setClassMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setCycleDetectionStrategy", "(CycleDetectionStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setDefaultValueProcessorMatcher", "(DefaultValueProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setExcludes", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJavaIdentifierTransformer", "(JavaIdentifierTransformer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJavaPropertyFilter", "(PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJavaPropertyNameProcessorMatcher", "(PropertyNameProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJsonBeanProcessorMatcher", "(JsonBeanProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJsonPropertyFilter", "(PropertyFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJsonPropertyNameProcessorMatcher", "(PropertyNameProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setJsonValueProcessorMatcher", "(JsonValueProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setNewBeanInstanceStrategy", "(NewBeanInstanceStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setPropertyExclusionClassMatcher", "(PropertyExclusionClassMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setPropertyNameProcessorMatcher", "(PropertyNameProcessorMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["net.sf.json", "JsonConfig", true, "setPropertySetStrategy", "(PropertySetStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["net.sf.json.filters", "CompositePropertyFilter", "removePropertyFilter", "(PropertyFilter)", "summary", "df-generated"] + - ["net.sf.json.filters", "MappingPropertyFilter", "removePropertyFilter", "(Object)", "summary", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", "parse", "(File)", "summary", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", "parse", "(String)", "summary", "df-generated"] + - ["net.sf.json.groovy", "JsonSlurper", "parse", "(URL)", "summary", "df-generated"] + - ["net.sf.json.processors", "DefaultValueProcessor", "getDefaultValue", "(Class)", "summary", "df-generated"] + - ["net.sf.json.processors", "DefaultValueProcessorMatcher", "getMatch", "(Class,Set)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonBeanProcessor", "processBean", "(Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonBeanProcessorMatcher", "getMatch", "(Class,Set)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonValueProcessor", "processArrayValue", "(Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonValueProcessor", "processObjectValue", "(String,Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonValueProcessorMatcher", "getMatch", "(Class,Set)", "summary", "df-generated"] + - ["net.sf.json.processors", "JsonVerifier", "isValidJsonValue", "(Object)", "summary", "df-generated"] + - ["net.sf.json.processors", "PropertyNameProcessorMatcher", "getMatch", "(Class,Set)", "summary", "df-generated"] + - ["net.sf.json.regexp", "JdkRegexpMatcher", "JdkRegexpMatcher", "(String)", "summary", "df-generated"] + - ["net.sf.json.regexp", "JdkRegexpMatcher", "JdkRegexpMatcher", "(String,boolean)", "summary", "df-generated"] + - ["net.sf.json.regexp", "Perl5RegexpMatcher", "Perl5RegexpMatcher", "(String)", "summary", "df-generated"] + - ["net.sf.json.regexp", "Perl5RegexpMatcher", "Perl5RegexpMatcher", "(String,boolean)", "summary", "df-generated"] + - ["net.sf.json.regexp", "RegexpMatcher", "getGroupIfMatches", "(String,int)", "summary", "df-generated"] + - ["net.sf.json.regexp", "RegexpMatcher", "matches", "(String)", "summary", "df-generated"] + - ["net.sf.json.regexp", "RegexpUtils", "getMatcher", "(String)", "summary", "df-generated"] + - ["net.sf.json.regexp", "RegexpUtils", "getMatcher", "(String,boolean)", "summary", "df-generated"] + - ["net.sf.json.regexp", "RegexpUtils", "isJDK13", "()", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSON,JSON)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONArray,JSONArray)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONArray,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONFunction,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONNull,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONObject,JSONObject)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(JSONObject,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSON,JSON)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONArray)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONArray,JSONArray)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONArray,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONFunction)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONFunction,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONNull)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONNull,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONObject)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONObject,JSONObject)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,JSONObject,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,String,JSONArray)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,String,JSONFunction)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,String,JSONNull)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertEquals", "(String,String,JSONObject)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertJsonEquals", "(String,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertJsonEquals", "(String,String,String)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertNotNull", "(JSON)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertNotNull", "(String,JSON)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertNull", "(JSON)", "summary", "df-generated"] + - ["net.sf.json.test", "JSONAssert", "assertNull", "(String,JSON)", "summary", "df-generated"] + - ["net.sf.json.util", "CycleDetectionStrategy", "handleRepeatedReferenceAsArray", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "CycleDetectionStrategy", "handleRepeatedReferenceAsObject", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "EnumMorpher", "EnumMorpher", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONStringer", "toString", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "back", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "dehexchar", "(char)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "length", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "matches", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "more", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "next", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "next", "(char)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "nextClean", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "nextString", "(char)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "nextTo", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "nextTo", "(char)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "peek", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "reset", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "skipPast", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "skipTo", "(char)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONTokener", "syntaxError", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "doubleToString", "(double)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "getInnerComponentType", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "getMorpherRegistry", "()", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "getTypeClass", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "hasQuotes", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "hashCode", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isArray", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isArray", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isBoolean", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isBoolean", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isDouble", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isFunction", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isFunctionHeader", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isJavaIdentifier", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isJsonKeyword", "(String,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isNull", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isNumber", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isNumber", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isObject", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isString", "(Class)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "isString", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "mayBeJSON", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "newDynaBean", "(JSONObject)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "newDynaBean", "(JSONObject,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "numberToString", "(Number)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "quote", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "quoteCanonical", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "testValidity", "(Object)", "summary", "df-generated"] + - ["net.sf.json.util", "JSONUtils", "transformNumber", "(Number)", "summary", "df-generated"] + - ["net.sf.json.util", "JavaIdentifierTransformer", "transformToJavaIdentifier", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "NewBeanInstanceStrategy", "newInstance", "(Class,JSONObject)", "summary", "df-generated"] + - ["net.sf.json.util", "PropertyExclusionClassMatcher", "getMatch", "(Class,Set)", "summary", "df-generated"] + - ["net.sf.json.util", "PropertyFilter", "apply", "(Object,String,Object)", "summary", "df-generated"] + - ["net.sf.json.util", "PropertySetStrategy", "setProperty", "(Object,String,Object)", "summary", "df-generated"] + - ["net.sf.json.util", "WebHijackPreventionStrategy", "protect", "(String)", "summary", "df-generated"] + - ["net.sf.json.util", "WebUtils", "getWebHijackPreventionStrategy", "()", "summary", "df-generated"] + - ["net.sf.json.util", "WebUtils", "setWebHijackPreventionStrategy", "(WebHijackPreventionStrategy)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "clearNamespaces", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "clearNamespaces", "(String)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isForceTopLevelObject", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isNamespaceLenient", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isRemoveNamespacePrefixFromElements", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isSkipNamespaces", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isSkipWhitespace", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isTrimSpaces", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isTypeHintsCompatibility", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "isTypeHintsEnabled", "()", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "read", "(String)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "readFromFile", "(File)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "readFromFile", "(String)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "readFromStream", "(InputStream)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "removeNamespace", "(String)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "removeNamespace", "(String,String)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setForceTopLevelObject", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setNamespaceLenient", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setRemoveNamespacePrefixFromElements", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setSkipNamespaces", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setSkipWhitespace", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setTrimSpaces", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setTypeHintsCompatibility", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "setTypeHintsEnabled", "(boolean)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "write", "(JSON)", "summary", "df-generated"] + - ["net.sf.json.xml", "XMLSerializer", "write", "(JSON,String)", "summary", "df-generated"] + - ["net.sf.json", "JSON", "isArray", "()", "summary", "df-generated"] + - ["net.sf.json", "JSON", "isEmpty", "()", "summary", "df-generated"] + - ["net.sf.json", "JSON", "size", "()", "summary", "df-generated"] + - ["net.sf.json", "JSON", "toString", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSON", "toString", "(int,int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "contains", "(Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "containsAll", "(Collection,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getBoolean", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getCollectionType", "(PropertyDescriptor,boolean)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getDimensions", "(JSONArray)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getDouble", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getInt", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "getLong", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "isExpandElements", "()", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optBoolean", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optBoolean", "(int,boolean)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optDouble", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optDouble", "(int,double)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optInt", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optInt", "(int,int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optLong", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "optLong", "(int,long)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "removeAll", "(Collection,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "retainAll", "(Collection,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "setExpandElements", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "toArray", "(JSONArray)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "toArray", "(JSONArray,Class)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "toArray", "(JSONArray,Class,Map)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "toArray", "(JSONArray,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONArray", "toArray", "(JSONArray,Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONException", "JSONException", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONException", "JSONException", "(String,Throwable)", "summary", "df-generated"] + - ["net.sf.json", "JSONException", "JSONException", "(Throwable)", "summary", "df-generated"] + - ["net.sf.json", "JSONNull", "getInstance", "()", "summary", "df-generated"] + - ["net.sf.json", "JSONNull", "toString", "()", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "JSONObject", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "containsValue", "(Object,JsonConfig)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "getBoolean", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "getDouble", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "getInt", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "getLong", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "has", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "isNullObject", "()", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optBoolean", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optBoolean", "(String,boolean)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optDouble", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optDouble", "(String,double)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optInt", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optInt", "(String,int)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optLong", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "optLong", "(String,long)", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "toBean", "()", "summary", "df-generated"] + - ["net.sf.json", "JSONObject", "toBean", "(JSONObject)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "addIgnoreFieldAnnotation", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearJavaPropertyNameProcessors", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearJsonBeanProcessors", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearJsonEventListeners", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearJsonPropertyNameProcessors", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearJsonValueProcessors", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearPropertyExclusions", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "clearPropertyNameProcessors", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "disableEventTriggering", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "enableEventTriggering", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "getArrayMode", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "getCollectionType", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "getEnclosedType", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "getRootClass", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isAllowNonStringKeys", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isEventTriggeringEnabled", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isHandleJettisonEmptyElement", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isHandleJettisonSingleElementArray", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isIgnoreDefaultExcludes", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isIgnoreJPATransient", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isIgnorePublicFields", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isIgnoreTransientFields", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isIgnoreUnreadableProperty", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isJavascriptCompliant", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "isSkipJavaIdentifierTransformationInMapKeys", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "registerPropertyExclusion", "(Class,String)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "registerPropertyExclusions", "(Class,String[])", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "removeIgnoreFieldAnnotation", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "removeIgnoreFieldAnnotation", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "removeJsonEventListener", "(JsonEventListener)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "reset", "()", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setAllowNonStringKeys", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setArrayMode", "(int)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setCollectionType", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setEnclosedType", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setHandleJettisonEmptyElement", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setHandleJettisonSingleElementArray", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setIgnoreDefaultExcludes", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setIgnoreJPATransient", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setIgnorePublicFields", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setIgnoreTransientFields", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setIgnoreUnreadableProperty", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setJavascriptCompliant", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setRootClass", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "setSkipJavaIdentifierTransformationInMapKeys", "(boolean)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterDefaultValueProcessor", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJavaPropertyNameProcessor", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonBeanProcessor", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonPropertyNameProcessor", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonValueProcessor", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonValueProcessor", "(Class,Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonValueProcessor", "(Class,String)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterJsonValueProcessor", "(String)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterPropertyExclusion", "(Class,String)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterPropertyExclusions", "(Class)", "summary", "df-generated"] + - ["net.sf.json", "JsonConfig", "unregisterPropertyNameProcessor", "(Class)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/jenkins.model.yml b/java/ql/lib/ext/generated/jenkins.model.yml new file mode 100644 index 00000000000..82202559350 --- /dev/null +++ b/java/ql/lib/ext/generated/jenkins.model.yml @@ -0,0 +1,8330 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +# Definitions of models for the Jenkins framework. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["antlr", "ANTLRException", true, "ANTLRException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "BuildCommand$CLICause", true, "CLICause", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "getTransportAuthentication2", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "getTransportAuthentication", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "main", "(List,Locale,InputStream,PrintStream,PrintStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "main", "(List,Locale,InputStream,PrintStream,PrintStream)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "main", "(List,Locale,InputStream,PrintStream,PrintStream)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "main", "(List,Locale,InputStream,PrintStream,PrintStream)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "setTransportAuth2", "(Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLICommand", true, "setTransportAuth", "(Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "authorization", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "authorization", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "basicAuth", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "bearerAuth", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "bearerAuth", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "CLIConnectionFactory", true, "bearerAuth", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "Connection", true, "Connection", "(InputStream,OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "Connection", true, "Connection", "(InputStream,OutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "Connection", true, "readByteArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "Connection", true, "readUTF", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "Connection", true, "writeByteArray", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "FullDuplexHttpStream", true, "FullDuplexHttpStream", "(URL,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.cli", "FullDuplexHttpStream", true, "getInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "FullDuplexHttpStream", true, "getOutputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", true, "getKeys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", true, "AnnotatedLargeText", "(ByteBuffer,Charset,boolean,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", true, "AnnotatedLargeText", "(File,Charset,boolean,Object)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotationOutputStream", true, "ConsoleAnnotationOutputStream", "(Writer,ConsoleAnnotator,Object,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotationOutputStream", true, "ConsoleAnnotationOutputStream", "(Writer,ConsoleAnnotator,Object,Charset)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotationOutputStream", true, "ConsoleAnnotationOutputStream", "(Writer,ConsoleAnnotator,Object,Charset)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotationOutputStream", true, "getConsoleAnnotator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotator", true, "cast", "(ConsoleAnnotator)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleAnnotator", true, "combine", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleLogFilter", true, "decorateLogger", "(AbstractBuild,OutputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleLogFilter", true, "decorateLogger", "(Computer,OutputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleLogFilter", true, "decorateLogger", "(Run,OutputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleNote", true, "removeNotes", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ConsoleNote", true, "removeNotes", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ExpandableDetailsNote", true, "ExpandableDetailsNote", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ExpandableDetailsNote", true, "ExpandableDetailsNote", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "HyperlinkNote", true, "HyperlinkNote", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "HyperlinkNote", true, "encodeTo", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "ModelHyperlinkNote", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(Item)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(Item,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(Label)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(Node)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(Run)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(User)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "ModelHyperlinkNote", true, "encodeTo", "(User,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.console", "PlainTextConsoleOutputStream", true, "PlainTextConsoleOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor$Solution", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "MemoryUsageMonitor$MemoryGroup", false, "doGraph", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "NullIdDescriptorMonitor", true, "getProblems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor$VersionRange", true, "VersionRange", "(VersionRange,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor$VersionRange", true, "VersionRange", "(VersionRange,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor$VersionRange", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", true, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", true, "getVersionList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.diagnosis", "ReverseProxySetupMonitor", true, "doTest", "(StaplerRequest,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.init", "InitializerFinder", true, "InitializerFinder", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.init", "TaskMethodFinder$TaskImpl", true, "getAnnotation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.init", "TaskMethodFinder$TaskImpl", true, "getMethod", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.init", "TerminatorFinder", true, "TerminatorFinder", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.lifecycle", "RestartNotSupportedException", true, "RestartNotSupportedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.lifecycle", "WindowsInstallerLink", true, "doDoInstall", "(StaplerRequest,StaplerResponse,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", false, "Target", "(String,Level)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", false, "Target", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", false, "Target", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", false, "getLogger", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder", true, "LogRecorder", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder", true, "getAutoCompletionCandidates", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder", true, "getLoggers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorder", true, "setLoggers", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "LogRecorderManager", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorderManager", true, "getLogRecorder", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorderManager", true, "getRecorders", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.logging", "LogRecorderManager", true, "setRecorders", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.logging", "WeakLogHandler", false, "WeakLogHandler", "(Handler,Logger)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelAtom", true, "LabelAtom", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelAtom", true, "get", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.labels", "LabelAtom", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.labels", "LabelAtom", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$And", false, "And", "(Label,Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$And", false, "And", "(Label,Label)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Iff", false, "Iff", "(Label,Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Iff", false, "Iff", "(Label,Label)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Implies", false, "Implies", "(Label,Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Implies", false, "Implies", "(Label,Label)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Not", true, "Not", "(Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Or", false, "Or", "(Label,Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Or", false, "Or", "(Label,Label)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.labels", "LabelExpression$Paren", true, "Paren", "(Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage$BecauseLabelIsBusy", false, "BecauseLabelIsBusy", "(Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage$BecauseLabelIsOffline", false, "BecauseLabelIsOffline", "(Label)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage$BecauseNodeIsBusy", false, "BecauseNodeIsBusy", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage$BecauseNodeIsNotAcceptingTasks", false, "BecauseNodeIsNotAcceptingTasks", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage$BecauseNodeIsOffline", false, "BecauseNodeIsOffline", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", true, "createNeedsMoreExecutor", "(Localizable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", true, "getShortDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "Executables", true, "getParentOf", "(Executable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "FutureImpl", false, "FutureImpl", "(Task)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorChunk", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorSlot", true, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", false, "assign", "(int,ExecutorChunk)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", false, "assign", "(int,ExecutorChunk)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", false, "assigned", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", false, "toMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet", true, "MappingWorksheet", "(BuildableItem,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet", true, "MappingWorksheet", "(BuildableItem,List,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet", true, "executors", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet", true, "works", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", true, "created", "(WaitingItem)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", true, "existing", "(Item)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", true, "getCreateItem", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", true, "getItem", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "SubTask", true, "getAssignedLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "SubTask", true, "getOwnerTask", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "SubTask", true, "getSameNodeConstraint", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "SubTask", true, "getSameNodeConstraint", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model.queue", "Tasks", true, "getItemOf", "(SubTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "Tasks", true, "getOwnerTaskOf", "(SubTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "Tasks", true, "getSameNodeConstraintOf", "(SubTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "Tasks", true, "getSubTasksOf", "(Task)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnit", false, "getExecutable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnit", false, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnit", false, "setExecutable", "(Executable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnit", false, "setExecutor", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnit", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "WorkUnitContext", "(BuildableItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "abort", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "createWorkUnit", "(SubTask)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "createWorkUnit", "(SubTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "getPrimaryWorkUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", false, "getWorkUnits", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild$AbstractBuildExecution", true, "getLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild$AbstractBuildExecution", true, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild$DependencyChange", false, "DependencyChange", "(AbstractProject,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getBuiltOnStr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getChangeSet", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getEnvironments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getHudsonVersion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getModuleRoot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getModuleRoots", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getPersistentActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getRootBuild", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "AbstractBuild", true, "getWorkspace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractCIBase", true, "getDisabledAdministrativeMonitors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractCIBase", true, "getNodes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractCIBase", true, "getQueue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractCIBase", true, "setDisabledAdministrativeMonitors", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "doConfirmRename", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "doConfirmRename", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getConfigFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getDisplayNameOrNull", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getRelativeDisplayNameFrom", "(ItemGroup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "getRelativeNameFromGroup", "(ItemGroup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "movedTo", "(DirectlyModifiableTopLevelItemGroup,AbstractItem,File)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "movedTo", "(DirectlyModifiableTopLevelItemGroup,AbstractItem,File)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "renameTo", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "setDisplayName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "setDisplayNameOrNull", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractItem", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject$BecauseOfBuildInProgress", true, "BecauseOfBuildInProgress", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject$BecauseOfDownstreamBuildInProgress", true, "BecauseOfDownstreamBuildInProgress", "(AbstractProject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject$BecauseOfUpstreamBuildInProgress", true, "BecauseOfUpstreamBuildInProgress", "(AbstractProject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "addTrigger", "(Trigger)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "doWs", "(StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getAssignedLabelString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getCustomWorkspace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getRelevantLabels", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getRootProject", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getScm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getScmCheckoutStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "getWorkspaceResource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "setCustomWorkspace", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "setJDK", "(JDK)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "setScm", "(SCM)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AbstractProject", true, "setScmCheckoutStrategy", "(SCMCheckoutStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "addAction", "(Action)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "addAction", "(Action)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "addOrReplaceAction", "(Action)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "addOrReplaceAction", "(Action)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "getAction", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "getActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "getAllActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "getDynamic", "(String,StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "replaceAction", "(Action)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "Actionable", true, "replaceAction", "(Action)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "AllView", true, "AllView", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AllView", true, "AllView", "(String,ViewGroup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AllView", true, "AllView", "(String,ViewGroup)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AllView", true, "migrateLegacyPrimaryAllViewLocalizedName", "(List,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Api", true, "Api", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", true, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", true, "add", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", true, "add", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", true, "getValues", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "BallColor", false, "anime", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "BallColor", false, "noAnime", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "BooleanParameterDefinition", true, "BooleanParameterDefinition", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterDefinition", true, "BooleanParameterDefinition", "(String,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterDefinition", true, "BooleanParameterDefinition", "(String,boolean,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterValue", true, "BooleanParameterValue", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterValue", true, "BooleanParameterValue", "(String,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterValue", true, "BooleanParameterValue", "(String,boolean,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BooleanParameterValue", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "BuildAuthorizationToken", false, "BuildAuthorizationToken", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BuildAuthorizationToken", false, "getToken", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "BuildTimelineWidget", true, "BuildTimelineWidget", "(RunList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "BuildTimelineWidget", true, "getFirstBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "BuildTimelineWidget", true, "getLastBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "BuildableItemWithBuildWrappers", true, "asProject", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "BuildableItemWithBuildWrappers", true, "getBuildWrappersList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$RemoteCause", true, "RemoteCause", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$RemoteCause", true, "RemoteCause", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$RemoteCause", true, "getAddr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$RemoteCause", true, "getNote", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "UpstreamCause", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "UpstreamCause", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "getUpstreamCauses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "getUpstreamProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "getUpstreamUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UserCause", true, "getUserName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UserIdCause", true, "UserIdCause", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause$UserIdCause", true, "getUserId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UserIdCause", true, "getUserName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause$UserIdCause", true, "getUserUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Cause", true, "onAddedTo", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause", true, "onAddedTo", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause", true, "onLoad", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Cause", true, "onLoad", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "CauseAction", "(Cause)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "CauseAction", "(CauseAction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "CauseAction", "(Cause[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "CauseAction", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "getCauseCounts", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "CauseAction", true, "getCauses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "CheckPoint", false, "CheckPoint", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CheckPoint", false, "CheckPoint", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CheckPoint", false, "CheckPoint", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "CheckPoint", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String[],String)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "ChoiceParameterDefinition", "(String,String[],String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "getChoices", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "getChoicesText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", true, "setChoices", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "DisplayExecutor", "(String,String,Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "DisplayExecutor", "(String,String,Executor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "DisplayExecutor", "(String,String,Executor)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer$DisplayExecutor", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer$TerminationRequest", true, "TerminationRequest", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "cliDisconnect", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "cliOffline", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "connect", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "disconnect", "(OfflineCause)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getAllExecutors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getComputerPanelBoxs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getDisplayExecutors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getEnvVars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getExecutors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getHeapDump", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getHostName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getLogFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getLogText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getOfflineCause", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getOneOffExecutors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getTerminatedBy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "getWorkspaceList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Computer", true, "setTemporarilyOffline", "(boolean,OfflineCause)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ComputerPanelBox", true, "all", "(Computer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ComputerPanelBox", true, "getComputer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ComputerPanelBox", true, "setComputer", "(Computer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ComputerSet", false, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", true, "Dependency", "(AbstractProject,AbstractProject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", true, "Dependency", "(AbstractProject,AbstractProject)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", true, "getDownstreamProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", true, "getUpstreamProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getComputationalData", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getDownstream", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getDownstreamDependencies", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getTopologicallySorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getTransitiveDownstream", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getTransitiveUpstream", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getUpstream", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "getUpstreamDependencies", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DependencyGraph", true, "putComputationalData", "(Class,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor$FormException", false, "FormException", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor$FormException", false, "FormException", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor$FormException", false, "FormException", "(String,Throwable,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor$FormException", false, "FormException", "(Throwable,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor$FormException", false, "getFormField", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "find", "(Collection,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "findByDescribableClassName", "(Collection,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "findById", "(Collection,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getCheckMethod", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getCheckMethod", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getCheckUrl", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getCheckUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getGlobalPropertyType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getHelpFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getHelpFile", "(Klass,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getHelpFile", "(Klass,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getHelpFile", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getHelpFile", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getPropertyType", "(Object,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getPropertyType", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "getPropertyTypeOrDie", "(Object,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "toArray", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "toList", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Descriptor", true, "toMap", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DescriptorVisibilityFilter", true, "apply", "(Object,Iterable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DescriptorVisibilityFilter", true, "applyType", "(Class,Iterable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DirectlyModifiableView", true, "add", "(TopLevelItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "Path", "(String,String,boolean,long,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "Path", "(String,String,boolean,long,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "Path", "(String,String,boolean,long,boolean,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "Path", "(String,String,boolean,long,boolean,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "createNotReadableVersionOf", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "getHref", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", false, "getTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,FilePath,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,FilePath,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,FilePath,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,FilePath,String,String,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,VirtualFile,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,VirtualFile,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,VirtualFile,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "DirectoryBrowserSupport", "(ModelObject,VirtualFile,String,String,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", false, "setIndexFileName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "Downloadable", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "Downloadable", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "Downloadable", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "Downloadable", "(String,String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "Downloadable", "(String,String,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "getDataFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "getUrls", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", true, "reduce", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Environment", true, "buildEnvVars", "(Map)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.model", "EnvironmentContributingAction", true, "buildEnvVars", "(AbstractBuild,EnvVars)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "EnvironmentContributingAction", true, "buildEnvironment", "(Run,EnvVars)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "EnvironmentContributor", true, "buildEnvironmentFor", "(Job,EnvVars,TaskListener)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "EnvironmentContributor", true, "buildEnvironmentFor", "(Run,EnvVars,TaskListener)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "EnvironmentList", false, "EnvironmentList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "Executor", "(Computer,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "abortResult", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getAsynchronousExecution", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getCausesOfInterruption", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getCurrentExecutable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getCurrentExecutableForApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getCurrentWorkUnit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getCurrentWorkspace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "interrupt", "(Result)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "interrupt", "(Result,CauseOfInterruption[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Executor", true, "interrupt", "(Result,CauseOfInterruption[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Failure", true, "Failure", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Failure", true, "Failure", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterDefinition", true, "FileParameterDefinition", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterDefinition", true, "FileParameterDefinition", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterDefinition", true, "FileParameterDefinition", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue$FileItemImpl", false, "FileItemImpl", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "FileParameterValue", "(String,File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "FileParameterValue", "(String,File,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "FileParameterValue", "(String,File,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "FileParameterValue", "(String,FileItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "FileParameterValue", "(String,FileItem)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "doDynamic", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "getLocation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "getOriginalFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FileParameterValue", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", true, "BuildPtr", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", true, "BuildPtr", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeItem", false, "RangeItem", "(String,RangeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeItem", false, "RangeItem", "(String,RangeSet)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet$ConverterImpl", false, "ConverterImpl", "(Converter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", false, "add", "(RangeSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", false, "getRanges", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "Fingerprint", "(Run,String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "Fingerprint", "(Run,String,byte[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "Fingerprint", "(Run,String,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "_getUsages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "add", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "add", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "addFor", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getFacetBlockingDeletion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getHashString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getJobs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getOriginal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getPersistedFacets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getRangeSet", "(Job)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getRangeSet", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getTimestamp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "getUsages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "rename", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Fingerprint", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,byte[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(AbstractBuild,String,byte[])", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(Run,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(Run,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(Run,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(Run,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FingerprintMap", false, "getOrCreate", "(Run,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "FreeStyleBuild", true, "FreeStyleBuild", "(FreeStyleProject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FreeStyleBuild", true, "FreeStyleBuild", "(FreeStyleProject,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FreeStyleProject", true, "FreeStyleProject", "(ItemGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FreeStyleProject", true, "FreeStyleProject", "(ItemGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FreeStyleProject", true, "FreeStyleProject", "(Jenkins,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FreeStyleProject", true, "FreeStyleProject", "(Jenkins,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "FullDuplexHttpChannel", true, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,Localizable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,String,Localizable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,String,Localizable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "HealthReport", "(int,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getIconClassName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getIconUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getIconUrl", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getIconUrl", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "getLocalizableDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "max", "(HealthReport,HealthReport)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "max", "(HealthReport,HealthReport)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "min", "(HealthReport,HealthReport)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "min", "(HealthReport,HealthReport)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "setIconUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "HealthReport", true, "setLocalizibleDescription", "(Localizable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson$CloudList", true, "CloudList", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "Hudson", "(File,ServletContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "Hudson", "(File,ServletContext)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "Hudson", "(File,ServletContext,PluginManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "Hudson", "(File,ServletContext,PluginManager)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "Hudson", "(File,ServletContext,PluginManager)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getComputerListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getJob", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getJobCaseInsensitive", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getJobListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getSlave", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Hudson", true, "getSlaves", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getAbsoluteUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getAllJobs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getFullDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getFullName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getRelativeNameFrom", "(Item)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getRelativeNameFrom", "(ItemGroup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getShortUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Item", true, "onLoad", "(ItemGroup,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Item", true, "onLoad", "(ItemGroup,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "allItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "allItems", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "allItems", "(Class,Predicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "allItems", "(Class,Predicate)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "getItems", "(Predicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "getItemsStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroup", true, "getItemsStream", "(Predicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroupMixIn", true, "createProject", "(TopLevelItemDescriptor,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroupMixIn", true, "createTopLevelItem", "(StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemGroupMixIn", true, "loadChildren", "(ItemGroup,File,Function1)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ItemVisitor", true, "onItem", "(Item)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ItemVisitor", true, "onItemGroup", "(ItemGroup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems2", "(Authentication,ItemGroup,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems2", "(Authentication,ItemGroup,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems2", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems2", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems2", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(Authentication,ItemGroup,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(Authentication,ItemGroup,Class)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(Authentication,ItemGroup,Class,Predicate)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(ItemGroup,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(ItemGroup,Class,Predicate)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "allItems", "(ItemGroup,Class,Predicate)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "computeRelativeNamesAfterRenaming", "(String,String,String,ItemGroup)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "computeRelativeNamesAfterRenaming", "(String,String,String,ItemGroup)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "getCanonicalName", "(ItemGroup,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "getConfigFile", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "getConfigFile", "(Item)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "load", "(ItemGroup,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "load", "(ItemGroup,File)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "move", "(AbstractItem,DirectlyModifiableTopLevelItemGroup)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.model", "Items", true, "move", "(AbstractItem,DirectlyModifiableTopLevelItemGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "move", "(AbstractItem,DirectlyModifiableTopLevelItemGroup)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "Items", true, "move", "(AbstractItem,DirectlyModifiableTopLevelItemGroup)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Items", true, "toNameList", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "JDK$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "JDK", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "JDK", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "JDK", "(String,String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "JDK", "(String,String,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "buildEnvVars", "(Map)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "getBinDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "JDK", false, "getJavaHome", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "addProperty", "(JobProperty)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getAllProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuild", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildByNumber", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildDiscarder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildForCLI", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildHealth", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildHealthReports", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuilds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuilds", "(RangeSet)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildsAsMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getBuildsByTimestamp", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getCharacteristicEnvVars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getEnvironment", "(Node,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getFirstBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastBuildsOverThreshold", "(int,Result)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastCompletedBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastFailedBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastStableBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastSuccessfulBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastUnstableBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLastUnsuccessfulBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getLogRotator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getNearestBuild", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getNearestOldBuild", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getNewBuilds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getTimeline", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Job", true, "getWidgets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "accept", "(LabelVisitor,Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["hudson.model", "Label", true, "and", "(Label)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "and", "(Label)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "get", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getClouds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getExpression", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getNodes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getSortedNodes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "iff", "(Label)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "iff", "(Label)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "implies", "(Label)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "implies", "(Label)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "listAtoms", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "not", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "or", "(Label)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "or", "(Label)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "paren", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Label", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "ListView", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "ListView", "(String,ViewGroup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "ListView", "(String,ViewGroup)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "getIncludeRegex", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "getJobFilters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "getJobNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "setIncludeRegex", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ListView", true, "setJobNames", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot$Builder", true, "with", "(Computer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot$Builder", true, "with", "(Node)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot$Builder", true, "withQueueLength", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "LoadStatistics", true, "createTrendChart", "(TimeScale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "LoadStatistics", true, "doGraph", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "LoadStatistics", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ModelObject", true, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ModifiableViewGroup", true, "addView", "(View)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries$TrendChart", true, "TrendChart", "(TimeScale,MultiStageTimeSeries[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", true, "MultiStageTimeSeries", "(Localizable,Color,float,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", true, "MultiStageTimeSeries", "(Localizable,Color,float,float)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", true, "createTrendChart", "(TimeScale,MultiStageTimeSeries[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", true, "pick", "(TimeScale)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "MyView", true, "MyView", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MyView", true, "MyView", "(String,ViewGroup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MyView", true, "MyView", "(String,ViewGroup)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MyViewsProperty", true, "MyViewsProperty", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "MyViewsProperty", true, "getPrimaryViewName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "MyViewsProperty", true, "getUser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "MyViewsProperty", true, "readResolve", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "MyViewsProperty", true, "setPrimaryViewName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "NoFingerprintMatch", true, "NoFingerprintMatch", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Node", true, "canTake", "(BuildableItem)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "createComputer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "createLauncher", "(TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "createPath", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getAssignedLabels", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getLabelString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getNodeDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getNodeName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getNodeProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getNodeProperty", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getSelfLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getTemporaryOfflineCause", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "getWorkspaceFor", "(TopLevelItem)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Node", true, "setLabelString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Node", true, "setNodeName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "OneOffExecutor", true, "OneOffExecutor", "(Computer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PaneStatusProperties", true, "toggleCollapsed", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "copyWithDefaultValue", "(ParameterValue)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "createValue", "(CLICommand,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "createValue", "(CLICommand,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "createValue", "(StaplerRequest)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "createValue", "(StaplerRequest)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "createValue", "(StaplerRequest,JSONObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "getDefaultParameterValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterDefinition", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "buildEnvVars", "(AbstractBuild,EnvVars)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "buildEnvVars", "(AbstractBuild,Map)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "buildEnvironment", "(Run,EnvVars)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "getShortDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParameterValue", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "ParametersAction", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "ParametersAction", "(List,Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "ParametersAction", "(List,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "ParametersAction", "(ParameterValue[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "createUpdated", "(Collection)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "createUpdated", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "getAllParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "getParameter", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "getParameters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "merge", "(ParametersAction)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "merge", "(ParametersAction)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersAction", true, "substitute", "(AbstractBuild,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "ParametersDefinitionProperty", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "ParametersDefinitionProperty", "(ParameterDefinition[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getJobActions", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getParameterDefinition", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getParameterDefinitionNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getParameterDefinitions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", true, "getProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,Secret,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,Secret,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,Secret,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "PasswordParameterDefinition", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "getDefaultValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "getDefaultValueAsSecret", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterDefinition", true, "setDefaultValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,Secret,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,Secret,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,Secret,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PasswordParameterValue", true, "PasswordParameterValue", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "PermalinkProjectAction$Permalink", true, "resolve", "(Job)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "PersistenceRoot", true, "getRootDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Project", true, "addPublisher", "(Publisher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Project", true, "getBuildWrappers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Project", true, "getBuildersList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Project", true, "getPublisher", "(Descriptor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Project", true, "getPublishers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ProxyView", true, "ProxyView", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ProxyView", true, "getProxiedViewName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ProxyView", true, "setProxiedViewName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$BlockedItem", false, "BlockedItem", "(NotWaitingItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$BlockedItem", false, "BlockedItem", "(WaitingItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$BuildableItem", false, "BuildableItem", "(NotWaitingItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$BuildableItem", false, "BuildableItem", "(WaitingItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$Executable", true, "getParentExecutable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getAssignedLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getAssignedLabelFor", "(SubTask)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getCauseOfBlockage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getFuture", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "getWhy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Item", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$LeftItem", false, "LeftItem", "(Item)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$LeftItem", false, "LeftItem", "(WorkUnitContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$StubItem", true, "StubItem", "(StubTask)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$StubTask", true, "StubTask", "(Task)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$StubTask", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Task", true, "getAffinityKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Task", true, "getFullDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Task", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Task", true, "getSubTasks", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$Task", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue$WaitingItem", false, "WaitingItem", "(Calendar,Task,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$WaitingItem", false, "WaitingItem", "(Calendar,Task,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue$WaitingItem", false, "WaitingItem", "(Calendar,Task,List)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getBuildableItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getBuildableItems", "(Computer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getItem", "(Task)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getItem", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getItems", "(Task)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getLeftItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getLoadBalancer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getPendingItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getSorter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "getUnblockedItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule2", "(Task,int,Action[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule2", "(Task,int,Action[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule2", "(Task,int,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule2", "(Task,int,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(AbstractProject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(Task,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(Task,int,Action[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(Task,int,Action[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(Task,int,List)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "schedule", "(Task,int,List)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "scheduleMaintenance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "setSorter", "(QueueSorter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "wrapWithLock", "(Callable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Queue", true, "wrapWithLock", "(Runnable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "Resource", "(Resource,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "Resource", "(Resource,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "Resource", "(Resource,String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "Resource", "(Resource,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "Resource", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Resource", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceActivity", true, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceController", true, "getBlockingActivity", "(ResourceActivity)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "getConflict", "(ResourceList)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "getConflict", "(ResourceList)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "r", "(Resource)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "ResourceList", false, "r", "(Resource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "union", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "union", "(ResourceList[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ResourceList", false, "w", "(Resource)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "ResourceList", false, "w", "(Resource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Result", false, "combine", "(Result)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "Result", false, "combine", "(Result,Result)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Result", false, "combine", "(Result,Result)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Result", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getDisplayPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getFileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getHref", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getLength", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "getTreeNodeId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Artifact", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$ArtifactList", false, "getTree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$RunExecution", true, "getAttributes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run$Summary", true, "Summary", "(boolean,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Run", true, "doArtifact", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getArtifactManager", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getArtifactsDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getCharacteristicEnvVars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getEnvVars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getEnvironment", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getEnvironment", "(TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getExternalizableId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getFullDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getLogFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getLogInputStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getLogReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getLogText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getNextBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousBuildInProgress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousBuildsOverThreshold", "(int,Result)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousBuiltBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousCompletedBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousFailedBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousNotFailedBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getPreviousSuccessfulBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getResult", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getTruncatedDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "pickArtifactManager", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Run", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Run", true, "setDisplayName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Run", true, "setResult", "(Result)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Run", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunMap", false, "RunMap", "(File,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunMap", false, "RunMap", "(File,Constructor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunMap", false, "getView", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunMap", false, "load", "(Job,Constructor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunMap", false, "load", "(Job,Constructor)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String,RunParameterFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String,RunParameterFilter)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "RunParameterDefinition", "(String,String,String,RunParameterFilter)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterDefinition", true, "getProjectName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "RunParameterValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "RunParameterValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "RunParameterValue", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "RunParameterValue", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "RunParameterValue", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "getJobName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "getNumber", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "getRunId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "RunParameterValue", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "SimpleParameterDefinition", true, "createValue", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "SimpleParameterDefinition", true, "createValue", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Slave$JnlpJar", false, "JnlpJar", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "getLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "getRemoteFS", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "getRetentionStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "getUserId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "setLauncher", "(ComputerLauncher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "setNodeDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "setRetentionStrategy", "(RetentionStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "Slave", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StatusIcon", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StatusIcon", true, "getImageOf", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StatusIcon", true, "getImageOf", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StockStatusIcon", false, "StockStatusIcon", "(String,Localizable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StockStatusIcon", false, "StockStatusIcon", "(String,Localizable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StreamBuildListener", true, "StreamBuildListener", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StreamBuildListener", true, "StreamBuildListener", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StreamBuildListener", true, "StreamBuildListener", "(PrintStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StreamBuildListener", true, "StreamBuildListener", "(PrintStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "StringParameterDefinition", "(String,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "getDefaultValue4Build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "getDefaultValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "StringParameterDefinition", true, "setDefaultValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "StringParameterValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "StringParameterValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "StringParameterValue", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "StringParameterValue", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "StringParameterValue", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "StringParameterValue", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TaskAction", true, "getWorkerThread", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TaskListener", true, "getLogger", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", false, "ListenerAndText", "(TaskListener,AnnotatedLargeText)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", false, "ListenerAndText", "(TaskListener,AnnotatedLargeText)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", false, "forFile", "(File,TaskAction)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", false, "forMemory", "(TaskAction)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TextParameterDefinition", true, "TextParameterDefinition", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterDefinition", true, "TextParameterDefinition", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterDefinition", true, "TextParameterDefinition", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterDefinition", true, "TextParameterDefinition", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "TextParameterValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "TextParameterValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "TextParameterValue", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "TextParameterValue", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "TextParameterValue", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TextParameterValue", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TimeZoneProperty", true, "TimeZoneProperty", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TimeZoneProperty", true, "getTimeZoneName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TimeZoneProperty", true, "setTimeZoneName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", true, "getIconFilePath", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", true, "newInstance", "(ItemGroup,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", true, "newInstance", "(ItemGroup,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", true, "newInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$CompleteBatchJob", false, "CompleteBatchJob", "(List,long,UUID)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$CompleteBatchJob", false, "CompleteBatchJob", "(List,long,UUID)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$ConnectionCheckJob", false, "ConnectionCheckJob", "(UpdateSite)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$ConnectionCheckJob", false, "getStatuses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$Failure", true, "Failure", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$Failure", true, "getProblemStackTrace", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$SuccessButRequiresRestart", true, "SuccessButRequiresRestart", "(Localizable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", true, "getDisplayName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", true, "getUser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$EnableJob", true, "EnableJob", "(UpdateSite,Authentication,Plugin,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$EnableJob", true, "EnableJob", "(UpdateSite,Authentication,Plugin,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$EnableJob", true, "EnableJob", "(UpdateSite,Authentication,Plugin,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$EnableJob", true, "getPlugin", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$HudsonDowngradeJob", false, "HudsonDowngradeJob", "(UpdateSite,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$HudsonDowngradeJob", false, "HudsonDowngradeJob", "(UpdateSite,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$HudsonUpgradeJob", false, "HudsonUpgradeJob", "(UpdateSite,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$HudsonUpgradeJob", false, "HudsonUpgradeJob", "(UpdateSite,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "InstallationJob", "(Plugin,UpdateSite,Authentication,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$InstallationJob", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$NoOpJob", true, "NoOpJob", "(UpdateSite,Authentication,Plugin)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$NoOpJob", true, "NoOpJob", "(UpdateSite,Authentication,Plugin)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$NoOpJob", true, "NoOpJob", "(UpdateSite,Authentication,Plugin)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$PluginDowngradeJob", false, "PluginDowngradeJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$PluginDowngradeJob", false, "PluginDowngradeJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$PluginDowngradeJob", false, "PluginDowngradeJob", "(Plugin,UpdateSite,Authentication)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$PluginDowngradeJob", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$RestartJenkinsJob", true, "RestartJenkinsJob", "(UpdateSite)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", true, "getCorrelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", true, "getError", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", true, "getErrorMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", true, "setCorrelationId", "(UUID)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$WithComputedChecksums", true, "getComputedSHA1", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$WithComputedChecksums", true, "getComputedSHA256", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter$WithComputedChecksums", true, "getComputedSHA512", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "addJob", "(UpdateCenterJob)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "configure", "(UpdateCenterConfiguration)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "createUpdateCenter", "(UpdateCenterConfiguration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getById", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getCategoryDisplayName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getCoreSource", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getHudsonJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getJob", "(Plugin)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getJob", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getJobs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getSite", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateCenter", true, "getSites", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Data", false, "getDeprecations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Data", false, "getWarnings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Deprecation", false, "Deprecation", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", true, "Entry", "(String,JSONObject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", true, "getSha1", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", true, "getSha256", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", true, "getSha512", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$IssueTracker", false, "IssueTracker", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$IssueTracker", false, "IssueTracker", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$IssueTracker", false, "IssueTracker", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", false, "Plugin", "(String,JSONObject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", false, "getCategoriesStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", false, "getIncompatibleParentPlugins", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", false, "setIncompatibleParentPlugins", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "UpdateSite", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "UpdateSite", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getAvailables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getConnectionCheckUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getDownloadUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getMetadataUrlForDownloadable", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getMetadataUrlForDownloadable", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getPlugin", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UpdateSite", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UsageStatistics$CombinedCipherOutputStream", false, "CombinedCipherOutputStream", "(OutputStream,Cipher,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UsageStatistics$CombinedCipherOutputStream", false, "CombinedCipherOutputStream", "(OutputStream,RSAKey,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "UsageStatistics", true, "UsageStatistics", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "User$CanonicalIdResolver", true, "resolve", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User$CanonicalIdResolver", true, "resolveCanonicalId", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "addProperty", "(UserProperty)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.model", "User", true, "addProperty", "(UserProperty)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "User", true, "get", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "get", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "get", "(String,boolean,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getAbsoluteUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getAllProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getById", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getFullName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getOrCreateByIdOrFullName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getPropertyActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "getUserDetailsForImpersonation2", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "User", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "User", true, "setFullName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "User", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "UserIdMapper", true, "init", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$AsynchPeople$People", false, "getUsers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$AsynchPeople", false, "AsynchPeople", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "View$AsynchPeople", false, "AsynchPeople", "(View)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "View$People", false, "People", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "View$People", false, "People", "(View)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "View$People", false, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$PropertyList", true, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$UserInfo", false, "getJob", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$UserInfo", false, "getLastChange", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$UserInfo", false, "getProject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View$UserInfo", false, "getUser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "create", "(StaplerRequest,StaplerResponse,ViewGroup)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "createViewFromXML", "(String,InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getAbsoluteUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getAsynchPeople", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getColumns", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getJob", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getOwner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getOwnerItemGroup", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getOwnerViewActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getPeople", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getViewName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "getViewUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "View", true, "setDescription", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.model", "View", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ViewGroup", true, "getItemGroup", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.model", "ViewGroup", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ViewGroup", true, "getViewActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ViewGroup", true, "getViewsTabBar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", true, "addView", "(View)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.node_monitors", "AbstractNodeMonitorDescriptor", true, "get", "(Computer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitor", true, "DiskSpaceMonitor", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", false, "DiskSpace", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", false, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.node_monitors", "TemporarySpaceMonitor", true, "TemporarySpaceMonitor", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.os", "PosixException", true, "PosixException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.os", "PosixException", true, "PosixException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.os", "PosixException", true, "PosixException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.os", "WindowsUtil", true, "createJunction", "(File,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.os", "WindowsUtil", true, "quoteArgument", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.os", "WindowsUtil", true, "quoteArgumentForCmd", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String,Hash)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String,int,Hash)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String,int,Hash,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "CronTab", "(String,int,Hash,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "ceil", "(Calendar)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "floor", "(Calendar)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scheduler", "CronTab", false, "hashify", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scheduler", "CronTabList", false, "CronTabList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CronTabList", false, "getValidTimezone", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", true, "StartRuleContext", "(ParserRuleContext,int,CronTab)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scheduler", "CrontabParser", true, "startRule", "(CronTab)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm.browsers", "QueryBuilder", false, "QueryBuilder", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm.browsers", "QueryBuilder", false, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.scm.browsers", "QueryBuilder", false, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm.browsers", "QueryBuilder", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "AbstractScmTagAction", true, "getBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "AbstractScmTagAction", true, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogParser", true, "parse", "(AbstractBuild,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogParser", true, "parse", "(Run,RepositoryBrowser,File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", true, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet", true, "createEmpty", "(AbstractBuild)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet", true, "createEmpty", "(Run)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet", true, "getBrowser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet", true, "getItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "ChangeLogSet", true, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "EditType", false, "EditType", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm", "EditType", false, "EditType", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm", "EditType", false, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "EditType", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "PollingResult", false, "PollingResult", "(SCMRevisionState,SCMRevisionState,Change)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm", "PollingResult", false, "PollingResult", "(SCMRevisionState,SCMRevisionState,Change)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getEffectiveBrowser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getModuleRoot", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getModuleRoot", "(FilePath,AbstractBuild)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getModuleRoots", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.scm", "SCM", true, "getModuleRoots", "(FilePath,AbstractBuild)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "FixedSet", true, "FixedSet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "FixedSet", true, "FixedSet", "(SearchItem[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "Search$Item", true, "Item", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "Search", true, "find", "(SearchIndex,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "Search", true, "find", "(SearchIndex,String,SearchableModelObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SearchIndex", true, "find", "(String,List)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.search", "SearchIndex", true, "find", "(String,List)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.search", "SearchIndex", true, "suggest", "(String,List)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(SearchIndex)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(SearchIndex)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(SearchIndexBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(SearchItem)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(SearchItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(String,SearchableModelObject,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(String,SearchableModelObject,String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "add", "(String,String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "addAllAnnotations", "(SearchableModelObject)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.search", "SearchIndexBuilder", false, "make", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SearchItem", true, "getSearchName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SearchItem", true, "getSearchUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "SuggestedItem", "(SearchItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "SuggestedItem", "(SuggestedItem,SearchItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "SuggestedItem", "(SuggestedItem,SearchItem)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "build", "(SearchableModelObject,SearchItem)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "SuggestedItem", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.search", "UnionSearchIndex", true, "UnionSearchIndex", "(SearchIndex,SearchIndex)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "UnionSearchIndex", true, "UnionSearchIndex", "(SearchIndex,SearchIndex)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.search", "UnionSearchIndex", true, "combine", "(SearchIndex[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuerDescriptor", true, "getCrumbRequestField", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuerDescriptor", true, "getCrumbSalt", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuerDescriptor", true, "setCrumbRequestField", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuerDescriptor", true, "setCrumbSalt", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "ACLContext", true, "getPreviousContext2", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException2", true, "AccessDeniedException2", "(Authentication,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException2", true, "AccessDeniedException2", "(Authentication,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException2", true, "AccessDeniedException2", "(Throwable,Authentication,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException2", true, "AccessDeniedException2", "(Throwable,Authentication,Permission)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException3", true, "AccessDeniedException3", "(Authentication,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException3", true, "AccessDeniedException3", "(Authentication,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException3", true, "AccessDeniedException3", "(Throwable,Authentication,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccessDeniedException3", true, "AccessDeniedException3", "(Throwable,Authentication,Permission)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AccountCreationFailedException", true, "AccountCreationFailedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "AuthenticationManagerProxy", true, "setDelegate", "(AuthenticationManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "ChainedServletFilter", true, "ChainedServletFilter", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "ChainedServletFilter", true, "ChainedServletFilter", "(Filter[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "ChainedServletFilter", true, "setFilters", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "FederatedLoginService$UnclaimedIdentityException", true, "UnclaimedIdentityException", "(FederatedIdentity)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "FederatedLoginServiceUserProperty", true, "addIdentifier", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "FederatedLoginServiceUserProperty", true, "getIdentifiers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "HudsonAuthenticationEntryPoint", true, "HudsonAuthenticationEntryPoint", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", false, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", false, "getUsername", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", true, "HudsonPrivateSecurityRealm", "(boolean,boolean,CaptchaSupport)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", true, "createAccount", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", true, "createAccountWithHashedPassword", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", true, "getUser", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,PermissionScope)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Localizable,Permission,boolean,PermissionScope[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Permission)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Permission)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "Permission", "(PermissionGroup,String,Permission)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "Permission", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "PermissionGroup", "(Class,Localizable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "PermissionGroup", "(String,Class,Localizable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "PermissionGroup", "(String,Class,Localizable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "find", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "PermissionGroup", false, "getPermissions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "PermissionScope", false, "PermissionScope", "(Class,PermissionScope[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "RememberMeServicesProxy", true, "setDelegate", "(RememberMeServices)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager,UserDetailsService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager,UserDetailsService)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager,UserDetailsService,RememberMeServices)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager,UserDetailsService,RememberMeServices)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", false, "SecurityComponents", "(AuthenticationManager,UserDetailsService,RememberMeServices)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm", true, "createSecurityComponents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm", true, "getCaptchaSupport", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm", true, "getSecurityComponents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm", true, "loadUserByUsername2", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.security", "SecurityRealm", true, "setCaptchaSupport", "(CaptchaSupport)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SparseACL$Entry", false, "Entry", "(Sid,Permission,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SparseACL$Entry", false, "Entry", "(Sid,Permission,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SparseACL", true, "SparseACL", "(ACL)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "SparseACL", true, "add", "(Entry)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "UserDetailsServiceProxy", true, "setDelegate", "(UserDetailsService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException", true, "UserMayOrMayNotExistException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.security", "WhoAmI", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "AbstractCloudComputer", true, "AbstractCloudComputer", "(AbstractCloudSlave)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.slaves", "AbstractCloudComputer", true, "AbstractCloudComputer", "(AbstractCloudSlave)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "Cloud$CloudState", false, "CloudState", "(Label,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "Cloud$CloudState", false, "getLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "Cloud", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "ComputerLauncherFilter", true, "getCore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "DelegatingComputerLauncher", true, "getLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,ComputerLauncher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,ComputerLauncher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,ComputerLauncher)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "DumbSlave", false, "DumbSlave", "(String,String,String,String,Mode,String,ComputerLauncher,RetentionStrategy,List)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty$Entry", true, "Entry", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty$Entry", true, "Entry", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty", true, "EnvironmentVariablesNodeProperty", "(Entry[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty", true, "EnvironmentVariablesNodeProperty", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty", true, "getEnv", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty", true, "getEnvVars", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "JNLPLauncher", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "JNLPLauncher", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "JNLPLauncher", "(String,String,RemotingWorkDirSettings)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "JNLPLauncher", "(String,String,RemotingWorkDirSettings)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "getWorkDirOptions", "(Computer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "getWorkDirSettings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", true, "setWorkDirSettings", "(RemotingWorkDirSettings)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeList", false, "NodeList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeList", false, "NodeList", "(Node[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeList", false, "getNode", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$PlannedNode", true, "PlannedNode", "(String,Future,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$PlannedNode", true, "PlannedNode", "(String,Future,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", false, "getLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", false, "getSnapshot", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner", true, "NodeProvisioner", "(Label,LoadStatistics)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner", true, "NodeProvisioner", "(Label,LoadStatistics)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "NodeProvisioner", true, "getPendingLaunches", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause$ByCLI", true, "ByCLI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause$ChannelTermination", true, "ChannelTermination", "(Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause$SimpleOfflineCause", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause$UserCause", true, "UserCause", "(User,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause$UserCause", true, "getUser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "OfflineCause", true, "create", "(Localizable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SimpleScheduledRetentionStrategy", true, "SimpleScheduledRetentionStrategy", "(String,int,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "SimpleScheduledRetentionStrategy", true, "getStartTimeSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "SlaveComputer", "(Slave)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "SlaveComputer", "(Slave)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "doJenkinsAgentJnlp", "(StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "doSlaveAgentJnlp", "(StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getAbsoluteRemoteFs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getAbsoluteRemotePath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getDelegatedLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getJnlpJars", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "openLogFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "SlaveComputer", true, "setChannel", "(Channel,OutputStream,Listener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList$Entry", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList$Lease", true, "createDummyLease", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList$Lease", true, "createLinkedDummyLease", "(FilePath,Lease)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath,boolean,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "acquire", "(FilePath,boolean,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "allocate", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "allocate", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "allocate", "(FilePath,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "allocate", "(FilePath,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "record", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "record", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.slaves", "WorkspaceList", false, "tempDir", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks._maven", "MavenConsoleAnnotator", true, "MavenConsoleAnnotator", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean,boolean,Boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "ArtifactArchiver", "(String,String,boolean,boolean,boolean,Boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "getArtifacts", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "getExcludes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", true, "setExcludes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BatchFile", true, "BatchFile", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BatchFile", true, "setConfiguredLocalRules", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildStep$PublisherList", false, "addNotifier", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildStep$PublisherList", false, "addRecorder", "(Descriptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildStep", true, "getProjectActions", "(AbstractProject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildStepDescriptor", true, "filter", "(List,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(Collection,Result)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(Collection,Result)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(List,Result)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(List,Result)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(String,Result)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(String,Result)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "BuildTrigger", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "getChildProjectsValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "getThreshold", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildTrigger", true, "onJobRenamed", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "BuildWrapper", true, "decorateLauncher", "(AbstractBuild,Launcher,BuildListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildWrapper", true, "decorateLogger", "(AbstractBuild,OutputStream)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildWrapper", true, "setUp", "(AbstractBuild,Launcher,BuildListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "BuildWrapper", true, "setUp", "(Build,Launcher,BuildListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", true, "buildCommandLine", "(FilePath)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", true, "buildCommandLine", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", true, "createScriptFile", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", true, "getCommand", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", true, "getConfiguredLocalRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "FingerprintAction", "(AbstractBuild,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "FingerprintAction", "(Run,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "getBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "getFingerprints", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "getRecords", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", false, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter", true, "Fingerprinter", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter", true, "Fingerprinter", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter", true, "getExcludes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter", true, "getTargets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Fingerprinter", true, "setExcludes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "LogRotator$CollatedLogRotatorException", true, "CollatedLogRotatorException", "(String,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "LogRotator$CollatedLogRotatorException", true, "CollatedLogRotatorException", "(String,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "LogRotator$CollatedLogRotatorException", true, "CollatedLogRotatorException", "(String,Exception[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "LogRotator$CollatedLogRotatorException", true, "CollatedLogRotatorException", "(String,Exception[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$DescriptorImpl", false, "getInstallations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation$ConverterImpl", true, "ConverterImpl", "(XStream2)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "MavenInstallation", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "MavenInstallation", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "MavenInstallation", "(String,String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "MavenInstallation", "(String,String,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "getHomeDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", false, "getMavenHome", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstaller", true, "MavenInstaller", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "Maven", "(String,String,String,String,String,boolean,SettingsProvider,GlobalSettingsProvider,boolean)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "getGlobalSettings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "getSettings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Maven", true, "getTargets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Publisher$DescriptorExtensionListImpl", false, "DescriptorExtensionListImpl", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", true, "getShell", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", true, "getShellOrDefault", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", true, "getShellOrDefault", "(VirtualChannel)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", true, "setShell", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Shell", true, "Shell", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tasks", "Shell", true, "setConfiguredLocalRules", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller", true, "getCommand", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller", true, "getCommandCall", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller", true, "getToolHome", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "BatchCommandInstaller", true, "BatchCommandInstaller", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "BatchCommandInstaller", true, "BatchCommandInstaller", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "BatchCommandInstaller", true, "BatchCommandInstaller", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "CommandInstaller", true, "CommandInstaller", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "CommandInstaller", true, "CommandInstaller", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "CommandInstaller", true, "CommandInstaller", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "PropertyDescriptor", true, "for_", "(List,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "PropertyDescriptor", true, "for_", "(List,Object)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolDescriptor", true, "getInstallations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolDescriptor", true, "setInstallations", "(ToolInstallation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "buildEnvVars", "(EnvVars)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "getHome", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "translate", "(AbstractBuild,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "translate", "(AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "translate", "(Node,EnvVars,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstallation", true, "translate", "(Node,EnvVars,TaskListener)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller$ToolInstallerEntry", false, "ToolInstallerEntry", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller$ToolInstallerEntry", false, "ToolInstallerEntry", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller$ToolInstallerEntry", false, "ToolInstallerEntry", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller", true, "getLabel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller", true, "performInstallation", "(ToolInstallation,Node,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolInstaller", true, "performInstallation", "(ToolInstallation,Node,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$DescriptorImpl", true, "getKey", "(ToolInstallation)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "ToolLocation", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "ToolLocation", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "ToolLocation", "(ToolDescriptor,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "ToolLocation", "(ToolDescriptor,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "ToolLocation", "(ToolDescriptor,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "getHome", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "getKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$ToolLocation", false, "getType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty", true, "ToolLocationNodeProperty", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty", true, "ToolLocationNodeProperty", "(ToolLocation[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty", true, "getHome", "(ToolInstallation)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty", true, "getLocations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty", true, "getToolHome", "(Node,ToolInstallation,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ToolLocationTranslator", true, "getToolHome", "(Node,ToolInstallation,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller", true, "ZipExtractionInstaller", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller", true, "ZipExtractionInstaller", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller", true, "ZipExtractionInstaller", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller", true, "getSubdir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", true, "BuildAction", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", true, "BuildAction", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", true, "getPollingLogText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", true, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", true, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$Runner", true, "Runner", "(Action[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMTriggerCause", true, "SCMTriggerCause", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMTriggerCause", true, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger", true, "SCMTrigger", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger", true, "SCMTrigger", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger", true, "getLogFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SCMTrigger", true, "getScmpoll_spec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor$Value", true, "getFullJobName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor", true, "getErrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "TimerTrigger", true, "TimerTrigger", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.triggers", "Trigger", true, "getSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.triggers", "Trigger", true, "start", "(Item,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.io", "ArchiverFactory", true, "create", "(OutputStream)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.io", "ArchiverFactory", true, "createZipWithoutSymlink", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.io", "ReopenableFileOutputStream", true, "ReopenableFileOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.io", "ReopenableRotatingFileOutputStream", true, "ReopenableRotatingFileOutputStream", "(File,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.io", "RewindableFileOutputStream", true, "RewindableFileOutputStream", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.io", "RewindableRotatingFileOutputStream", true, "RewindableRotatingFileOutputStream", "(File,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "open", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "open", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "open", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "open", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "openReadonly", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "RegistryKey", true, "openReadonly", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util.jna", "SHELLEXECUTEINFO$DUMMYUNIONNAME_union", true, "DUMMYUNIONNAME_union", "(Pointer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.jna", "WinIOException", true, "WinIOException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.jna", "WinIOException", true, "WinIOException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util.xstream", "MapperDelegate", true, "MapperDelegate", "(Mapper)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AWTProblem", true, "AWTProblem", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AdministrativeError", true, "AdministrativeError", "(String,String,String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AdministrativeError", true, "AdministrativeError", "(String,String,String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AdministrativeError", true, "AdministrativeError", "(String,String,String,Throwable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AdministrativeError", true, "AdministrativeError", "(String,String,String,Throwable)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AlternativeUiTextProvider$Message", false, "cast", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "AlternativeUiTextProvider", true, "get", "(Message,Object,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "ArgumentListBuilder", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(Iterable)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(Iterable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(Object,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "add", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePair", "(String,String,String,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePair", "(String,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePair", "(String,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePair", "(String,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairs", "(String,Map,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairsFromPropertyString", "(String,String,VariableResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairsFromPropertyString", "(String,String,VariableResolver)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairsFromPropertyString", "(String,String,VariableResolver)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairsFromPropertyString", "(String,String,VariableResolver,Set)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addKeyValuePairsFromPropertyString", "(String,String,VariableResolver,Set)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addMasked", "(Secret)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addMasked", "(Secret)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addMasked", "(Secret)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addMasked", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addQuoted", "(String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addTokenized", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "addTokenized", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "prepend", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "prepend", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "toCommandArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "toList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", true, "toStringWithQuote", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "AtomicFileWriter", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "AtomicFileWriter", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "AtomicFileWriter", "(Path,Charset)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "AtomicFileWriter", "(Path,Charset,boolean,boolean)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "getTemporaryFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "AtomicFileWriter", true, "getTemporaryPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "BootFailure", true, "getBootFailureFile", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ByteArrayOutputStream2", true, "getBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ByteArrayOutputStream2", true, "readFrom", "(InputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson.util", "ByteArrayOutputStream2", true, "readFrom", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ChartUtil$NumberOnlyBuildLabel", false, "NumberOnlyBuildLabel", "(AbstractBuild)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ChartUtil$NumberOnlyBuildLabel", false, "NumberOnlyBuildLabel", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ChartUtil$NumberOnlyBuildLabel", false, "getRun", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ChartUtil$NumberOnlyBuildLabel", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ChunkedInputStream", true, "ChunkedInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ChunkedOutputStream", true, "ChunkedOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ChunkedOutputStream", true, "ChunkedOutputStream", "(OutputStream,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ClassLoaderSanityThreadFactory", true, "ClassLoaderSanityThreadFactory", "(ThreadFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(FilePath)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "addAll", "(FilePath,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "addJarOf", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ClasspathBuilder", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ComboBoxModel", true, "ComboBoxModel", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ComboBoxModel", true, "ComboBoxModel", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CompoundEnumeration", true, "CompoundEnumeration", "(Enumeration[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CompoundEnumeration", true, "CompoundEnumeration", "(Iterable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CompressedFile", true, "CompressedFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "ConsistentHash", "(Hash)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "ConsistentHash", "(Hash,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "add", "(Object,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "addAll", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "addAll", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "addAll", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "lookup", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "lookup", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ConsistentHash", true, "remove", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "CopyOnWriteList", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "add", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "addAll", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "addAllTo", "(Collection)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "getView", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "replaceBy", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "replaceBy", "(CopyOnWriteList)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "replaceBy", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "toArray", "(Object[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteList", true, "toArray", "(Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Hash", false, "Hash", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Tree", false, "Tree", "(Comparator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Tree", false, "Tree", "(Map,Comparator)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Tree", false, "Tree", "(Map,Comparator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CopyOnWriteMap", true, "replaceBy", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CyclicGraphDetector$CycleDetectedException", false, "CycleDetectedException", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "CyclicGraphDetector", true, "getSorted", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "CyclicGraphDetector", true, "run", "(Iterable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DaemonThreadFactory", true, "DaemonThreadFactory", "(ThreadFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DataSetBuilder", false, "add", "(Number,Comparable,Comparable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DataSetBuilder", false, "add", "(Number,Comparable,Comparable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DecodingStream", true, "DecodingStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "DescribableList", "(Owner)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "DescribableList", "(Saveable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "DescribableList", "(Saveable,Collection)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "get", "(Descriptor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "setOwner", "(Owner)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "toArray", "(Describable[])", "", "Argument[this]", "Argument[0].ArrayElement", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "toArray", "(Describable[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DescribableList", true, "toMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DescriptorList", false, "find", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DescriptorList", false, "findByName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Filter", true, "Filter", "(FileFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DirScanner$Glob", true, "Glob", "(String,String,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", true, "getCollidingId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "DualOutputStream", true, "DualOutputStream", "(OutputStream,OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "DualOutputStream", true, "DualOutputStream", "(OutputStream,OutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "EditDistance", true, "findNearest", "(String,Collection)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "EditDistance", true, "findNearest", "(String,String[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "EncodingStream", true, "EncodingStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ErrorObject", true, "getStackTraceString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ExceptionCatchingThreadFactory", true, "ExceptionCatchingThreadFactory", "(ThreadFactory)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FileVisitor", true, "with", "(FileFilter)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "FlushProofOutputStream", true, "FlushProofOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ForkOutputStream", true, "ForkOutputStream", "(OutputStream,OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ForkOutputStream", true, "ForkOutputStream", "(OutputStream,OutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$Base64", true, "Base64", "(StaplerRequest,StaplerResponse,boolean,boolean,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$Base64", true, "Base64", "(StaplerRequest,StaplerResponse,boolean,boolean,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$Base64", true, "Base64", "(StaplerRequest,StaplerResponse,boolean,boolean,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$Executable", true, "Executable", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$Executable", true, "Executable", "(StaplerRequest,StaplerResponse)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$HudsonURL", true, "HudsonURL", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$HudsonURL", true, "HudsonURL", "(StaplerRequest,StaplerResponse)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceDirectory", true, "WorkspaceDirectory", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceDirectory", true, "WorkspaceDirectory", "(StaplerRequest,StaplerResponse)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceDirectory", true, "WorkspaceDirectory", "(StaplerRequest,StaplerResponse,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceDirectory", true, "WorkspaceDirectory", "(StaplerRequest,StaplerResponse,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFileMask", true, "WorkspaceFileMask", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFileMask", true, "WorkspaceFileMask", "(StaplerRequest,StaplerResponse)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFileMask", true, "WorkspaceFileMask", "(StaplerRequest,StaplerResponse,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFileMask", true, "WorkspaceFileMask", "(StaplerRequest,StaplerResponse,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFilePath", true, "WorkspaceFilePath", "(StaplerRequest,StaplerResponse,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFieldValidator$WorkspaceFilePath", true, "WorkspaceFilePath", "(StaplerRequest,StaplerResponse,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormFillFailure", true, "errorWithMarkup", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormFillFailure", true, "warningWithMarkup", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormFillFailure", true, "withSelectionCleared", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "FormValidation$CheckMethod", true, "CheckMethod", "(Descriptor,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "FormValidation$CheckMethod", true, "getDependsOn", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation$CheckMethod", true, "toCheckUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation$CheckMethod", true, "toStemUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation", true, "aggregate", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation", true, "errorWithMarkup", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation", true, "okWithMarkup", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "FormValidation", true, "warningWithMarkup", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HeadBufferingStream", true, "getSideBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String,JSONArray)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String,JSONArray)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String,JSONObject)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String,JSONObject)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "errorJSON", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "okJSON", "(JSONArray)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HttpResponses", true, "okJSON", "(JSONObject)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "HudsonFailedToLoad", true, "HudsonFailedToLoad", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "absolutize", "(File,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "absolutize", "(File,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copy", "(InputStream,OutputStream)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copy", "(InputStream,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copy", "(InputStream,Writer,String)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copy", "(Reader,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copyLarge", "(InputStream,OutputStream)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "copyLarge", "(Reader,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "lineIterator", "(InputStream,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "lineIterator", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "readFirstLine", "(InputStream,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "readLines", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "readLines", "(InputStream,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "readLines", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "skip", "(InputStream,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toByteArray", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toByteArray", "(Reader,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toByteArray", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toCharArray", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toCharArray", "(InputStream,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toCharArray", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toInputStream", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toInputStream", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toString", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toString", "(InputStream,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toString", "(Reader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toString", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "toString", "(byte[],String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(String,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(StringBuffer,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(byte[],OutputStream)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(byte[],Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(byte[],Writer,String)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "write", "(char[],Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "writeLines", "(Collection,String,OutputStream)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "writeLines", "(Collection,String,OutputStream,String)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "writeLines", "(Collection,String,Writer)", "", "Argument[0].Element", "Argument[2]", "taint", "df-generated"] + - ["hudson.util", "IOUtils", true, "writeLines", "(Collection,String,Writer)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["hudson.util", "InsufficientPermissionDetected", true, "InsufficientPermissionDetected", "(SecurityException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Iterators$DuplicateFilterIterator", false, "DuplicateFilterIterator", "(Iterable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Iterators$DuplicateFilterIterator", false, "DuplicateFilterIterator", "(Iterator)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "cast", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "cast", "(Iterator)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "removeDups", "(Iterator)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "removeNull", "(Iterator)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "sequence", "(Iterator[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Iterators", true, "subType", "(Iterator,Class)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "args", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "classpath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "debug", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "launch", "(Launcher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "mainClass", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "mainClass", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "mainClass", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "pwd", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "pwd", "(FilePath)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "pwd", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperties", "(Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperties", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperty", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperty", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "systemProperty", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "toFullArguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JVMBuilder", true, "vmopts", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "JenkinsReloadFailed", true, "JenkinsReloadFailed", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "get", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "get", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "getOrCreate", "(String,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "getOrCreate", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "getOrCreate", "(String,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "KeyedDataStorage", true, "getOrCreate", "(String,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "LineEndingConversion", true, "convertEOL", "(String,EOLType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "Option", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "Option", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "Option", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "Option", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "Option", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel$Option", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "ListBoxModel", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "ListBoxModel", "(Option[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(ModelObject,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(ModelObject,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "add", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ListBoxModel", true, "values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "MaskingClassLoader", true, "MaskingClassLoader", "(ClassLoader,Collection)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "MaskingClassLoader", true, "MaskingClassLoader", "(ClassLoader,String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "MaskingClassLoader", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "MultipartFormDataParser", true, "getFileItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "NamingThreadFactory", false, "NamingThreadFactory", "(ThreadFactory,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "NamingThreadFactory", false, "NamingThreadFactory", "(ThreadFactory,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "NoHomeDir", true, "NoHomeDir", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "NoTempDir", true, "NoTempDir", "(IOException)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "OneShotEvent", false, "OneShotEvent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "PackedMap", false, "of", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "PersistedList", true, "PersistedList", "(Saveable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "PersistedList", true, "addAllTo", "(Collection)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson.util", "PersistedList", true, "setOwner", "(Saveable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "PersistedList", true, "toList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ProcessKillingVeto$VetoCause", true, "VetoCause", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ProcessKillingVeto$VetoCause", true, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ProcessTree", true, "get", "(Process)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ProcessTree", true, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", true, "getArguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", true, "getEnvironmentVariables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "QueryParameterMap", true, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "QueryParameterMap", true, "getAll", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "QuotedStringTokenizer", "(String,String,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "quote", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "toArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", true, "unquote", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", false, "Parameter", "(MethodInfo,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", false, "annotations", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", false, "genericType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", false, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "ReflectionUtils", true, "getParameters", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RemotingDiagnostics$HeapDump", true, "HeapDump", "(AccessControlled,VirtualChannel)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "RemotingDiagnostics$HeapDump", true, "HeapDump", "(AccessControlled,VirtualChannel)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "Builder", "(Callable,BiPredicate,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "Builder", "(Callable,BiPredicate,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "Builder", "(Callable,BiPredicate,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withAttempts", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withDelay", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withDuringActionExceptionListener", "(BiFunction)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withDuringActionExceptionListener", "(BiFunction)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withDuringActionExceptions", "(Class[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "Retrier$Builder", true, "withDuringActionExceptions", "(Class[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "RobustReflectionConverter", true, "RobustReflectionConverter", "(Mapper,ReflectionProvider)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "RobustReflectionConverter", true, "RobustReflectionConverter", "(Mapper,ReflectionProvider)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "RobustReflectionConverter", true, "doUnmarshal", "(Object,HierarchicalStreamReader,UnmarshallingContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "RunList", "(Job)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "byTimestamp", "(long,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "completedOnly", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "failureOnly", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "filter", "(Predicate)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "filter", "(Predicate)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson.util", "RunList", true, "fromRuns", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "getFirstBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "getLastBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "limit", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "newBuilds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "node", "(Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "overThresholdOnly", "(Result)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "RunList", true, "regressionOnly", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Scrambler", true, "descramble", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Scrambler", true, "scramble", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "decrypt", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "fromString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "getEncryptedValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "getPlainText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "Secret", false, "toString", "(Secret)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "SecretRewriter", true, "rewriteRecursive", "(File,TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "SequentialExecutionQueue", true, "SequentialExecutionQueue", "(ExecutorService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "SequentialExecutionQueue", true, "getExecutors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "SequentialExecutionQueue", true, "getInProgress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "SequentialExecutionQueue", true, "setExecutors", "(ExecutorService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamCopyThread", true, "StreamCopyThread", "(String,InputStream,OutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamCopyThread", true, "StreamCopyThread", "(String,InputStream,OutputStream)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamCopyThread", true, "StreamCopyThread", "(String,InputStream,OutputStream,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamCopyThread", true, "StreamCopyThread", "(String,InputStream,OutputStream,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamResource", true, "StreamResource", "(String,InputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamTaskListener", true, "StreamTaskListener", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamTaskListener", true, "StreamTaskListener", "(OutputStream,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "StreamTaskListener", true, "StreamTaskListener", "(PrintStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "TagCloud$Entry", false, "Entry", "(Object,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "TextFile", true, "TextFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "TextFile", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "VariableResolver$ByMap", false, "ByMap", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "VariableResolver$Union", false, "Union", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "VariableResolver$Union", false, "Union", "(VariableResolver[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "XStream2", true, "addCompatibilityAlias", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.util", "XStream2", true, "getMapperInjectionPoint", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.util", "XStream2", true, "setMapper", "(Mapper)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.views", "MyViewsTabBar", true, "sort", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.views", "ViewJobFilter", true, "filter", "(List,List,View)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.views", "ViewsTabBar", true, "sort", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson.widgets", "BuildHistoryWidget", true, "BuildHistoryWidget", "(Task,Iterable,Adapter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "BuildHistoryWidget", true, "BuildHistoryWidget", "(Task,Iterable,Adapter)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "BuildHistoryWidget", true, "BuildHistoryWidget", "(Task,Iterable,Adapter)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "HistoryWidget", "(ModelObject,Iterable,Adapter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "HistoryWidget", "(ModelObject,Iterable,Adapter)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "HistoryWidget", "(ModelObject,Iterable,Adapter)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "doAjax", "(StaplerRequest,StaplerResponse,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "getFirstTransientBuildKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "getHistoryPageFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "getNextBuildNumberToFetch", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "getRenderList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson.widgets", "HistoryWidget", true, "setNextBuildNumberToFetch", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "AbortException", true, "AbortException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "AbstractMarkupText", true, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "BulkChange", true, "BulkChange", "(Saveable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ClassicPluginStrategy", true, "ClassicPluginStrategy", "(PluginManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "CloseProofOutputStream", true, "CloseProofOutputStream", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "DependencyRunner", true, "DependencyRunner", "(ProjectRunnable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "DescriptorExtensionList", true, "createDescriptorList", "(Hudson,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "DescriptorExtensionList", true, "createDescriptorList", "(Jenkins,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "DescriptorExtensionList", true, "find", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "DescriptorExtensionList", true, "find", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "DescriptorExtensionList", true, "findByName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "EnvVars", "(EnvVars)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "EnvVars", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "EnvVars", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "addLine", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "expand", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "expand", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "get", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "get", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "override", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "override", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "overrideAll", "(Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "EnvVars", true, "overrideAll", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "overrideExpandingAll", "(Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "EnvVars", true, "overrideExpandingAll", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "putIfNotNull", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "EnvVars", true, "putIfNotNull", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ExtensionComponent", true, "ExtensionComponent", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ExtensionComponent", true, "ExtensionComponent", "(Object,Extension)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ExtensionComponent", true, "ExtensionComponent", "(Object,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ExtensionComponent", true, "getInstance", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ExtensionFinder$GuiceFinder", true, "getContainer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ExtensionList", true, "addListener", "(ExtensionListListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ExtensionList", true, "create", "(Hudson,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ExtensionList", true, "create", "(Jenkins,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ExtensionList", true, "getComponents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ExtensionList", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath$ExplicitlySpecifiedDirScanner", false, "ExplicitlySpecifiedDirScanner", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "FilePath$TarCompression", true, "extract", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "FilePath", "(FilePath,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "FilePath", false, "FilePath", "(FilePath,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "FilePath", false, "FilePath", "(VirtualChannel,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "FilePath", false, "FilePath", "(VirtualChannel,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "FilePath", false, "absolutize", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "act", "(FileCallable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "asCallableWith", "(FileCallable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "child", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "child", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createLauncher", "(TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createLauncher", "(TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createTempDir", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createTempFile", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createTextTempFile", "(String,String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "createTextTempFile", "(String,String,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "digest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "getBaseName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "getRemote", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "ignoringSymlinks", "(FileVisitor,String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "normalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "readLink", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "readToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "sibling", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "sibling", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "toURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "toVirtualFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "validateAntFileMask", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "validateAntFileMask", "(String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "validateAntFileMask", "(String,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "validateAntFileMask", "(String,int,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "withSuffix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "FilePath", false, "withSuffix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "RunUrl", "(Run,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "RunUrl", "(Run,String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "RunUrl", "(Run,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "RunUrl", "(Run,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "getBaseUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "getNextBuildUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions$RunUrl", false, "getPreviousBuildUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions$ThreadGroupMap", true, "getThreadGroup", "(ThreadInfo)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "addSuffix", "(int,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "addSuffix", "(int,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "appendIfNotNull", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "appendIfNotNull", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "appendIfNotNull", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "appendSpaceIfNotNull", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "breakableString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "calcCheckUrl", "(Map,String,Object,String)", "", "Argument[2]", "Argument[0].Element", "taint", "df-generated"] + - ["hudson", "Functions", true, "calcCheckUrl", "(Map,String,Object,String)", "", "Argument[3]", "Argument[2]", "taint", "df-generated"] + - ["hudson", "Functions", true, "capitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "decompose", "(StaplerRequest)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "defaulted", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "defaulted", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "dumpThreadInfo", "(ThreadInfo,ThreadGroupMap)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "encode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "extractPluginNameFromIconSrc", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "filter", "(SortedMap,String,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "filterDescriptors", "(Object,Iterable)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "filterExcludingFrom", "(SortedMap,String,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getActionUrl", "(String,Action)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getCheckUrl", "(String,Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getCheckUrl", "(String,Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getCheckUrl", "(String,Object,String)", "", "Argument[2]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Functions", true, "getCookie", "(HttpServletRequest,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getDiffString2", "(String,int,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getDiffString2", "(String,int,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getNearestAncestorUrl", "(StaplerRequest,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getPasswordValue", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getProjectListString", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getRelativeDisplayNameFrom", "(Item,ItemGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getRelativeNameFrom", "(Item,ItemGroup)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getRelativeNameFrom", "(Item,ItemGroup,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "getViewResource", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "ifThenElse", "(boolean,Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "ifThenElse", "(boolean,Object,Object)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "joinPath", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "prepend", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "prepend", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "printThrowable", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "rawHtml", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "reverse", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "singletonList", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "subList", "(List,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "tryGetIconPath", "(String,JellyContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "validateIconSize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Functions", true, "xmlUnescape", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$DecoratedLauncher", true, "DecoratedLauncher", "(Launcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$DecoratedLauncher", true, "getInner", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$DecoratedLauncher", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$DummyLauncher", true, "DummyLauncher", "(TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$LocalLauncher", true, "LocalLauncher", "(TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$LocalLauncher", true, "LocalLauncher", "(TaskListener,VirtualChannel)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$LocalLauncher", true, "LocalLauncher", "(TaskListener,VirtualChannel)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "buildStep", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "buildStep", "(EnvVarsFilterableBuilder)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "buildStep", "(EnvVarsFilterableBuilder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmdAsSingleString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(ArgumentListBuilder)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(ArgumentListBuilder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(File,String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(File,String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(List)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "cmds", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "copy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "envs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "envs", "(Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "envs", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "envs", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "envs", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "masks", "(boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "pwd", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "pwd", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "pwd", "(FilePath)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "pwd", "(FilePath)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "pwd", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "quiet", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "readStderr", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "readStdout", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "start", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stderr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stderr", "(OutputStream)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stderr", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdin", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdin", "(InputStream)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdin", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdout", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdout", "(OutputStream)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdout", "(OutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdout", "(TaskListener)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "stdout", "(TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$ProcStarter", false, "writeStdin", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["hudson", "Launcher$RemoteLauncher$ProcImpl", false, "ProcImpl", "(RemoteProcess)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$RemoteLauncher", true, "RemoteLauncher", "(TaskListener,VirtualChannel,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$RemoteLauncher", true, "RemoteLauncher", "(TaskListener,VirtualChannel,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Launcher$RemoteLauncher", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "decorateByEnv", "(EnvVars)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "decorateByPrefix", "(String[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "decorateFor", "(Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "getChannel", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "getListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(ProcStarter)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,Map,OutputStream,FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,Map,OutputStream,FilePath)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,Map,OutputStream,FilePath)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,String[],OutputStream,FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,String[],OutputStream,FilePath)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String,String[],OutputStream,FilePath)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,InputStream,OutputStream)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,InputStream,OutputStream)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,InputStream,OutputStream)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,OutputStream,FilePath)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],Map,OutputStream,FilePath)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream,FilePath)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],InputStream,OutputStream,FilePath)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],OutputStream,FilePath)", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],String[],OutputStream,FilePath)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,InputStream,OutputStream)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,InputStream,OutputStream)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,InputStream,OutputStream)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,OutputStream,FilePath)", "", "Argument[2].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],Map,OutputStream,FilePath)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream)", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream,FilePath)", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],InputStream,OutputStream,FilePath)", "", "Argument[4]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],OutputStream,FilePath)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],OutputStream,FilePath)", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Launcher", true, "launch", "(String[],boolean[],String[],OutputStream,FilePath)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "LocalPluginManager", true, "LocalPluginManager", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "LocalPluginManager", true, "LocalPluginManager", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "LocalPluginManager", true, "LocalPluginManager", "(ServletContext,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "LocalPluginManager", true, "LocalPluginManager", "(ServletContext,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Lookup", true, "set", "(Class,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Lookup", true, "setIfNull", "(Class,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Lookup", true, "setIfNull", "(Class,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "MarkupText", true, "MarkupText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "MarkupText", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "MarkupText", true, "toString", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PermalinkList", false, "PermalinkList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PermalinkList", false, "findNearest", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PermalinkList", false, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Plugin", true, "getWrapper", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginFirstClassLoader", true, "getURLs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager$FailedPlugin", false, "FailedPlugin", "(PluginWrapper,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$FailedPlugin", false, "FailedPlugin", "(PluginWrapper,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$FailedPlugin", false, "FailedPlugin", "(String,Exception)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$FailedPlugin", false, "FailedPlugin", "(String,Exception)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$FailedPlugin", false, "getExceptionString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager$PluginCycleDependenciesMonitor", false, "getPluginsWithCycle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager$PluginUpdateMonitor", false, "addPluginToUpdate", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$PluginUpdateMonitor", false, "getPluginsToBeUpdated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager$PluginUpdateMonitor", false, "ifPluginOlderThenReport", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager$UberClassLoader", false, "UberClassLoader", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "createDefault", "(Jenkins)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "disablePlugins", "(PluginDisableStrategy,List)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "disablePlugins", "(PluginDisableStrategy,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "dynamicLoad", "(File,boolean,List)", "", "Argument[this]", "Argument[2].Element", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "dynamicLoad", "(File,boolean,List)", "", "Argument[0]", "Argument[2].Element", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getFailedPlugins", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getLastErrorCheckUpdateCenters", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getPlugin", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getPlugin", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getPluginStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getPlugins", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getPlugins", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "getWorkDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginManager", true, "whichPlugin", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginStrategy", true, "createPluginWrapper", "(File)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginStrategy", true, "createPluginWrapper", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginStrategy", true, "getShortName", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$Dependency", false, "Dependency", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$Dependency", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "PluginDisableResult", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "PluginDisableResult", "(String,PluginDisableStatus,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "PluginDisableResult", "(String,PluginDisableStatus,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "addDependentDisableStatus", "(PluginDisableResult)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "getDependentsDisableStatus", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "getPlugin", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", true, "setMessage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginWrapperAdministrativeMonitor", false, "getPlugin", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper$PluginWrapperAdministrativeMonitor", false, "getPlugins", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[6].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "PluginWrapper", "(PluginManager,File,Manifest,URL,ClassLoader,File,List,List)", "", "Argument[7].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "disable", "(PluginDisableStrategy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getBackupFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getDependants", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getDependencies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getDependencyErrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getDependents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getDerivedDependencyErrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getLongName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getMandatoryDependencies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getMandatoryDependents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getManifest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getOptionalDependants", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getOptionalDependencies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getOptionalDependents", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getOriginalDependencyErrors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "getShortName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "setDependants", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "setDependents", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "setOptionalDependents", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "setPlugin", "(Plugin)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["hudson", "PluginWrapper", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String,Map,OutputStream,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String,Map,OutputStream,File)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String,String[],OutputStream,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String,String[],OutputStream,File)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],Map,InputStream,OutputStream)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],Map,InputStream,OutputStream)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream,File)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream,File)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream,OutputStream,File)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream,OutputStream,File)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],InputStream,OutputStream,OutputStream,File)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],OutputStream,File)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$LocalProc", false, "LocalProc", "(String[],String[],OutputStream,File)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc$RemoteProc", false, "RemoteProc", "(Future)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "Proc", true, "getStderr", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Proc", true, "getStdin", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Proc", true, "getStdout", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String,String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "ProxyConfiguration", "(String,int,String,String,String,String)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getEncryptedPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getNoProxyHost", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getSecretPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getTestUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "getUserName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "setNoProxyHost", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "setSecretPassword", "(Secret)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "setTestUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "ProxyConfiguration", false, "setUserName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "StructuredForm", true, "get", "(StaplerRequest)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "changeExtension", "(File,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "combine", "(long,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "copyStream", "(InputStream,OutputStream)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Util", true, "copyStream", "(Reader,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Util", true, "copyStreamAndClose", "(InputStream,OutputStream)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Util", true, "copyStreamAndClose", "(Reader,Writer)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Util", true, "createDirectories", "(Path,FileAttribute[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "encode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "encodeRFC2396", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "ensureEndsWith", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "ensureEndsWith", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fileToPath", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixEmpty", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixEmptyAndTrim", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(Set)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fixNull", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "fullEncode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "getFileName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "intern", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "join", "(Collection,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "join", "(Collection,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "join", "(Collection[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "mapToEnv", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "nullify", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "rawEncode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "removeTrailingSlash", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "replaceMacro", "(String,Map)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "replaceMacro", "(String,Map)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "replaceMacro", "(String,VariableResolver)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["hudson", "Util", true, "replaceMacro", "(String,VariableResolver)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "replaceMacro", "(String,VariableResolver)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "singleQuote", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "toHexString", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "tokenize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "Util", true, "wrapToErrorSpan", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "WebAppMain$FileAndDescription", true, "FileAndDescription", "(File,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "WebAppMain$FileAndDescription", true, "FileAndDescription", "(File,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "XmlFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "XmlFile", "(XStream,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "XmlFile", "(XStream,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "XmlFile", "(XStream,File,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "XmlFile", "(XStream,File,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "getFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "getXStream", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "replaceIfNotAtTopLevel", "(Object,Supplier)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["hudson", "XmlFile", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", true, "HsErrPidFile", "(HsErrPidList,File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", true, "HsErrPidFile", "(HsErrPidList,File)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidList", true, "getFiles", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", true, "getStorage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", true, "setStorage", "(FingerprintStorage)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.install", "InstallState", true, "InstallState", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.install", "InstallState", true, "name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.install", "InstallState", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsApiData", true, "getMonitorsList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsDecorator", true, "filterNonSecurityAdministrativeMonitors", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsDecorator", true, "filterSecurityAdministrativeMonitors", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "AsynchronousAdministrativeMonitor", true, "getLogText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "Badge", true, "Badge", "(String,String,Severity)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.management", "Badge", true, "Badge", "(String,String,Severity)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.management", "Badge", true, "getText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.management", "Badge", true, "getTooltip", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Categories", true, "getItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Categories", true, "getItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "Category", "(String,String,String,int,int,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "Category", "(String,String,String,int,int,List)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "Category", "(String,String,String,int,int,List)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "Category", "(String,String,String,int,int,List)", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "getItems", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.item_category", "Category", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.labels", "LabelAutoCompleteSeeder", true, "LabelAutoCompleteSeeder", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.labels", "LabelAutoCompleteSeeder", true, "getSeeds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", true, "getLoadedBuilds", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", true, "put", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", true, "put", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", true, "updateBaseDir", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.lazy", "BuildReference$HolderFactory", true, "make", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "BuildReference", false, "BuildReference", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.lazy", "BuildReference", false, "BuildReference", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.lazy", "BuildReference", false, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "BuildReference", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn$RunMixIn", true, "createReference", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn$RunMixIn", true, "getNextBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn$RunMixIn", true, "getPreviousBuild", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", true, "_getRuns", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", true, "createHistoryWidget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", true, "getRunMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", true, "completed", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", true, "getExecutor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", true, "setExecutorWithoutCompleting", "(Executor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model.queue", "CompositeCauseOfBlockage", true, "CompositeCauseOfBlockage", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ArtifactManager", true, "onLoad", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ArtifactManagerConfiguration", true, "getArtifactManagerFactories", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "BlockedBecauseOfBuildInProgress", true, "BlockedBecauseOfBuildInProgress", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "BuildDiscarder$ConverterImpl", true, "ConverterImpl", "(Mapper)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "BuildDiscarderProperty", true, "BuildDiscarderProperty", "(BuildDiscarder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "BuildDiscarderProperty", true, "getStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "CauseOfInterruption$UserInterruption", false, "UserInterruption", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "CauseOfInterruption$UserInterruption", false, "UserInterruption", "(User)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "CauseOfInterruption$UserInterruption", false, "getUser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "CauseOfInterruption$UserInterruption", false, "getUserId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "CauseOfInterruption$UserInterruption", false, "getUserOrNull", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Configuration", true, "getStringConfigParameter", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "DirectlyModifiableTopLevelItemGroup", true, "add", "(TopLevelItem,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "DirectlyModifiableTopLevelItemGroup", true, "add", "(TopLevelItem,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "DirectlyModifiableTopLevelItemGroup", true, "add", "(TopLevelItem,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "FingerprintFacet", true, "_setOwner", "(Fingerprint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "FingerprintFacet", true, "getFingerprint", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderConfiguration", true, "getConfiguredBuildDiscarders", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "IdStrategy", true, "idFromFilename", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "IdStrategy", true, "keyFor", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "InterruptedBuildAction", true, "InterruptedBuildAction", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "InterruptedBuildAction", true, "getCauses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "InvalidBuildsDir", true, "InvalidBuildsDir", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins$CloudList", true, "CloudList", "(Jenkins)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins$CloudList", true, "getByName", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "_getFingerprint", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "createProject", "(TopLevelItemDescriptor,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "doJnlpJars", "(StaplerRequest)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "doQuietDown", "(boolean,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "doUserContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "expandVariablesForDirectory", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "expandVariablesForDirectory", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "expandVariablesForDirectory", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getActiveAdministrativeMonitors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAdjuncts", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAdministrativeMonitor", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAgentProtocols", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAllThreadDumps", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getApi", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAsynchPeople", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getAuthorizationStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getBuildDirFor", "(Job)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getBuildDirFor", "(Job)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getCloud", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getComputer", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getComputers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getCrumbIssuer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDependencyGraph", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDescriptor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDescriptorList", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDescriptorOrDie", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getExtensionList", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getExtensionList", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getFingerprint", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getFingerprintMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getFutureDependencyGraph", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getGlobalNodeProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getHeapDump", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getItem", "(String,Item)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getItem", "(String,Item)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getItem", "(String,ItemGroup)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getItem", "(String,ItemGroup)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getItemMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getJDK", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getJDKs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getJnlpJars", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabel", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabel", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabel", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabelAtom", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabelAtom", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabelAtom", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabelAtoms", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLabels", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getLog", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getMarkupFormatter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getMyViewsTabBar", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getNode", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getNodesObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getPeople", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getPluginManager", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getProjectNamingStrategy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getProxy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getQuietDownReason", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getRawBuildsDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getRawWorkspaceDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getSCMListeners", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getSecretKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getSecurityRealm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getSetupWizard", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getSystemMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getTcpSlaveAgentListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getTopLevelItemNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getUpdateCenter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getUser", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "getWidgets", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "putItem", "(TopLevelItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "rebuildDependencyGraphAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setAuthorizationStrategy", "(AuthorizationStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setCrumbIssuer", "(CrumbIssuer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setInstallState", "(InstallState)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setJDKs", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setLog", "(LogRecorderManager)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setMarkupFormatter", "(MarkupFormatter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setMyViewsTabBar", "(MyViewsTabBar)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setPrimaryView", "(View)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setProjectNamingStrategy", "(ProjectNamingStrategy)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setProxy", "(ProxyConfiguration)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setRawBuildsDir", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setSecurityRealm", "(SecurityRealm)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setSystemMessage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Jenkins", true, "setViewsTabBar", "(ViewsTabBar)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", true, "getAdminAddress", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", true, "setAdminAddress", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", true, "setUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(Action)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(Computer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(Job)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(MenuItem)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(MenuItem)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(Node)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(String,String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(String,String,String,String,boolean,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(String,String,String,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "add", "(String,String,String,boolean,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "addAll", "(Collection)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "addHeader", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "addSeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "from", "(ModelObjectWithContextMenu,StaplerRequest,StaplerResponse)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$ContextMenu", true, "from", "(ModelObjectWithContextMenu,StaplerRequest,StaplerResponse,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "MenuItem", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "getIconXml", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withContextRelativeUrl", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withContextRelativeUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withDisplayName", "(ModelObject)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withDisplayName", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withIcon", "(BallColor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withIcon", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withIcon", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withIconClass", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withStockIcon", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withStockIcon", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu$MenuItem", true, "withUrl", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.model", "ModifiableTopLevelItemGroup", true, "createProject", "(TopLevelItemDescriptor,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Nodes", true, "addNode", "(Node)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "Nodes", true, "getNode", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "Nodes", true, "getNodes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", true, "extendSearchIndex", "(SearchIndexBuilder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", true, "scheduleBuild2", "(Job,int,Action[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy", false, "PatternProjectNamingStrategy", "(String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy", false, "PatternProjectNamingStrategy", "(String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy", false, "PatternProjectNamingStrategy", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy", false, "getDescription", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy", false, "getNamePattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "RunAction2", true, "onAttached", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "RunAction2", true, "onLoad", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "SimpleGlobalBuildDiscarderStrategy", true, "SimpleGlobalBuildDiscarderStrategy", "(BuildDiscarder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.model", "SimpleGlobalBuildDiscarderStrategy", true, "getDiscarder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.model", "StandardArtifactManager", true, "StandardArtifactManager", "(Run)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.mvn", "FilePathGlobalSettingsProvider", true, "FilePathGlobalSettingsProvider", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.mvn", "FilePathGlobalSettingsProvider", true, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "FilePathSettingsProvider", true, "FilePathSettingsProvider", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.mvn", "FilePathSettingsProvider", true, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalMavenConfig", true, "getGlobalSettingsProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalMavenConfig", true, "getSettingsProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalMavenConfig", true, "setGlobalSettingsProvider", "(GlobalSettingsProvider)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalMavenConfig", true, "setSettingsProvider", "(SettingsProvider)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "getSettingsFilePath", "(GlobalSettingsProvider,AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "getSettingsFilePath", "(GlobalSettingsProvider,AbstractBuild,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "getSettingsRemotePath", "(GlobalSettingsProvider,AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "getSettingsRemotePath", "(GlobalSettingsProvider,AbstractBuild,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "supplySettings", "(AbstractBuild,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", true, "supplySettings", "(AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "getSettingsFilePath", "(SettingsProvider,AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "getSettingsFilePath", "(SettingsProvider,AbstractBuild,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "getSettingsRemotePath", "(SettingsProvider,AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "getSettingsRemotePath", "(SettingsProvider,AbstractBuild,TaskListener)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "supplySettings", "(AbstractBuild,TaskListener)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", true, "supplySettings", "(AbstractBuild,TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator$Item", true, "Item", "(ArrayType,String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", true, "getInstance", "(boolean,List)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", true, "getOverrides", "(ArrayType)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", true, "match", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", true, "validate", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(RegexValidator,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],RegexValidator,long)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],RegexValidator,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],RegexValidator,long,DomainValidator)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],RegexValidator,long,DomainValidator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],RegexValidator,long,DomainValidator)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", true, "UrlValidator", "(String[],long)", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil$DetachedPlugin", false, "getShortName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil$DetachedPlugin", false, "getSplitWhen", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil$DetachedPlugin", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil", true, "configLines", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats$SingleTokenStats", true, "getLastUseDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats$SingleTokenStats", true, "getTokenUuid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "findTokenStatsById", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "findTokenStatsById", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "load", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "load", "(User)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "updateUsageForId", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", true, "updateUsageForId", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "buildNew", "(String,HashValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "buildNew", "(String,HashValue)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "buildNewFromLegacy", "(HashValue,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "getCreationDate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "getUuid", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "rename", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", true, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", true, "findMatchingToken", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", true, "getLegacyToken", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", true, "getTokenListSortedByName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", true, "revokeToken", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", true, "getLegacyStatsOf", "(User,HashedToken)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.apitoken", "TokenUuidAndPlainValue", true, "TokenUuidAndPlainValue", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.apitoken", "TokenUuidAndPlainValue", true, "TokenUuidAndPlainValue", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.seed", "UserSeedProperty", true, "getSeed", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "add", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "add", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "addBlacklistSignature", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "addBlacklistSignature", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "remove", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", true, "removeBlacklistSignature", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$TokenInfoAndStats", true, "TokenInfoAndStats", "(HashedToken,SingleTokenStats)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$TokenInfoAndStats", true, "TokenInfoAndStats", "(HashedToken,SingleTokenStats)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", true, "getTokenStats", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", true, "getTokenStore", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "BasicApiTokenHelper", true, "isConnectingUsingApiToken", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "BasicHeaderProcessor", true, "setAuthenticationEntryPoint", "(AuthenticationEntryPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "BasicHeaderProcessor", true, "setRememberMeServices", "(RememberMeServices)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ConfidentialKey", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", true, "CryptoConfidentialKey", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", true, "CryptoConfidentialKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "DefaultConfidentialStore", true, "DefaultConfidentialStore", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", true, "HMACConfidentialKey", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", true, "HMACConfidentialKey", "(Class,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", true, "HMACConfidentialKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", true, "HMACConfidentialKey", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HexStringConfidentialKey", true, "HexStringConfidentialKey", "(Class,String,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HexStringConfidentialKey", true, "HexStringConfidentialKey", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "HexStringConfidentialKey", true, "get", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingExecutorService", false, "ImpersonatingExecutorService", "(ExecutorService,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingExecutorService", false, "ImpersonatingExecutorService", "(ExecutorService,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingScheduledExecutorService", false, "ImpersonatingScheduledExecutorService", "(ScheduledExecutorService,Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingScheduledExecutorService", false, "ImpersonatingScheduledExecutorService", "(ScheduledExecutorService,Authentication)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingUserDetailsService2", true, "ImpersonatingUserDetailsService2", "(UserDetailsService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ImpersonatingUserDetailsService", true, "ImpersonatingUserDetailsService", "(UserDetailsService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "NonSerializableSecurityContext", true, "NonSerializableSecurityContext", "(Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "NonSerializableSecurityContext", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticatorConfiguration", true, "getAuthenticators", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "RSAConfidentialKey", true, "getPublicKey", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "RSADigitalSignatureConfidentialKey", true, "RSADigitalSignatureConfidentialKey", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "RSADigitalSignatureConfidentialKey", true, "RSADigitalSignatureConfidentialKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", false, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", false, "setUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "ResourceDomainRootAction", true, "getDynamic", "(String,StaplerRequest,StaplerResponse)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "ResourceDomainRootAction", true, "getRedirectUrl", "(Token,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "ResourceDomainRootAction", true, "getToken", "(DirectoryBrowserSupport,StaplerRequest)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "SecurityContextExecutorService", true, "SecurityContextExecutorService", "(ExecutorService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", true, "getIgnoredWarnings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", true, "setIgnoredWarnings", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.security", "UserDetailsCache", false, "getCached", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.security", "UserDetailsCache", false, "loadUserByUsername", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "EncryptedSlaveAgentJnlpFile", true, "EncryptedSlaveAgentJnlpFile", "(AccessControlled,String,String,Permission)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "EncryptedSlaveAgentJnlpFile", true, "EncryptedSlaveAgentJnlpFile", "(AccessControlled,String,String,Permission)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "EncryptedSlaveAgentJnlpFile", true, "EncryptedSlaveAgentJnlpFile", "(AccessControlled,String,String,Permission)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "EncryptedSlaveAgentJnlpFile", true, "EncryptedSlaveAgentJnlpFile", "(AccessControlled,String,String,Permission)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "IOHubProvider", true, "getHub", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "NioChannelSelector", true, "getHub", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "RemotingWorkDirSettings", "(boolean,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "RemotingWorkDirSettings", "(boolean,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "getInternalDir", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "getWorkDirPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "toCommandLineArgs", "(SlaveComputer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", true, "toCommandLineString", "(SlaveComputer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", true, "getVariables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", true, "setVariables", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "EnvVarsFilterException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "getRule", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "withRule", "(EnvVarsFilterRule)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "withRule", "(EnvVarsFilterRule)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "withVariable", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterException", true, "withVariable", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleContext", true, "EnvVarsFilterRuleContext", "(Launcher,TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleContext", true, "EnvVarsFilterRuleContext", "(Launcher,TaskListener)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleContext", true, "getLauncher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleContext", true, "getTaskListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleWrapper", true, "EnvVarsFilterRuleWrapper", "(List)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleWrapper", true, "createRuleWrapper", "(Run,Object,Launcher,List)", "", "Argument[3].Element", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterableBuilder", true, "buildEnvVarsFilterRules", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Context", false, "env", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Context", false, "env", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Context", false, "getDisposer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Context", false, "getEnv", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Context", false, "setDisposer", "(Disposer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.telemetry", "Correlator", true, "getCorrelationId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "ReverseBuildTrigger", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "ReverseBuildTrigger", "(String,Result)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "ReverseBuildTrigger", "(String,Result)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "getThreshold", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "getUpstreamProjects", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger", false, "setThreshold", "(Result)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem$SCMTriggerItems", true, "asSCMTriggerItem", "(Item)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem$SCMTriggerItems", true, "resolveMultiScmIfConfigured", "(SCM)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", true, "asItem", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", true, "getSCMs", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.triggers", "TriggeredItem", true, "getTriggers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.antlr", "JenkinsANTLRErrorListener", true, "JenkinsANTLRErrorListener", "(Supplier)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "GroovyHookScript", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "GroovyHookScript", "(String,ServletContext,File,ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "GroovyHookScript", "(String,ServletContext,File,ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "GroovyHookScript", "(String,ServletContext,File,ClassLoader)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "GroovyHookScript", "(String,ServletContext,File,ClassLoader)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "bind", "(String,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", true, "getBindings", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", true, "CompositeIOException", "(String,IOException[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", true, "CompositeIOException", "(String,IOException[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", true, "CompositeIOException", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", true, "CompositeIOException", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", true, "getExceptions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.io", "FileBoolean", true, "FileBoolean", "(Class,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "FileBoolean", true, "FileBoolean", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.io", "PathRemover$RetryStrategy", true, "failureMessage", "(Path,int)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.io", "PathRemover", true, "newFilteredRobustRemover", "(PathChecker,int,boolean,long)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.io", "PathRemover", true, "newRemoverWithStrategy", "(RetryStrategy)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xml", "FilteredFunctionContext", true, "FilteredFunctionContext", "(Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM$WriterImpl", true, "getOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,List)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,String)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "XStreamDOM", "(String,Map,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "expandMacro", "(VariableResolver)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "expandMacro", "(VariableResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "expandMacro", "(VariableResolver)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getAttribute", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getAttribute", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getAttributeMap", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getChildren", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getTagName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", true, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "AntClassLoader", true, "addPathFiles", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "AtmostOneTaskExecutor", true, "AtmostOneTaskExecutor", "(Callable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "AtmostOneTaskExecutor", true, "AtmostOneTaskExecutor", "(ExecutorService,Callable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "AtmostOneTaskExecutor", true, "AtmostOneTaskExecutor", "(ExecutorService,Callable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "AtmostOneTaskExecutor", true, "submit", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "BuildListenerAdapter", false, "BuildListenerAdapter", "(TaskListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "BuildListenerAdapter", false, "wrap", "(TaskListener)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "ContextResettingExecutorService", true, "ContextResettingExecutorService", "(ExecutorService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "ErrorLoggingExecutorService", true, "ErrorLoggingExecutorService", "(ExecutorService)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "JSONSignatureValidator", true, "JSONSignatureValidator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "MemoryReductionUtil", true, "internInPlace", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "NonLocalizable", true, "NonLocalizable", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "NonLocalizable", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "ServerTcpPort", true, "ServerTcpPort", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.util", "SystemProperties", true, "getString", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "SystemProperties", true, "getString", "(String,String,Level)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "TreeString", false, "of", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "TreeString", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "TreeString", false, "toString", "(TreeString)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "TreeStringBuilder", true, "intern", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "TreeStringBuilder", true, "intern", "(TreeString)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "child", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "child", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "forFile", "(File)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "forFilePath", "(FilePath)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "getParent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "list", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "list", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "list", "(String,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "list", "(String,String,boolean,boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "list", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "listOnlyDescendants", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "readLink", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.util", "VirtualFile", true, "toURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", true, "getProviderSession", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", true, "onWebSocketConnect", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.widgets", "HistoryPageEntry", true, "HistoryPageEntry", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.widgets", "HistoryPageEntry", true, "getEntry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", true, "setSearchString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins.widgets", "RunListProgressiveRendering", true, "setBuilds", "(Iterable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins", "ExtensionRefreshException", true, "ExtensionRefreshException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins", "MissingDependencyException", true, "MissingDependencyException", "(String,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins", "MissingDependencyException", true, "MissingDependencyException", "(String,List)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["jenkins", "MissingDependencyException", true, "getMissingDependencies", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins", "MissingDependencyException", true, "getPluginShortName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["jenkins", "RestartRequiredException", true, "RestartRequiredException", "(Localizable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["jenkins", "RestartRequiredException", true, "RestartRequiredException", "(Localizable,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "GrantedAuthoritySid", true, "GrantedAuthoritySid", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "GrantedAuthoritySid", true, "getGrantedAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "GrantedAuthoritySid", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "PrincipalSid", true, "PrincipalSid", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "PrincipalSid", true, "getPrincipal", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.acls.sid", "PrincipalSid", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", true, "getAuthentication", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", true, "setAuthentication", "(Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.providers.anonymous", "AnonymousAuthenticationToken", true, "AnonymousAuthenticationToken", "(AnonymousAuthenticationToken)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.providers", "AbstractAuthenticationToken", true, "setDetails", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.providers", "UsernamePasswordAuthenticationToken", true, "UsernamePasswordAuthenticationToken", "(UsernamePasswordAuthenticationToken)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.ui.rememberme", "RememberMeServices", true, "fromSpring", "(RememberMeServices)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.ui.rememberme", "RememberMeServices", true, "toSpring", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,GrantedAuthority[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,GrantedAuthority[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,GrantedAuthority[])", "", "Argument[3].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[5].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "User", "(String,String,boolean,boolean,boolean,boolean,GrantedAuthority[])", "", "Argument[6].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "User", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "fromSpring", "(UserDetails)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "fromSpringPrincipal", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "getAuthorities", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "getPassword", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "getUsername", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "toSpring", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", true, "toSpringPrincipal", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetailsService", true, "loadUserByUsername", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity.userdetails", "UsernameNotFoundException", true, "UsernameNotFoundException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "AccountExpiredException", true, "AccountExpiredException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "AcegiSecurityException", true, "toSpring", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "Authentication", true, "fromSpring", "(Authentication)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "Authentication", true, "getAuthorities", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "Authentication", true, "getDetails", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "Authentication", true, "toSpring", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "AuthenticationException", true, "fromSpring", "(AuthenticationException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "AuthenticationException", true, "getAuthentication", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "AuthenticationException", true, "getExtraInformation", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "AuthenticationException", true, "setAuthentication", "(Authentication)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "BadCredentialsException", true, "BadCredentialsException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "CredentialsExpiredException", true, "CredentialsExpiredException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "DisabledException", true, "DisabledException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "GrantedAuthority", true, "getAuthority", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "GrantedAuthorityImpl", true, "GrantedAuthorityImpl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.acegisecurity", "GrantedAuthorityImpl", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.acegisecurity", "LockedException", true, "LockedException", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", true, "BuildStatusIcon", "(String,String,String,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconFormat)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconFormat)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconFormat)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType,IconFormat)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType,IconFormat)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "Icon", "(String,String,String,IconType,IconFormat)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getClassSpec", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getNormalizedSelector", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getQualifiedUrl", "(JellyContext)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getQualifiedUrl", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getQualifiedUrl", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getStyle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "toNormalizedCSSSelector", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "toNormalizedIconName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "toNormalizedIconNameClass", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "toNormalizedIconSizeClass", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", true, "toNormalizedIconUrl", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "addIcon", "(Icon)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "addIcon", "(Icon)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "getCoreIcons", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "getIconByClassSpec", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "getIconByNormalizedCSSSelector", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", true, "getIconByUrl", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconType", false, "toQualifiedUrl", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "IconType", false, "toQualifiedUrl", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "WeatherIcon", true, "WeatherIcon", "(String,String,Status)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.icon", "WeatherIcon", true, "WeatherIcon", "(String,String,Status)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "build", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getClasses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getHtmlTooltip", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getPluginName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getRaw", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "getTooltip", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withClasses", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withClasses", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withHtmlTooltip", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withHtmlTooltip", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withId", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withName", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withPluginName", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withPluginName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withRaw", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withRaw", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withTitle", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withTitle", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withTooltip", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest$Builder", true, "withTooltip", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getClasses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getHtmlTooltip", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getPluginName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getTitle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.jenkins.ui.symbol", "SymbolRequest", false, "getTooltip", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["antlr", "ANTLRException", "ANTLRException", "(String,Throwable)", "summary", "df-generated"] + - ["antlr", "ANTLRException", "ANTLRException", "(Throwable)", "summary", "df-generated"] + - ["executable", "Main", "whoAmI", "(File)", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "CLI_BadAuth", "()", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "CLI_NoSuchFileExists", "(Object)", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "CLI_NoURL", "()", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "CLI_Usage", "()", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "_CLI_BadAuth", "()", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "_CLI_NoSuchFileExists", "(Object)", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "_CLI_NoURL", "()", "summary", "df-generated"] + - ["hudson.cli.client", "Messages", "_CLI_Usage", "()", "summary", "df-generated"] + - ["hudson.cli.handlers", "AbstractItemOptionHandler", "AbstractItemOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "AbstractProjectOptionHandler", "AbstractProjectOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "JobOptionHandler", "JobOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "NodeOptionHandler", "NodeOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "ParameterizedJobOptionHandler", "ParameterizedJobOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "TopLevelItemOptionHandler", "TopLevelItemOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "ViewOptionHandler", "ViewOptionHandler", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.cli.handlers", "ViewOptionHandler", "getView", "(String)", "summary", "df-generated"] + - ["hudson.cli", "CLI", "_main", "(String[])", "summary", "df-generated"] + - ["hudson.cli", "CLI", "loadKey", "(File)", "summary", "df-generated"] + - ["hudson.cli", "CLI", "loadKey", "(File,String)", "summary", "df-generated"] + - ["hudson.cli", "CLI", "loadKey", "(String)", "summary", "df-generated"] + - ["hudson.cli", "CLI", "loadKey", "(String,String)", "summary", "df-generated"] + - ["hudson.cli", "CLIAction", "doCommand", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.cli", "CLIAction", "doWs", "()", "summary", "df-generated"] + - ["hudson.cli", "CLIAction", "isWebSocketSupported", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "all", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "checkChannel", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "clone", "(String)", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getCurrent", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getLongDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getName", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getSingleLineSummary", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "getUsage", "()", "summary", "df-generated"] + - ["hudson.cli", "CLICommand", "setClientCharset", "(Charset)", "summary", "df-generated"] + - ["hudson.cli", "CliTransportAuthenticator", "all", "()", "summary", "df-generated"] + - ["hudson.cli", "CliTransportAuthenticator", "authenticate", "(String,Channel,Connection)", "summary", "df-generated"] + - ["hudson.cli", "CliTransportAuthenticator", "supportsProtocol", "(String)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "Connection", "(Socket)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "close", "()", "summary", "df-generated"] + - ["hudson.cli", "Connection", "diffieHellman", "(boolean)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "diffieHellman", "(boolean,int)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "encryptConnection", "(SecretKey,String)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "fold", "(byte[],int)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "proveIdentity", "(byte[],KeyPair)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "readBoolean", "()", "summary", "df-generated"] + - ["hudson.cli", "Connection", "readKey", "()", "summary", "df-generated"] + - ["hudson.cli", "Connection", "readObject", "()", "summary", "df-generated"] + - ["hudson.cli", "Connection", "verifyIdentity", "(byte[])", "summary", "df-generated"] + - ["hudson.cli", "Connection", "writeBoolean", "(boolean)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "writeKey", "(Key)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "writeObject", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Connection", "writeUTF", "(String)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "AddJobToViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "BuildCommand_CLICause_CannotBuildConfigNotSaved", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "BuildCommand_CLICause_CannotBuildDisabled", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "BuildCommand_CLICause_CannotBuildUnknownReasons", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "BuildCommand_CLICause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "BuildCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CancelQuietDownCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ClearQueueCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CliProtocol2_displayName", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CliProtocol_displayName", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ConnectNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ConsoleCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CopyJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CreateJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CreateNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "CreateViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DeleteBuildsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DeleteJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DeleteNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DeleteViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DisablePluginCommand_NoSuchStrategy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DisablePluginCommand_PrintUsageSummary", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DisablePluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DisablePluginCommand_StatusMessage", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "DisconnectNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "EnablePluginCommand_MissingDependencies", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "EnablePluginCommand_NoSuchPlugin", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "EnablePluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "GetJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "GetNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "GetViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "GroovyCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "GroovyshCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "HelpCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_DidYouMean", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_InstallingFromUpdateCenter", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_InstallingPluginFromLocalFile", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_InstallingPluginFromStdin", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_InstallingPluginFromUrl", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_NoUpdateCenterDefined", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_NoUpdateDataRetrieved", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_NotAValidSourceName", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "InstallPluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ListChangesCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ListJobsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ListPluginsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "OfflineNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "OnlineNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "QuietDownCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ReloadConfigurationCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "ReloadJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "RemoveJobFromViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "SessionIdCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "SetBuildDescriptionCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "SetBuildDisplayNameCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "UpdateJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "UpdateNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "UpdateViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "VersionCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "WaitNodeOfflineCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "WaitNodeOnlineCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "WhoAmICommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_AddJobToViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_BuildCommand_CLICause_CannotBuildConfigNotSaved", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_BuildCommand_CLICause_CannotBuildDisabled", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_BuildCommand_CLICause_CannotBuildUnknownReasons", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_BuildCommand_CLICause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_BuildCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CancelQuietDownCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ClearQueueCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CliProtocol2_displayName", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CliProtocol_displayName", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ConnectNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ConsoleCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CopyJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CreateJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CreateNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_CreateViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DeleteBuildsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DeleteJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DeleteNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DeleteViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DisablePluginCommand_NoSuchStrategy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DisablePluginCommand_PrintUsageSummary", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DisablePluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DisablePluginCommand_StatusMessage", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_DisconnectNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_EnablePluginCommand_MissingDependencies", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_EnablePluginCommand_NoSuchPlugin", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_EnablePluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_GetJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_GetNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_GetViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_GroovyCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_GroovyshCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_HelpCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_DidYouMean", "(Object,Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_InstallingFromUpdateCenter", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_InstallingPluginFromLocalFile", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_InstallingPluginFromStdin", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_InstallingPluginFromUrl", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_NoUpdateCenterDefined", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_NoUpdateDataRetrieved", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_NotAValidSourceName", "(Object)", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_InstallPluginCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ListChangesCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ListJobsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ListPluginsCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_OfflineNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_OnlineNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_QuietDownCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ReloadConfigurationCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_ReloadJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_RemoveJobFromViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_SessionIdCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_SetBuildDescriptionCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_SetBuildDisplayNameCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_UpdateJobCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_UpdateNodeCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_UpdateViewCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_VersionCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_WaitNodeOfflineCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_WaitNodeOnlineCommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "Messages", "_WhoAmICommand_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", "hasKeys", "()", "summary", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", "loadKey", "(File,String)", "summary", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", "loadKey", "(String,String)", "summary", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", "readFrom", "(File)", "summary", "df-generated"] + - ["hudson.cli", "PrivateKeyProvider", "readFromDefaultLocations", "()", "summary", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", "doProgressiveHtml", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", "doProgressiveText", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", "writeHtmlTo", "(long,Writer)", "summary", "df-generated"] + - ["hudson.console", "AnnotatedLargeText", "writeRawLogTo", "(long,OutputStream)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotationDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotationDescriptor", "doScriptJs", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotationDescriptor", "doStyleCss", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotationDescriptor", "hasScript", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotationDescriptor", "hasStylesheet", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotator", "_for", "(Object)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotator", "annotate", "(Object,MarkupText)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotator", "initial", "(Object)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "all", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "doScriptJs", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "doStyleCss", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "hasScript", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "hasStylesheet", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "newInstance", "(Object)", "summary", "df-generated"] + - ["hudson.console", "ConsoleAnnotatorFactory", "type", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleLogFilter", "all", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "annotate", "(Object,MarkupText,int)", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "encode", "()", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "encodeTo", "(OutputStream)", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "encodeTo", "(Writer)", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "findPreamble", "(byte[],int,int)", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "readFrom", "(DataInputStream)", "summary", "df-generated"] + - ["hudson.console", "ConsoleNote", "skip", "(DataInputStream)", "summary", "df-generated"] + - ["hudson.console", "ExpandableDetailsNote", "encodeTo", "(String,String)", "summary", "df-generated"] + - ["hudson.console", "LineTransformationOutputStream", "forceEol", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor$Solution", "all", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor", "doAct", "(String)", "summary", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor", "get", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor", "getSolution", "(String)", "summary", "df-generated"] + - ["hudson.diagnosis", "HudsonHomeDiskUsageMonitor", "getSolutions", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "HsErrPidList_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "HudsonHomeDiskUsageMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "MemoryUsageMonitor_TOTAL", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "MemoryUsageMonitor_USED", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "NullIdDescriptorMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "OldDataMonitor_Description", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "OldDataMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "OldDataMonitor_OldDataTooltip", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "ReverseProxySetupMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "TooManyJobsButNoView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_HsErrPidList_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_HudsonHomeDiskUsageMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_MemoryUsageMonitor_TOTAL", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_MemoryUsageMonitor_USED", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_NullIdDescriptorMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_OldDataMonitor_Description", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_OldDataMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_OldDataMonitor_OldDataTooltip", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_ReverseProxySetupMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "Messages", "_TooManyJobsButNoView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "NullIdDescriptorMonitor", "verify", "()", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor$VersionRange", "isOld", "(int)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "doDiscard", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "doIndex", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "doUpgrade", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "report", "(Saveable,Collection)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "report", "(Saveable,String)", "summary", "df-generated"] + - ["hudson.diagnosis", "OldDataMonitor", "report", "(UnmarshallingContext,String)", "summary", "df-generated"] + - ["hudson.diagnosis", "ReverseProxySetupMonitor", "doAct", "(String)", "summary", "df-generated"] + - ["hudson.diagnosis", "ReverseProxySetupMonitor", "getTestForReverseProxySetup", "(String)", "summary", "df-generated"] + - ["hudson.diagnosis", "TooManyJobsButNoView", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "WorkspaceSnapshotSCM_IncorrectJobType", "(Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "WorkspaceSnapshotSCM_NoBuild", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "WorkspaceSnapshotSCM_NoSuchJob", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "WorkspaceSnapshotSCM_NoSuchPermalink", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "WorkspaceSnapshotSCM_NoWorkspace", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "_WorkspaceSnapshotSCM_IncorrectJobType", "(Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "_WorkspaceSnapshotSCM_NoBuild", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "_WorkspaceSnapshotSCM_NoSuchJob", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "_WorkspaceSnapshotSCM_NoSuchPermalink", "(Object,Object)", "summary", "df-generated"] + - ["hudson.fsp", "Messages", "_WorkspaceSnapshotSCM_NoWorkspace", "(Object,Object)", "summary", "df-generated"] + - ["hudson.init.impl", "GroovyInitScript", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.init.impl", "InitialUserContent", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.init.impl", "InstallUncaughtExceptionHandler", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.init.impl", "Messages", "GroovyInitScript_init", "()", "summary", "df-generated"] + - ["hudson.init.impl", "Messages", "InitialUserContent_init", "()", "summary", "df-generated"] + - ["hudson.init.impl", "Messages", "_GroovyInitScript_init", "()", "summary", "df-generated"] + - ["hudson.init.impl", "Messages", "_InitialUserContent_init", "()", "summary", "df-generated"] + - ["hudson.init", "InitMilestone", "ordering", "()", "summary", "df-generated"] + - ["hudson.init", "InitMilestone", "toString", "()", "summary", "df-generated"] + - ["hudson.init", "InitStrategy", "get", "(ClassLoader)", "summary", "df-generated"] + - ["hudson.init", "InitStrategy", "listPluginArchives", "(PluginManager)", "summary", "df-generated"] + - ["hudson.init", "InitStrategy", "skipInitTask", "(Task)", "summary", "df-generated"] + - ["hudson.init", "TaskMethodFinder$TaskImpl", "toString", "()", "summary", "df-generated"] + - ["hudson.init", "TermMilestone", "ordering", "()", "summary", "df-generated"] + - ["hudson.init", "TermMilestone", "toString", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "canRestart", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "canRewriteHudsonWar", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "get", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "getHudsonWar", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "onExtendTimeout", "(long,TimeUnit)", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "onReady", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "onReload", "(String,String)", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "onStatusUpdate", "(String)", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "onStop", "(String,String)", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "restart", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "rewriteHudsonWar", "(File)", "summary", "df-generated"] + - ["hudson.lifecycle", "Lifecycle", "verifyRestartable", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsInstallerLink_Description", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsInstallerLink_DisplayName", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsSlaveInstaller_ConfirmInstallation", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsSlaveInstaller_DotNetRequired", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsSlaveInstaller_InstallationSuccessful", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "WindowsSlaveInstaller_RootFsDoesntExist", "(Object)", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsInstallerLink_Description", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsInstallerLink_DisplayName", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsSlaveInstaller_ConfirmInstallation", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsSlaveInstaller_DotNetRequired", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsSlaveInstaller_InstallationSuccessful", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "Messages", "_WindowsSlaveInstaller_RootFsDoesntExist", "(Object)", "summary", "df-generated"] + - ["hudson.lifecycle", "RestartNotSupportedException", "RestartNotSupportedException", "(String,Throwable)", "summary", "df-generated"] + - ["hudson.lifecycle", "WindowsInstallerLink", "doRestart", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.lifecycle", "WindowsInstallerLink", "isInstalled", "()", "summary", "df-generated"] + - ["hudson.lifecycle", "WindowsInstallerLink", "registerIfApplicable", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", "disable", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", "enable", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", "getLevel", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", "includes", "(LogRecord)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder$Target", "matches", "(LogRecord)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doAutoCompleteLoggerName", "(String)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doCheckName", "(String,String)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doClear", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doDoDelete", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "doRss", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "getLogRecords", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "getParent", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "getSlaveLogRecords", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorder", "load", "()", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "doCheckNewName", "(String)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "doConfigLogger", "(String,String)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "doNewLogRecorder", "(String)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "doRss", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.logging", "LogRecorderManager", "load", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "LogRecorderManager_DisplayName", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "LogRecorderManager_LoggerNotFound", "(Object)", "summary", "df-generated"] + - ["hudson.logging", "Messages", "LogRecorderManager_init", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "LogRecorder_Target_Empty_Warning", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "_LogRecorderManager_DisplayName", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "_LogRecorderManager_LoggerNotFound", "(Object)", "summary", "df-generated"] + - ["hudson.logging", "Messages", "_LogRecorderManager_init", "()", "summary", "df-generated"] + - ["hudson.logging", "Messages", "_LogRecorder_Target_Empty_Warning", "()", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatter", "doPreviewDescription", "(String)", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatter", "getHelpUrl", "()", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatter", "previewsNowNeedPostForSecurity2153", "(String,StaplerRequest)", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatter", "translate", "(String)", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatter", "translate", "(String,Writer)", "summary", "df-generated"] + - ["hudson.markup", "MarkupFormatterDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.markup", "Messages", "EscapedMarkupFormatter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.markup", "Messages", "_EscapedMarkupFormatter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAssignmentAction", "getAssignedLabel", "(SubTask)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "escape", "(String)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "findNearest", "(String)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "getApplicablePropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "getPropertiesList", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "load", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtom", "needsEscape", "(String)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtomProperty", "all", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelAtomProperty", "getActions", "(LabelAtom)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpression", "autoComplete", "(String)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpression", "validate", "(String)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpression", "validate", "(String,Item)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionLexer", "LabelExpressionLexer", "(CharStream)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$ExprContext", "EOF", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$ExprContext", "ExprContext", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$ExprContext", "term1", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term1Context", "IFF", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term1Context", "IFF", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term1Context", "Term1Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term1Context", "term2", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term1Context", "term2", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term2Context", "IMPLIES", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term2Context", "Term2Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term2Context", "term3", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term2Context", "term3", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term3Context", "OR", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term3Context", "OR", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term3Context", "Term3Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term3Context", "term4", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term3Context", "term4", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term4Context", "AND", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term4Context", "AND", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term4Context", "Term4Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term4Context", "term5", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term4Context", "term5", "(int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term5Context", "NOT", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term5Context", "Term5Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term5Context", "term6", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "ATOM", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "LPAREN", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "RPAREN", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "STRINGLITERAL", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "Term6Context", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser$Term6Context", "term1", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "LabelExpressionParser", "(TokenStream)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "expr", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term1", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term2", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term3", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term4", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term5", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParser", "term6", "()", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterExpr", "(ExprContext)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm1", "(Term1Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm2", "(Term2Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm3", "(Term3Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm4", "(Term4Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm5", "(Term5Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "enterTerm6", "(Term6Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitExpr", "(ExprContext)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm1", "(Term1Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm2", "(Term2Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm3", "(Term3Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm4", "(Term4Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm5", "(Term5Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelExpressionParserListener", "exitTerm6", "(Term6Context)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onAnd", "(And,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onAtom", "(LabelAtom,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onIff", "(Iff,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onImplies", "(Implies,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onNot", "(Not,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onOr", "(Or,Object)", "summary", "df-generated"] + - ["hudson.model.labels", "LabelVisitor", "onParen", "(Paren,Object)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "checkBeforeCopy", "(Item,ItemGroup)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "fireLocationChange", "(Item,String)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "fireOnCopied", "(Item,Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "fireOnCreated", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "fireOnDeleted", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "fireOnUpdated", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onBeforeShutdown", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onCheckCopy", "(Item,ItemGroup)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onCopied", "(Item,Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onCreated", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onDeleted", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onLoaded", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onLocationChanged", "(Item,String,String)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onRenamed", "(Item,String,String)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "onUpdated", "(Item)", "summary", "df-generated"] + - ["hudson.model.listeners", "ItemListener", "register", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "fireCompleted", "(Run,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "fireDeleted", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "fireFinalized", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "fireInitialize", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "fireStarted", "(Run,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "onCompleted", "(Run,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "onDeleted", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "onFinalized", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "onInitialize", "(Run)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "onStarted", "(Run,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "register", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "setUpEnvironment", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "RunListener", "unregister", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "onChangeLogParsed", "(AbstractBuild,BuildListener,ChangeLogSet)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "onChangeLogParsed", "(Run,SCM,TaskListener,ChangeLogSet)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "onCheckout", "(Run,SCM,FilePath,TaskListener,File,SCMRevisionState)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "register", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMListener", "unregister", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "fireBeforePolling", "(AbstractProject,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "firePollingFailed", "(AbstractProject,TaskListener,Throwable)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "firePollingSuccess", "(AbstractProject,TaskListener,PollingResult)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "onBeforePolling", "(AbstractProject,TaskListener)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "onPollingFailed", "(AbstractProject,TaskListener,Throwable)", "summary", "df-generated"] + - ["hudson.model.listeners", "SCMPollListener", "onPollingSuccess", "(AbstractProject,TaskListener,PollingResult)", "summary", "df-generated"] + - ["hudson.model.listeners", "SaveableListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SaveableListener", "fireOnChange", "(Saveable,XmlFile)", "summary", "df-generated"] + - ["hudson.model.listeners", "SaveableListener", "onChange", "(Saveable,XmlFile)", "summary", "df-generated"] + - ["hudson.model.listeners", "SaveableListener", "register", "()", "summary", "df-generated"] + - ["hudson.model.listeners", "SaveableListener", "unregister", "()", "summary", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", "fromMessage", "(Localizable)", "summary", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", "getShortDescription", "()", "summary", "df-generated"] + - ["hudson.model.queue", "CauseOfBlockage", "print", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model.queue", "Executables", "getEstimatedDurationFor", "(Executable)", "summary", "df-generated"] + - ["hudson.model.queue", "FoldableAction", "foldIntoExisting", "(Item,Task,List)", "summary", "df-generated"] + - ["hudson.model.queue", "FutureLoad", "FutureLoad", "(long,long,int)", "summary", "df-generated"] + - ["hudson.model.queue", "FutureLoad", "toString", "()", "summary", "df-generated"] + - ["hudson.model.queue", "LoadPredictor", "all", "()", "summary", "df-generated"] + - ["hudson.model.queue", "LoadPredictor", "predict", "(Computer,long,long)", "summary", "df-generated"] + - ["hudson.model.queue", "LoadPredictor", "predict", "(MappingWorksheet,Computer,long,long)", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorChunk", "canAccept", "(WorkChunk)", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorChunk", "capacity", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorSlot", "getExecutor", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$ExecutorSlot", "isAvailable", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", "execute", "(WorkUnitContext)", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", "get", "(int)", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", "isCompletelyValid", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", "isPartiallyValid", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$Mapping", "size", "()", "summary", "df-generated"] + - ["hudson.model.queue", "MappingWorksheet$WorkChunk", "applicableExecutorChunks", "()", "summary", "df-generated"] + - ["hudson.model.queue", "Messages", "QueueSorter_installDefaultQueueSorter", "()", "summary", "df-generated"] + - ["hudson.model.queue", "Messages", "_QueueSorter_installDefaultQueueSorter", "()", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "all", "()", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onEnterBlocked", "(BlockedItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onEnterBuildable", "(BuildableItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onEnterWaiting", "(WaitingItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onLeaveBlocked", "(BlockedItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onLeaveBuildable", "(BuildableItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onLeaveWaiting", "(WaitingItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueListener", "onLeft", "(LeftItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueSorter", "all", "()", "summary", "df-generated"] + - ["hudson.model.queue", "QueueSorter", "installDefaultQueueSorter", "()", "summary", "df-generated"] + - ["hudson.model.queue", "QueueSorter", "sortBlockedItems", "(List)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueSorter", "sortBuildableItems", "(List)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueTaskDispatcher", "all", "()", "summary", "df-generated"] + - ["hudson.model.queue", "QueueTaskDispatcher", "canRun", "(Item)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueTaskDispatcher", "canTake", "(Node,BuildableItem)", "summary", "df-generated"] + - ["hudson.model.queue", "QueueTaskDispatcher", "canTake", "(Node,Task)", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "getCreateItem", "()", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "getItem", "()", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "isAccepted", "()", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "isCreated", "()", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "isRefused", "()", "summary", "df-generated"] + - ["hudson.model.queue", "ScheduleResult", "refused", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "createExecutable", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "getAssignedLabel", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "getEstimatedDuration", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "getLastBuiltOn", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "getOwnerExecutable", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTask", "getSameNodeConstraint", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTaskContributor", "all", "()", "summary", "df-generated"] + - ["hudson.model.queue", "SubTaskContributor", "forProject", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model.queue", "Tasks", "getAuthenticationOf2", "(Task)", "summary", "df-generated"] + - ["hudson.model.queue", "Tasks", "getAuthenticationOf", "(Task)", "summary", "df-generated"] + - ["hudson.model.queue", "Tasks", "getDefaultAuthenticationOf", "(Task)", "summary", "df-generated"] + - ["hudson.model.queue", "Tasks", "getDefaultAuthenticationOf", "(Task,Item)", "summary", "df-generated"] + - ["hudson.model.queue", "WorkUnit", "isMainWork", "()", "summary", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", "synchronizeEnd", "(Executable,Throwable,long)", "summary", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", "synchronizeEnd", "(Executor,Executable,Throwable,long)", "summary", "df-generated"] + - ["hudson.model.queue", "WorkUnitContext", "synchronizeStart", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild$AbstractBuildExecution", "defaultCheckout", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild$DependencyChange", "getBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "doStop", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "doStop", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "due", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getAggregatedTestResultAction", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getBuildVariableResolver", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getBuildVariables", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getBuiltOn", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getDependencyChanges", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getDownstreamBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getDownstreamBuilds", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getDownstreamRelationship", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getSensitiveBuildVariables", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getTestResultAction", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getTransitiveUpstreamBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getUpUrl", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getUpstreamBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getUpstreamRelationship", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "getUpstreamRelationshipBuild", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractBuild", "hasChangeSetComputed", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractCIBase", "getNodes", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractCIBase", "getQueue", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "doCheckNewName", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "doConfigDotXml", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "doDoDelete", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "doReload", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "getPronoun", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "getTaskNoun", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "isNameEditable", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "resolveForCLI", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "updateByXml", "(Source)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "updateByXml", "(StreamSource)", "summary", "df-generated"] + - ["hudson.model", "AbstractItem", "writeConfigDotXml", "(OutputStream)", "summary", "df-generated"] + - ["hudson.model", "AbstractModelObject", "makeSearchIndex", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doAutoCompleteAssignedLabelString", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doAutoCompleteLabel", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doAutoCompleteUpstreamProjects", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doCheckAssignedLabelString", "(AbstractProject,String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doCheckCustomWorkspace", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "doCheckLabel", "(AbstractProject,String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "getApplicableSCMCheckoutStrategyDescriptors", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$AbstractProjectDescriptor", "validateLabelExpression", "(String,AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$LabelValidator", "check", "(AbstractProject,Label)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject$LabelValidator", "checkItem", "(Item,Label)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "blockBuildWhenDownstreamBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "blockBuildWhenUpstreamBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "checkout", "(AbstractBuild,Launcher,BuildListener,File)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "disable", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "doBuild", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "doBuildWithParameters", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "doCheckRetryCount", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "doDoWipeOutWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "enable", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "findNearest", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "findNearest", "(String,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getBuildTriggerUpstreamProjects", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getBuildingDownstream", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getBuildingUpstream", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getDelay", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getDownstreamProjects", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getDownstreamProjectsForApi", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getHasCustomQuietPeriod", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getJDK", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getModuleRoot", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getModuleRoots", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getProminentActions", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getPublishersList", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getRelationship", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getScmCheckoutRetryCount", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getSomeBuildWithWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getSomeWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getTransitiveDownstreamProjects", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getTransitiveUpstreamProjects", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getTrigger", "(Class)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getUpstreamProjects", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getUpstreamProjectsForApi", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "getWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "hasCustomScmCheckoutRetryCount", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "hasParticipant", "(User)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "isConfigurable", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "isFingerprintConfigured", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "poll", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "pollSCMChanges", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "removeTrigger", "(TriggerDescriptor)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "resolveForCLI", "(String)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "scheduleBuild2", "(int)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "scheduleBuild2", "(int,Cause)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "scheduleBuild2", "(int,Cause,Action[])", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "scheduleBuild2", "(int,Cause,Collection)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "scheduleBuild", "(int,Cause,Action[])", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "schedulePolling", "()", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setAssignedLabel", "(Label)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setAssignedNode", "(Node)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setBlockBuildWhenDownstreamBuilding", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setBlockBuildWhenUpstreamBuilding", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setConcurrentBuild", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "AbstractProject", "setQuietPeriod", "(Integer)", "summary", "df-generated"] + - ["hudson.model", "Action", "getIconFileName", "()", "summary", "df-generated"] + - ["hudson.model", "Action", "getUrlName", "()", "summary", "df-generated"] + - ["hudson.model", "Actionable", "getAction", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Actionable", "getActions", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Actionable", "removeAction", "(Action)", "summary", "df-generated"] + - ["hudson.model", "Actionable", "removeActions", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Actionable", "replaceActions", "(Class,Action)", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "all", "()", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "disable", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "doDisable", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "getRequiredPermission", "()", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "isActivated", "()", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "isEnabled", "()", "summary", "df-generated"] + - ["hudson.model", "AdministrativeMonitor", "isSecurity", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "all", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "doAperiodicRun", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "getInitialDelay", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "getNewInstance", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "getRecurrencePeriod", "()", "summary", "df-generated"] + - ["hudson.model", "AperiodicWork", "init", "()", "summary", "df-generated"] + - ["hudson.model", "Api", "doJson", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Api", "doPython", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Api", "doSchema", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Api", "doXml", "(StaplerRequest,StaplerResponse,String,String,String,int)", "summary", "df-generated"] + - ["hudson.model", "AsyncPeriodicWork", "execute", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", "ofJobNames", "(Class,String,Item,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "AutoCompletionCandidates", "ofJobNames", "(Class,String,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "BallColor", "getBaseColor", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "getHtmlBaseColor", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "getIconClassName", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "getIconName", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "getImage", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "isAnimated", "()", "summary", "df-generated"] + - ["hudson.model", "BallColor", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "BooleanParameterDefinition", "isDefaultValue", "()", "summary", "df-generated"] + - ["hudson.model", "BooleanParameterDefinition", "setDefaultValue", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "BuildAuthorizationToken", "checkPermission", "(AbstractProject,BuildAuthorizationToken,StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "BuildAuthorizationToken", "checkPermission", "(Job,BuildAuthorizationToken,StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "BuildAuthorizationToken", "create", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "BuildListener", "finished", "(Result)", "summary", "df-generated"] + - ["hudson.model", "BuildListener", "started", "(List)", "summary", "df-generated"] + - ["hudson.model", "BuildStepListener", "all", "()", "summary", "df-generated"] + - ["hudson.model", "BuildStepListener", "finished", "(AbstractBuild,BuildStep,BuildListener,boolean)", "summary", "df-generated"] + - ["hudson.model", "BuildStepListener", "started", "(AbstractBuild,BuildStep,BuildListener)", "summary", "df-generated"] + - ["hudson.model", "BuildTimelineWidget", "doData", "(StaplerRequest,long,long)", "summary", "df-generated"] + - ["hudson.model", "BuildVariableContributor", "all", "()", "summary", "df-generated"] + - ["hudson.model", "BuildVariableContributor", "buildVariablesFor", "(AbstractBuild,Map)", "summary", "df-generated"] + - ["hudson.model", "BuildableItem", "scheduleBuild", "()", "summary", "df-generated"] + - ["hudson.model", "BuildableItem", "scheduleBuild", "(Cause)", "summary", "df-generated"] + - ["hudson.model", "BuildableItem", "scheduleBuild", "(int)", "summary", "df-generated"] + - ["hudson.model", "BuildableItem", "scheduleBuild", "(int,Cause)", "summary", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause$DeeplyNestedUpstreamCause", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", "getUpstreamBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", "getUpstreamRun", "()", "summary", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", "pointsTo", "(Job)", "summary", "df-generated"] + - ["hudson.model", "Cause$UpstreamCause", "pointsTo", "(Run)", "summary", "df-generated"] + - ["hudson.model", "Cause", "getShortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Cause", "onLoad", "(Job,int)", "summary", "df-generated"] + - ["hudson.model", "Cause", "print", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "CauseAction", "findCause", "(Class)", "summary", "df-generated"] + - ["hudson.model", "CauseAction", "getShortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "CheckPoint", "block", "()", "summary", "df-generated"] + - ["hudson.model", "CheckPoint", "block", "(BuildListener,String)", "summary", "df-generated"] + - ["hudson.model", "CheckPoint", "report", "()", "summary", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition$DescriptorImpl", "doCheckChoices", "(String)", "summary", "df-generated"] + - ["hudson.model", "ChoiceParameterDefinition", "areValidChoices", "(String)", "summary", "df-generated"] + - ["hudson.model", "Computer$TerminationRequest", "getWhen", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "buildEnvironment", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "Computer", "cliConnect", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "Computer", "cliOnline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "countBusy", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "countExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "countIdle", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "currentComputer", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "disconnect", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "doChangeOfflineCause", "(String)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doConfigDotXml", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doDoDelete", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "doDumpExportTable", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doLaunchSlaveAgent", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doProgressiveLog", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doRssAll", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doRssFailed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doRssLatest", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doScript", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doScriptText", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Computer", "doToggleOffline", "(String)", "summary", "df-generated"] + - ["hudson.model", "Computer", "getAssignedLabels", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getCaption", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getChannel", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getConnectTime", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getDefaultCharset", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getDemandStartMilliseconds", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getIcon", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getIconAltText", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getIconClassName", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getIdleStartMilliseconds", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getLoadStatistics", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getLog", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getLogRecords", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getMonitorData", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getName", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getNode", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getNumExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getOfflineCauseReason", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getRetentionStrategy", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getSystemProperties", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getThreadDump", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getTiedJobs", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getTimeline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "getUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "interrupt", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isAcceptingTasks", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isConnecting", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isIdle", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isJnlpAgent", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isLaunchSupported", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isManualLaunchAllowed", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isOnline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isPartiallyIdle", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isTemporarilyOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "isUnix", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "launch", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "recordTermination", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "relocateOldLogs", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "resolveForCLI", "(String)", "summary", "df-generated"] + - ["hudson.model", "Computer", "setTemporarilyOffline", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "Computer", "updateByXml", "(InputStream)", "summary", "df-generated"] + - ["hudson.model", "Computer", "waitUntilOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Computer", "waitUntilOnline", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerPinger", "all", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerPinger", "checkIsReachable", "(InetAddress,int)", "summary", "df-generated"] + - ["hudson.model", "ComputerPinger", "isReachable", "(InetAddress,int)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet$DescriptorImpl", "doAutoCompleteCopyNewItemFrom", "(String)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "checkName", "(String)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "doCheckName", "(String)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "doConfigSubmit", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "doCreateItem", "(StaplerRequest,StaplerResponse,String,String,String)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "doDoCreateItem", "(StaplerRequest,StaplerResponse,String,String)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "doUpdateNow", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "do_launchAll", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getBusyExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getComputerNames", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getDynamic", "(String,StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getIdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getMonitors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getNodeMonitorDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getNonIgnoredMonitors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "getTotalExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "get_all", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "get_monitors", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "get_slaveNames", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "init", "()", "summary", "df-generated"] + - ["hudson.model", "ComputerSet", "initialize", "()", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", "pointsItself", "()", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph$Dependency", "shouldTriggerBuild", "(AbstractBuild,TaskListener,List)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "addDependency", "(AbstractProject,AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "addDependency", "(AbstractProject,Collection)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "addDependency", "(Collection,AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "addDependency", "(Dependency)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "addDependencyDeclarers", "(AbstractProject,Collection)", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "build", "()", "summary", "df-generated"] + - ["hudson.model", "DependencyGraph", "hasIndirectDependencies", "(AbstractProject,AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getApplicableDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getApplicableItemDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getEnumConstants", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getItemType", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getItemTypeDescriptor", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor$PropertyType", "getItemTypeDescriptorOrDie", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "bindJSON", "(StaplerRequest,Class,JSONObject)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "calcAutoCompleteSettings", "(String,Map)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "calcFillSettings", "(String,Map)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "configure", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "configure", "(StaplerRequest,JSONObject)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "doHelp", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "find", "(String)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getCategory", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getConfigPage", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getCurrentDescriptorByNameUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getDescriptorFullUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getDescriptorUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getGlobalConfigPage", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getId", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getJsonSafeClassName", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getKlass", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getRequiredGlobalConfigPagePermission", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getT", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "isInstance", "(Describable)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "isSubTypeOf", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "load", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "newInstance", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "newInstance", "(StaplerRequest,JSONObject)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "newInstancesFromHeteroList", "(StaplerRequest,JSONObject,String,Collection)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "newInstancesFromHeteroList", "(StaplerRequest,Object,Collection)", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Descriptor", "load", "()", "summary", "df-generated"] + - ["hudson.model", "DescriptorByNameOwner", "getDescriptorByName", "(String)", "summary", "df-generated"] + - ["hudson.model", "DescriptorVisibilityFilter", "all", "()", "summary", "df-generated"] + - ["hudson.model", "DescriptorVisibilityFilter", "filter", "(Object,Descriptor)", "summary", "df-generated"] + - ["hudson.model", "DescriptorVisibilityFilter", "filterType", "(Class,Descriptor)", "summary", "df-generated"] + - ["hudson.model", "DirectlyModifiableView", "doAddJobToView", "(String)", "summary", "df-generated"] + - ["hudson.model", "DirectlyModifiableView", "doRemoveJobFromView", "(String)", "summary", "df-generated"] + - ["hudson.model", "DirectlyModifiableView", "remove", "(TopLevelItem)", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "getIconClassName", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "getIconName", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "getLastModified", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "getLastModifiedAsCalendar", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "getSize", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "isFolder", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport$Path", "isReadable", "()", "summary", "df-generated"] + - ["hudson.model", "DirectoryBrowserSupport", "serveFile", "(StaplerRequest,StaplerResponse,FilePath,String,boolean)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "Downloadable", "(Class)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "all", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "get", "(Class)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "get", "(String)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "getData", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "getDue", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "getInterval", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "hasDuplicates", "(List,String)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "idFor", "(Class)", "summary", "df-generated"] + - ["hudson.model", "DownloadService$Downloadable", "updateNow", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService$DownloadableListener", "installListener", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService", "generateFragment", "()", "summary", "df-generated"] + - ["hudson.model", "DownloadService", "getById", "(String)", "summary", "df-generated"] + - ["hudson.model", "DownloadService", "loadJSON", "(URL)", "summary", "df-generated"] + - ["hudson.model", "DownloadService", "loadJSONHTML", "(URL)", "summary", "df-generated"] + - ["hudson.model", "Environment", "buildEnvVars", "(Map)", "summary", "df-generated"] + - ["hudson.model", "Environment", "create", "(EnvVars)", "summary", "df-generated"] + - ["hudson.model", "Environment", "tearDown", "(AbstractBuild,BuildListener)", "summary", "df-generated"] + - ["hudson.model", "EnvironmentContributor", "all", "()", "summary", "df-generated"] + - ["hudson.model", "EnvironmentContributor", "buildEnvironmentFor", "(Job,EnvVars,TaskListener)", "summary", "df-generated"] + - ["hudson.model", "EnvironmentContributor", "buildEnvironmentFor", "(Run,EnvVars,TaskListener)", "summary", "df-generated"] + - ["hudson.model", "EnvironmentList", "get", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Executor", "completedAsynchronous", "(Throwable)", "summary", "df-generated"] + - ["hudson.model", "Executor", "currentExecutor", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "doStop", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "doStop", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Executor", "doStopBuild", "(String)", "summary", "df-generated"] + - ["hudson.model", "Executor", "doYank", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getCauseOfDeath", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getElapsedTime", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getEstimatedDurationFor", "(Executable)", "summary", "df-generated"] + - ["hudson.model", "Executor", "getEstimatedRemainingTime", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getEstimatedRemainingTimeMillis", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getIdleStartMilliseconds", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getTimeSpentInQueue", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "getTimestampString", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "hasStopPermission", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isActive", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isBusy", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isDisplayCell", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isIdle", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isLikelyStuck", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "isParking", "()", "summary", "df-generated"] + - ["hudson.model", "Executor", "newImpersonatingProxy", "(Class,Object)", "summary", "df-generated"] + - ["hudson.model", "Executor", "of", "(Executable)", "summary", "df-generated"] + - ["hudson.model", "Executor", "recordCauseOfInterruption", "(Run,TaskListener)", "summary", "df-generated"] + - ["hudson.model", "ExecutorListener", "taskAccepted", "(Executor,Task)", "summary", "df-generated"] + - ["hudson.model", "ExecutorListener", "taskCompleted", "(Executor,Task,long)", "summary", "df-generated"] + - ["hudson.model", "ExecutorListener", "taskCompletedWithProblems", "(Executor,Task,long,Throwable)", "summary", "df-generated"] + - ["hudson.model", "ExecutorListener", "taskStarted", "(Executor,Task)", "summary", "df-generated"] + - ["hudson.model", "Failure", "generateResponse", "(StaplerRequest,StaplerResponse,Object,Throwable)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "belongsTo", "(Job)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "getJob", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "getNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "getRun", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "is", "(Job)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$BuildPtr", "is", "(Run)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "Range", "(int,int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "combine", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "contains", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "expandLeft", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "expandRight", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "getEnd", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "getStart", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "includes", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "intersect", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isAdjacentTo", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isBiggerThan", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isDisjoint", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isIndependent", "(Range)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isSingle", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "isSmallerThan", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$Range", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet$ConverterImpl", "serialize", "(RangeSet)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "add", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "addAll", "(int[])", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "fromString", "(String,boolean)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "includes", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "isEmpty", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "isSmallerThan", "(int)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "listNumbers", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "listNumbersReverse", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "max", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "min", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "removeAll", "(RangeSet)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint$RangeSet", "retainAll", "(RangeSet)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "delete", "(String)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getActions", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getFacet", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getFacets", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getSortedFacets", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getTimestampString", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "getXStream", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "isAlive", "()", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "load", "(String)", "summary", "df-generated"] + - ["hudson.model", "Fingerprint", "trim", "()", "summary", "df-generated"] + - ["hudson.model", "FingerprintCleanupThread", "invoke", "()", "summary", "df-generated"] + - ["hudson.model", "FingerprintMap", "isReady", "()", "summary", "df-generated"] + - ["hudson.model", "HealthReport", "getAggregatedReports", "()", "summary", "df-generated"] + - ["hudson.model", "HealthReport", "getScore", "()", "summary", "df-generated"] + - ["hudson.model", "HealthReport", "isAggregateReport", "()", "summary", "df-generated"] + - ["hudson.model", "HealthReport", "setScore", "(int)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "adminCheck", "()", "summary", "df-generated"] + - ["hudson.model", "Hudson", "adminCheck", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "doFieldCheck", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "doFieldCheck", "(String,String,String,String)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "doLogRss", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "doQuietDown", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "getInstance", "()", "summary", "df-generated"] + - ["hudson.model", "Hudson", "isAdmin", "()", "summary", "df-generated"] + - ["hudson.model", "Hudson", "isAdmin", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "Hudson", "isDarwin", "()", "summary", "df-generated"] + - ["hudson.model", "Hudson", "isWindows", "()", "summary", "df-generated"] + - ["hudson.model", "Hudson", "setSlaves", "(List)", "summary", "df-generated"] + - ["hudson.model", "Item", "delete", "()", "summary", "df-generated"] + - ["hudson.model", "Item", "getAbsoluteUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Item", "getAllJobs", "()", "summary", "df-generated"] + - ["hudson.model", "Item", "onCopiedFrom", "(Item)", "summary", "df-generated"] + - ["hudson.model", "Item", "onCreatedFromScratch", "()", "summary", "df-generated"] + - ["hudson.model", "ItemGroup", "getAllItems", "()", "summary", "df-generated"] + - ["hudson.model", "ItemGroup", "getAllItems", "(Class)", "summary", "df-generated"] + - ["hudson.model", "ItemGroup", "getAllItems", "(Class,Predicate)", "summary", "df-generated"] + - ["hudson.model", "ItemGroup", "onRenamed", "(Item,String,String)", "summary", "df-generated"] + - ["hudson.model", "ItemGroup", "getUrl", "()", "summary", "df-generated"] + - ["hudson.model", "ItemGroupMixIn", "copy", "(TopLevelItem,String)", "summary", "df-generated"] + - ["hudson.model", "ItemGroupMixIn", "createProjectFromXML", "(String,InputStream)", "summary", "df-generated"] + - ["hudson.model", "ItemVisitor", "onItem", "(Item)", "summary", "df-generated"] + - ["hudson.model", "ItemVisitor", "walk", "()", "summary", "df-generated"] + - ["hudson.model", "Items", "all2", "(Authentication,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "Items", "all", "()", "summary", "df-generated"] + - ["hudson.model", "Items", "all", "(Authentication,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "Items", "all", "(ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "Items", "currentlyUpdatingByXml", "()", "summary", "df-generated"] + - ["hudson.model", "Items", "findNearest", "(Class,String,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "Items", "fromNameList", "(ItemGroup,String,Class)", "summary", "df-generated"] + - ["hudson.model", "Items", "fromNameList", "(String,Class)", "summary", "df-generated"] + - ["hudson.model", "Items", "getAllItems", "(ItemGroup,Class)", "summary", "df-generated"] + - ["hudson.model", "Items", "getAllItems", "(ItemGroup,Class,Predicate)", "summary", "df-generated"] + - ["hudson.model", "Items", "getDescriptor", "(String)", "summary", "df-generated"] + - ["hudson.model", "Items", "whileUpdatingByXml", "(Callable)", "summary", "df-generated"] + - ["hudson.model", "JDK", "getExists", "()", "summary", "df-generated"] + - ["hudson.model", "JDK", "isDefaultJDKValid", "(Node)", "summary", "df-generated"] + - ["hudson.model", "JDK", "isDefaultName", "(String)", "summary", "df-generated"] + - ["hudson.model", "Job", "assignBuildNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "doBuildStatus", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doDoRename", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doRssAll", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doRssChangelog", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "doRssFailed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Job", "getBuildStatusIconClassName", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getBuildStatusUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getBuildTimeGraph", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getEstimatedDuration", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getIconColor", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getNextBuildNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getPermalinks", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "getProperty", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Job", "getQueueItem", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isBuildable", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isHoldOffBuildUntilSave", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isInQueue", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isKeepDependencies", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "isLogUpdated", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "logRotate", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "removeProperty", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Job", "removeProperty", "(JobProperty)", "summary", "df-generated"] + - ["hudson.model", "Job", "setBuildDiscarder", "(BuildDiscarder)", "summary", "df-generated"] + - ["hudson.model", "Job", "setLogRotator", "(LogRotator)", "summary", "df-generated"] + - ["hudson.model", "Job", "supportsLogRotator", "()", "summary", "df-generated"] + - ["hudson.model", "Job", "updateNextBuildNumber", "(int)", "summary", "df-generated"] + - ["hudson.model", "JobProperty", "getJobAction", "(Job)", "summary", "df-generated"] + - ["hudson.model", "JobProperty", "getJobActions", "(Job)", "summary", "df-generated"] + - ["hudson.model", "JobProperty", "getJobOverrides", "()", "summary", "df-generated"] + - ["hudson.model", "JobProperty", "getSubTasks", "()", "summary", "df-generated"] + - ["hudson.model", "JobPropertyDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.model", "JobPropertyDescriptor", "getPropertyDescriptors", "(Class)", "summary", "df-generated"] + - ["hudson.model", "JobPropertyDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Label", "accept", "(LabelVisitor,Object)", "summary", "df-generated"] + - ["hudson.model", "Label", "contains", "(Node)", "summary", "df-generated"] + - ["hudson.model", "Label", "getBusyExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getExpression", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getIdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getTiedJobCount", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getTiedJobs", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getTotalConfiguredExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "getTotalExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "isAssignable", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "isAtom", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "isEmpty", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "isOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "isSelfLabel", "()", "summary", "df-generated"] + - ["hudson.model", "Label", "matches", "(Collection)", "summary", "df-generated"] + - ["hudson.model", "Label", "matches", "(Node)", "summary", "df-generated"] + - ["hudson.model", "Label", "matches", "(VariableResolver)", "summary", "df-generated"] + - ["hudson.model", "Label", "parse", "(String)", "summary", "df-generated"] + - ["hudson.model", "Label", "parseExpression", "(String)", "summary", "df-generated"] + - ["hudson.model", "Label", "precedence", "()", "summary", "df-generated"] + - ["hudson.model", "LabelFinder", "all", "()", "summary", "df-generated"] + - ["hudson.model", "LabelFinder", "findLabels", "(Node)", "summary", "df-generated"] + - ["hudson.model", "ListView$DescriptorImpl", "doCheckIncludeRegex", "(String)", "summary", "df-generated"] + - ["hudson.model", "ListView", "getDefaultColumns", "()", "summary", "df-generated"] + - ["hudson.model", "ListView", "getStatusFilter", "()", "summary", "df-generated"] + - ["hudson.model", "ListView", "hasJobFilterExtensions", "()", "summary", "df-generated"] + - ["hudson.model", "ListView", "isAddToCurrentView", "()", "summary", "df-generated"] + - ["hudson.model", "ListView", "isRecurse", "()", "summary", "df-generated"] + - ["hudson.model", "ListView", "jobNamesContains", "(TopLevelItem)", "summary", "df-generated"] + - ["hudson.model", "ListView", "setColumns", "(List)", "summary", "df-generated"] + - ["hudson.model", "ListView", "setJobFilters", "(List)", "summary", "df-generated"] + - ["hudson.model", "ListView", "setRecurse", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "ListView", "setStatusFilter", "(Boolean)", "summary", "df-generated"] + - ["hudson.model", "LoadBalancer", "map", "(Task,MappingWorksheet)", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot$Builder", "build", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "builder", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getAvailableExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getBusyExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getConnectingExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getDefinedExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getIdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getOnlineExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "getQueueLength", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics$LoadStatisticsSnapshot", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "computeIdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "computeQueueLength", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "computeSnapshot", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "computeTotalExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "createChart", "(CategoryDataset)", "summary", "df-generated"] + - ["hudson.model", "LoadStatistics", "getLatestIdleExecutors", "(TimeScale)", "summary", "df-generated"] + - ["hudson.model", "ManageJenkinsAction", "addContextMenuItem", "(ContextMenu,String,String,String,String,boolean,boolean)", "summary", "df-generated"] + - ["hudson.model", "ManagementLink$Category", "getLabel", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "all", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getBadge", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getCategory", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getRequiredPermission", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getRequiresConfirmation", "()", "summary", "df-generated"] + - ["hudson.model", "ManagementLink", "getRequiresPOST", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractBuild_Building", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractBuild_BuildingInWorkspace", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractBuild_BuildingOnMaster", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractBuild_BuildingRemotely", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractBuild_KeptBecause", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_BeingDeleted", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_FailureToStopBuilds", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_NewNameInUse", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_NewNameUnchanged", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_NoSuchJobExists", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_NoSuchJobExistsWithoutSuggestion", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractItem_TaskNoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_AwaitingBuildForWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_AwaitingWorkspaceToComeOnline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_BuildPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_CancelPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_CustomWorkspaceEmpty", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_Disabled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_DiscoverPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_DownstreamBuildInProgress", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_ExtendedReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_NewBuildForWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_NoBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_NoSCM", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_NoWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_PollingABorted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_PollingVetoed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_ScmAborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_UpstreamBuildInProgress", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_WipeOutPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_WorkspaceOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_WorkspacePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_WorkspaceTitle", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "AbstractProject_WorkspaceTitleOnComputer", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Api_MultipleMatch", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Api_NoXPathMatch", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Api_WrapperParamInvalid", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Disabled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Failed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_InProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Pending", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BallColor_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BooleanParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "BuildAuthorizationToken_InvalidTokenProvided", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Build_post_build_steps_failed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "CLI_clear_queue_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "CLI_keep_build_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "CLI_online_node_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "CLI_restart_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "CLI_safe_restart_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_LegacyCodeCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_RemoteCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_RemoteCause_ShortDescriptionWithNote", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_UpstreamCause_CausedBy", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_UpstreamCause_ShortDescription", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_UserCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Cause_UserIdCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "ChoiceParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ChoiceParameterDefinition_MissingChoices", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ComputerSet_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ComputerSet_NoSuchSlave", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "ComputerSet_SlaveAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "ComputerSet_SpecifySlaveToCopy", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_BadChannel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_BuildPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_Caption", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_ConfigurePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_ConnectPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_CreatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_DisconnectPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_ExtendedReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_NoSuchSlaveExists", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_NoSuchSlaveExistsWithoutAdvice", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Computer_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Descriptor_From", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Executor_NotAvailable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "FileParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "FileParameterValue_IndexTitle", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "FreeStyleProject_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "FreeStyleProject_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "HealthReport_EmptyString", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_AdministerPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_BadPortNumber", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_Computer_Caption", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_Computer_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_ControlCodeNotAllowed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_JobAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_MustBeAtLeast", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_MustBeAtMost", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NoJavaInPath", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NoName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NoSuchDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NodeBeingRemoved", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NodeDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotANegativeNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotANonNegativeNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotANumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotAPlugin", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotAPositiveNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotJDKDir", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_NotUsesUTF8ToDecodeURL", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_ReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_RunScriptsPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_TrailingDot", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_USER_CONTENT_README", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_UnsafeChar", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_ViewAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Hudson_ViewName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ItemGroupMixIn_may_not_copy_as_it_contains_secrets_and_", "(Object,Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_CONFIGURE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_CREATE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_DELETE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_READ_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Item_RENAME_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "JDK_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_CheckDisplayName_DisplayNameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_CheckDisplayName_NameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_IsRestarting", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_Manage_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_NotAllowedName", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Jenkins_SystemRead_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_AllRecentBuildFailed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_BuildStability", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_NOfMFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_NoRecentBuildFailed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_NoRenameWhileBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_minutes", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Job_you_must_use_the_save_button_if_you_wish", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LabelExpression_InvalidBooleanExpression", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "LabelExpression_LabelLink", "(Object,Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "LabelExpression_NoMatch", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LabelExpression_NoMatch_DidYouMean", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "LabelExpression_ObsoleteMasterLabel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Label_GroupOf", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Label_InvalidLabel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Label_ProvisionedFrom", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "ListView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_AvailableExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_BusyExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_ConnectingExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_DefinedExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_IdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_OnlineExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_QueueLength", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "LoadStatistics_Legends_TotalExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManageJenkinsAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_CONFIGURATION", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_MISC", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_SECURITY", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_STATUS", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_TOOLS", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_TROUBLESHOOTING", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ManagementLink_Category_UNCATEGORIZED", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "MultiStageTimeSeries_EMPTY_STRING", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "MyView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "MyViewsProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "MyViewsProperty_GlobalAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "MyViewsProperty_ViewExistsCheck_AlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "MyViewsProperty_ViewExistsCheck_NotExist", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_BecauseNodeIsNotAcceptingTasks", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_BecauseNodeIsReserved", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_LabelMissing", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_LackingBuildPermission", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_Mode_EXCLUSIVE", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Node_Mode_NORMAL", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ParameterAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ParametersDefinitionProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "PasswordParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastCompletedBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastFailedBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastStableBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastSuccessfulBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastUnstableBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Permalink_LastUnsuccessfulBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ProxyView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ProxyView_NoSuchViewExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_AllNodesOffline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_BlockedBy", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_ExceptionCanRun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_ExceptionCanTake", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_FinishedWaiting", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_HudsonIsAboutToShutDown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_InProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_InQuietPeriod", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_LabelHasNoNodes", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_NodeOffline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_Unknown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_WaitingForNextAvailableExecutor", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_WaitingForNextAvailableExecutorOn", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_executor_slot_already_in_use", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_init", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Queue_node_has_been_removed_from_configuration", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_Failure", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_Fixed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_NowUnstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_StillFailing", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_StillUnstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "ResultTrend_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "RunParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_ArtifactsBrowserTitle", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_ArtifactsPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_BuildAborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_InProgressDuration", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_MarkedExplicitly", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_NotStartedYet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_BackToNormal", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_BrokenForALongTime", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_BrokenSince", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_BrokenSinceThisBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_Stable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_Unknown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_Summary_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_UnableToDelete", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_UpdatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run__is_waiting_for_a_checkpoint_on_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_running_as_", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Run_running_as_SYSTEM", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_InvalidConfig_Executors", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_InvalidConfig_NoName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_Network_Mounted_File_System_Warning", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_Remote_Director_Mandatory", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_Remote_Relative_Path_Warning", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_Terminated", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_UnixSlave", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "Slave_WindowsSlave", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "StringParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "TextParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "TimeZoneProperty_DisplayDefaultTimeZone", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "TimeZoneProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "TimeZoneProperty_current_time_in_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "TimeZoneProperty_current_time_on_server_in_in_proposed_di", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "TopLevelItemDescriptor_NotApplicableIn", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_CoreUpdateMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_DownloadButNotActivated", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_agent", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_android", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_api_plugin", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_builder", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_buildwrapper", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_cli", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_cloud", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_cluster", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_database", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_deployment", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_devops", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_devsecops", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_dotnet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_external", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_groovy_related", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_ios", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_listview_column", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_maven", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_misc", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_must_be_labeled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_notifier", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_orchestration", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_page_decorator", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_parameter", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_post_build", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_python", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_report", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_ruby", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_runcondition", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_scala", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_scm", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_scm_related", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_security", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_test", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_theme", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_trigger", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_ui", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_unrecognized", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_upload", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_user", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_PluginCategory_view", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_Status_CheckingInternet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_Status_CheckingJavaNet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_Status_ConnectionFailed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_Status_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_Status_UnknownHostException", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_init", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "UpdateCenter_n_a", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "User_IllegalFullname", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "User_IllegalUsername", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_ConfigurePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_CreatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_DisplayNameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_MissingMode", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "View_ReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractBuild_Building", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractBuild_BuildingInWorkspace", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractBuild_BuildingOnMaster", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractBuild_BuildingRemotely", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractBuild_KeptBecause", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_BeingDeleted", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_FailureToStopBuilds", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_NewNameInUse", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_NewNameUnchanged", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_NoSuchJobExists", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_NoSuchJobExistsWithoutSuggestion", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractItem_TaskNoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_AwaitingBuildForWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_AwaitingWorkspaceToComeOnline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_BuildPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_CancelPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_CustomWorkspaceEmpty", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_Disabled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_DiscoverPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_DownstreamBuildInProgress", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_ExtendedReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_NewBuildForWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_NoBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_NoSCM", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_NoWorkspace", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_PollingABorted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_PollingVetoed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_ScmAborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_UpstreamBuildInProgress", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_WipeOutPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_WorkspaceOffline", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_WorkspacePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_WorkspaceTitle", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_AbstractProject_WorkspaceTitleOnComputer", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Api_MultipleMatch", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Api_NoXPathMatch", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Api_WrapperParamInvalid", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Disabled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Failed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_InProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Pending", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BallColor_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BooleanParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_BuildAuthorizationToken_InvalidTokenProvided", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Build_post_build_steps_failed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_CLI_clear_queue_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_CLI_keep_build_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_CLI_online_node_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_CLI_restart_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_CLI_safe_restart_shortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_LegacyCodeCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_RemoteCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_RemoteCause_ShortDescriptionWithNote", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_UpstreamCause_CausedBy", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_UpstreamCause_ShortDescription", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_UserCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Cause_UserIdCause_ShortDescription", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ChoiceParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ChoiceParameterDefinition_MissingChoices", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ComputerSet_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ComputerSet_NoSuchSlave", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ComputerSet_SlaveAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ComputerSet_SpecifySlaveToCopy", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_BadChannel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_BuildPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_Caption", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_ConfigurePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_ConnectPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_CreatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_DisconnectPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_ExtendedReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_NoSuchSlaveExists", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_NoSuchSlaveExistsWithoutAdvice", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Computer_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Descriptor_From", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Executor_NotAvailable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_FileParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_FileParameterValue_IndexTitle", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_FreeStyleProject_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_FreeStyleProject_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_HealthReport_EmptyString", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_AdministerPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_BadPortNumber", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_Computer_Caption", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_Computer_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_ControlCodeNotAllowed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_JobAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_MustBeAtLeast", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_MustBeAtMost", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NoJavaInPath", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NoName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NoSuchDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NodeBeingRemoved", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NodeDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotANegativeNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotANonNegativeNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotANumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotAPlugin", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotAPositiveNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotJDKDir", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_NotUsesUTF8ToDecodeURL", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_ReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_RunScriptsPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_TrailingDot", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_USER_CONTENT_README", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_UnsafeChar", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_ViewAlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Hudson_ViewName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ItemGroupMixIn_may_not_copy_as_it_contains_secrets_and_", "(Object,Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_CONFIGURE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_CREATE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_DELETE_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_READ_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Item_RENAME_description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_JDK_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_CheckDisplayName_DisplayNameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_CheckDisplayName_NameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_IsRestarting", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_Manage_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_NotAllowedName", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Jenkins_SystemRead_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_AllRecentBuildFailed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_BuildStability", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_NOfMFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_NoRecentBuildFailed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_NoRenameWhileBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_Pronoun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_minutes", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Job_you_must_use_the_save_button_if_you_wish", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LabelExpression_InvalidBooleanExpression", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LabelExpression_LabelLink", "(Object,Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LabelExpression_NoMatch", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LabelExpression_NoMatch_DidYouMean", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LabelExpression_ObsoleteMasterLabel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Label_GroupOf", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Label_InvalidLabel", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Label_ProvisionedFrom", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ListView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_AvailableExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_BusyExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_ConnectingExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_DefinedExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_IdleExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_OnlineExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_QueueLength", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_LoadStatistics_Legends_TotalExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManageJenkinsAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_CONFIGURATION", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_MISC", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_SECURITY", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_STATUS", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_TOOLS", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_TROUBLESHOOTING", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ManagementLink_Category_UNCATEGORIZED", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MultiStageTimeSeries_EMPTY_STRING", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MyView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MyViewsProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MyViewsProperty_GlobalAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MyViewsProperty_ViewExistsCheck_AlreadyExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_MyViewsProperty_ViewExistsCheck_NotExist", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_BecauseNodeIsNotAcceptingTasks", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_BecauseNodeIsReserved", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_LabelMissing", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_LackingBuildPermission", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_Mode_EXCLUSIVE", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Node_Mode_NORMAL", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ParameterAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ParametersDefinitionProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_PasswordParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastCompletedBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastFailedBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastStableBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastSuccessfulBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastUnstableBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Permalink_LastUnsuccessfulBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ProxyView_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ProxyView_NoSuchViewExists", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_AllNodesOffline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_BlockedBy", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_ExceptionCanRun", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_ExceptionCanTake", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_FinishedWaiting", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_HudsonIsAboutToShutDown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_InProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_InQuietPeriod", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_LabelHasNoNodes", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_NodeOffline", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_Unknown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_WaitingForNextAvailableExecutor", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_WaitingForNextAvailableExecutorOn", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_executor_slot_already_in_use", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_init", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Queue_node_has_been_removed_from_configuration", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_Failure", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_Fixed", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_NowUnstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_StillFailing", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_StillUnstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_ResultTrend_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_RunParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_ArtifactsBrowserTitle", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_ArtifactsPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_BuildAborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_InProgressDuration", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_MarkedExplicitly", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_NotStartedYet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_Aborted", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_BackToNormal", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_BrokenForALongTime", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_BrokenSince", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_BrokenSinceThisBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_NotBuilt", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_Stable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_Unknown", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_Summary_Unstable", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_UnableToDelete", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_UpdatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run__is_waiting_for_a_checkpoint_on_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_running_as_", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Run_running_as_SYSTEM", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_InvalidConfig_Executors", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_InvalidConfig_NoName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_Network_Mounted_File_System_Warning", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_Remote_Director_Mandatory", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_Remote_Relative_Path_Warning", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_Terminated", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_UnixSlave", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_Slave_WindowsSlave", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_StringParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TextParameterDefinition_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TimeZoneProperty_DisplayDefaultTimeZone", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TimeZoneProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TimeZoneProperty_current_time_in_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TimeZoneProperty_current_time_on_server_in_in_proposed_di", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_TopLevelItemDescriptor_NotApplicableIn", "(Object,Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_CoreUpdateMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_DownloadButNotActivated", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_agent", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_android", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_api_plugin", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_builder", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_buildwrapper", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_cli", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_cloud", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_cluster", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_database", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_deployment", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_devops", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_devsecops", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_dotnet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_external", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_groovy_related", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_ios", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_listview_column", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_maven", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_misc", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_must_be_labeled", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_notifier", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_orchestration", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_page_decorator", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_parameter", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_post_build", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_python", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_report", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_ruby", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_runcondition", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_scala", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_scm", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_scm_related", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_security", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_test", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_theme", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_trigger", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_ui", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_unrecognized", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_upload", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_user", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_PluginCategory_view", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_Status_CheckingInternet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_Status_CheckingJavaNet", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_Status_ConnectionFailed", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_Status_Success", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_Status_UnknownHostException", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_init", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_UpdateCenter_n_a", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_User_IllegalFullname", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_User_IllegalUsername", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_ConfigurePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_CreatePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_DeletePermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_DisplayNameNotUniqueWarning", "(Object)", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_MissingMode", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.model", "Messages", "_View_ReadPermission_Description", "()", "summary", "df-generated"] + - ["hudson.model", "ModelObject", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries$TimeScale", "createDateFormat", "()", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries$TimeScale", "parse", "(String)", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries$TrendChart", "createChart", "()", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", "MultiStageTimeSeries", "(float,float)", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", "getLatest", "(TimeScale)", "summary", "df-generated"] + - ["hudson.model", "MultiStageTimeSeries", "update", "(float)", "summary", "df-generated"] + - ["hudson.model", "MyViewsProperty", "doCreateView", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "MyViewsProperty", "doIndex", "()", "summary", "df-generated"] + - ["hudson.model", "MyViewsProperty", "doViewExistsCheck", "(String,boolean)", "summary", "df-generated"] + - ["hudson.model", "MyViewsProperty", "getMyViewsTabBar", "()", "summary", "df-generated"] + - ["hudson.model", "Node$Mode", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Node$Mode", "getName", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "canTake", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Node", "createComputer", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "createLauncher", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "Node", "getChannel", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getClockDifference", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getClockDifferenceCallable", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getFileSystemProvisioner", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getLabelCloud", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getLabelString", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getMode", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getNodeDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getNodeName", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getNodeProperties", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getNodeProperty", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Node", "getNodePropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getNumExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getRootPath", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "getWorkspaceFor", "(TopLevelItem)", "summary", "df-generated"] + - ["hudson.model", "Node", "isAcceptingTasks", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "isHoldOffLaunchUntilSave", "()", "summary", "df-generated"] + - ["hudson.model", "Node", "setLabelString", "(String)", "summary", "df-generated"] + - ["hudson.model", "Node", "setNodeName", "(String)", "summary", "df-generated"] + - ["hudson.model", "Node", "toComputer", "()", "summary", "df-generated"] + - ["hudson.model", "PageDecorator", "all", "()", "summary", "df-generated"] + - ["hudson.model", "PageDecorator", "getUrl", "()", "summary", "df-generated"] + - ["hudson.model", "PaneStatusProperties", "forCurrentUser", "()", "summary", "df-generated"] + - ["hudson.model", "PaneStatusProperties", "isCollapsed", "(String)", "summary", "df-generated"] + - ["hudson.model", "PaneStatusProperties", "toggleCollapsed", "(String)", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition$ParameterDescriptor", "getValuePage", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "all", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "createValue", "(CLICommand,String)", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "createValue", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "createValue", "(StaplerRequest,JSONObject)", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "getDefaultParameterValue", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "getFormattedDescription", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "getType", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterDefinition", "isValid", "(ParameterValue)", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "createBuildWrapper", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "createVariableResolver", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "getAssignedLabel", "(SubTask)", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "getDefinition", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "getFormattedDescription", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "getValue", "()", "summary", "df-generated"] + - ["hudson.model", "ParameterValue", "isSensitive", "()", "summary", "df-generated"] + - ["hudson.model", "ParametersAction", "createBuildWrappers", "(AbstractBuild,Collection)", "summary", "df-generated"] + - ["hudson.model", "ParametersAction", "createVariableResolver", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", "_doBuild", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", "_doBuild", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", "buildWithParameters", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "ParametersDefinitionProperty", "buildWithParameters", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["hudson.model", "PeriodicWork", "all", "()", "summary", "df-generated"] + - ["hudson.model", "PeriodicWork", "getInitialDelay", "()", "summary", "df-generated"] + - ["hudson.model", "PeriodicWork", "getRecurrencePeriod", "()", "summary", "df-generated"] + - ["hudson.model", "PeriodicWork", "init", "()", "summary", "df-generated"] + - ["hudson.model", "PermalinkProjectAction$Permalink", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "PermalinkProjectAction$Permalink", "getId", "()", "summary", "df-generated"] + - ["hudson.model", "PermalinkProjectAction$Permalink", "resolve", "(Job)", "summary", "df-generated"] + - ["hudson.model", "PersistentDescriptor", "load", "()", "summary", "df-generated"] + - ["hudson.model", "Project", "getBuilders", "()", "summary", "df-generated"] + - ["hudson.model", "Project", "removePublisher", "(Descriptor)", "summary", "df-generated"] + - ["hudson.model", "ProxyView", "doViewExistsCheck", "(String)", "summary", "df-generated"] + - ["hudson.model", "ProxyView", "getProxiedView", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$BlockedItem", "isCauseOfBlockageNull", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$BuildableItem", "isPending", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Executable", "getEstimatedDuration", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Executable", "getParentExecutable", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "authenticate2", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "authenticate", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "doCancelQueue", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getCauseOfBlockage", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getCauses", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getCausesDescription", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getId", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getIdLegacy", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getInQueueForString", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getInQueueSince", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getParams", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "getUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "hasCancelPermission", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "isBlocked", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "isBuildable", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Item", "isStuck", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$JobOffer", "canTake", "(BuildableItem)", "summary", "df-generated"] + - ["hudson.model", "Queue$JobOffer", "getCauseOfBlockage", "(BuildableItem)", "summary", "df-generated"] + - ["hudson.model", "Queue$JobOffer", "getNode", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$JobOffer", "isNotExclusive", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$JobOffer", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$LeftItem", "getExecutable", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$LeftItem", "isCancelled", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$QueueAction", "shouldSchedule", "(List)", "summary", "df-generated"] + - ["hudson.model", "Queue$QueueDecisionHandler", "all", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$QueueDecisionHandler", "shouldSchedule", "(Task,List)", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "checkAbortPermission", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getCauseOfBlockage", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getDefaultAuthentication2", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getDefaultAuthentication2", "(Item)", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getDefaultAuthentication", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getDefaultAuthentication", "(Item)", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "getWhyBlocked", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "hasAbortPermission", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "isBuildBlocked", "()", "summary", "df-generated"] + - ["hudson.model", "Queue$Task", "isConcurrentBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "Queue", "(LoadBalancer)", "summary", "df-generated"] + - ["hudson.model", "Queue", "add", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "Queue", "add", "(AbstractProject,int)", "summary", "df-generated"] + - ["hudson.model", "Queue", "add", "(Task,int)", "summary", "df-generated"] + - ["hudson.model", "Queue", "add", "(Task,int,Action[])", "summary", "df-generated"] + - ["hudson.model", "Queue", "cancel", "(Item)", "summary", "df-generated"] + - ["hudson.model", "Queue", "cancel", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Queue", "clear", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "clearLeftItems", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "contains", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Queue", "countBuildableItems", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "countBuildableItemsFor", "(Label)", "summary", "df-generated"] + - ["hudson.model", "Queue", "doCancelItem", "(long)", "summary", "df-generated"] + - ["hudson.model", "Queue", "getApproximateItemsQuickly", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "getDiscoverableItems", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "getInstance", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "getItems", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "getUnblockedTasks", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "ifBlockedByHudsonShutdown", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Queue", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.model", "Queue", "isBlockedByShutdown", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Queue", "isEmpty", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "isPending", "(Task)", "summary", "df-generated"] + - ["hudson.model", "Queue", "load", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "maintain", "()", "summary", "df-generated"] + - ["hudson.model", "Queue", "setLoadBalancer", "(LoadBalancer)", "summary", "df-generated"] + - ["hudson.model", "Queue", "strictCountBuildableItemsFor", "(Label)", "summary", "df-generated"] + - ["hudson.model", "Queue", "tryWithLock", "(Runnable)", "summary", "df-generated"] + - ["hudson.model", "Queue", "withLock", "(Callable)", "summary", "df-generated"] + - ["hudson.model", "Queue", "withLock", "(Runnable)", "summary", "df-generated"] + - ["hudson.model", "RSS", "forwardToRss", "(String,String,Collection,FeedAdapter,StaplerRequest,HttpServletResponse)", "summary", "df-generated"] + - ["hudson.model", "RSS", "rss", "(StaplerRequest,StaplerResponse,String,String,RunList)", "summary", "df-generated"] + - ["hudson.model", "RSS", "rss", "(StaplerRequest,StaplerResponse,String,String,RunList,FeedAdapter)", "summary", "df-generated"] + - ["hudson.model", "Resource", "isCollidingWith", "(Resource,int)", "summary", "df-generated"] + - ["hudson.model", "ResourceActivity", "getResourceList", "()", "summary", "df-generated"] + - ["hudson.model", "ResourceController", "canRun", "(ResourceList)", "summary", "df-generated"] + - ["hudson.model", "ResourceController", "execute", "(Runnable,ResourceActivity)", "summary", "df-generated"] + - ["hudson.model", "ResourceController", "getMissingResource", "(ResourceList)", "summary", "df-generated"] + - ["hudson.model", "ResourceList", "isCollidingWith", "(ResourceList)", "summary", "df-generated"] + - ["hudson.model", "ResourceList", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "RestartListener", "all", "()", "summary", "df-generated"] + - ["hudson.model", "RestartListener", "isAllReady", "()", "summary", "df-generated"] + - ["hudson.model", "RestartListener", "isReadyToRestart", "()", "summary", "df-generated"] + - ["hudson.model", "RestartListener", "onRestart", "()", "summary", "df-generated"] + - ["hudson.model", "Result$OptionHandlerImpl", "OptionHandlerImpl", "(CmdLineParser,OptionDef,Setter)", "summary", "df-generated"] + - ["hudson.model", "Result", "fromString", "(String)", "summary", "df-generated"] + - ["hudson.model", "Result", "init", "()", "summary", "df-generated"] + - ["hudson.model", "Result", "isBetterOrEqualTo", "(Result)", "summary", "df-generated"] + - ["hudson.model", "Result", "isBetterThan", "(Result)", "summary", "df-generated"] + - ["hudson.model", "Result", "isCompleteBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Result", "isWorseOrEqualTo", "(Result)", "summary", "df-generated"] + - ["hudson.model", "Result", "isWorseThan", "(Result)", "summary", "df-generated"] + - ["hudson.model", "ResultTrend", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "ResultTrend", "getID", "()", "summary", "df-generated"] + - ["hudson.model", "ResultTrend", "getResultTrend", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "ResultTrend", "getResultTrend", "(Run)", "summary", "df-generated"] + - ["hudson.model", "Run$Artifact", "getFileSize", "()", "summary", "df-generated"] + - ["hudson.model", "Run$ArtifactList", "computeDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Run$KeepLogBuildBadge", "getWhyKeepLog", "()", "summary", "df-generated"] + - ["hudson.model", "Run$RedirectUp", "doDynamic", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run$RunExecution", "cleanUp", "(BuildListener)", "summary", "df-generated"] + - ["hudson.model", "Run$RunExecution", "getBuild", "()", "summary", "df-generated"] + - ["hudson.model", "Run$RunExecution", "getProject", "()", "summary", "df-generated"] + - ["hudson.model", "Run$RunExecution", "post", "(BuildListener)", "summary", "df-generated"] + - ["hudson.model", "Run$RunExecution", "run", "(BuildListener)", "summary", "df-generated"] + - ["hudson.model", "Run$StatusSummarizer", "summarize", "(Run,ResultTrend)", "summary", "df-generated"] + - ["hudson.model", "Run", "canToggleLogKeep", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "delete", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "deleteArtifacts", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "doBuildNumber", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doBuildStatus", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doBuildTimestamp", "(StaplerRequest,StaplerResponse,String)", "summary", "df-generated"] + - ["hudson.model", "Run", "doConfigSubmit", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "Run", "doConsoleText", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doDoDelete", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doProgressiveLog", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "doToggleLogKeep", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Run", "fromExternalizableId", "(String)", "summary", "df-generated"] + - ["hudson.model", "Run", "getAbsoluteUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getArtifacts", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getArtifactsUpTo", "(int)", "summary", "df-generated"] + - ["hudson.model", "Run", "getBadgeActions", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getBuildFingerprints", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getBuildStatusIconClassName", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getBuildStatusSummary", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getBuildStatusUrl", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getCause", "(Class)", "summary", "df-generated"] + - ["hudson.model", "Run", "getCauses", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getCharset", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getDuration", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getDurationString", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getEstimatedDuration", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getExecutor", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getHasArtifacts", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getIconColor", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getLog", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getLog", "(int)", "summary", "df-generated"] + - ["hudson.model", "Run", "getNumber", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getOneOffExecutor", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getQueueId", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getStartTimeInMillis", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTime", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTimeInMillis", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTimestamp", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTimestampString2", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTimestampString", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getTransientActions", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "getWhyKeepLog", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "hasCustomDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "hasntStartedYet", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "isBuilding", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "isInProgress", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "isKeepLog", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "isLogUpdated", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "keepLog", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "keepLog", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "Run", "reload", "()", "summary", "df-generated"] + - ["hudson.model", "Run", "setQueueId", "(long)", "summary", "df-generated"] + - ["hudson.model", "Run", "updateSymlinks", "(TaskListener)", "summary", "df-generated"] + - ["hudson.model", "Run", "writeLogTo", "(long,XMLOutput)", "summary", "df-generated"] + - ["hudson.model", "Run", "writeWholeLogTo", "(OutputStream)", "summary", "df-generated"] + - ["hudson.model", "RunMap", "newestValue", "()", "summary", "df-generated"] + - ["hudson.model", "RunMap", "oldestValue", "()", "summary", "df-generated"] + - ["hudson.model", "RunMap", "remove", "(Run)", "summary", "df-generated"] + - ["hudson.model", "RunParameterDefinition$DescriptorImpl", "doAutoCompleteProjectName", "(String)", "summary", "df-generated"] + - ["hudson.model", "RunParameterDefinition$RunParameterFilter", "getName", "()", "summary", "df-generated"] + - ["hudson.model", "RunParameterDefinition", "getBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "RunParameterDefinition", "getFilter", "()", "summary", "df-generated"] + - ["hudson.model", "RunParameterDefinition", "getProject", "()", "summary", "df-generated"] + - ["hudson.model", "RunParameterValue", "getRun", "()", "summary", "df-generated"] + - ["hudson.model", "Saveable", "save", "()", "summary", "df-generated"] + - ["hudson.model", "SimpleParameterDefinition", "createValue", "(String)", "summary", "df-generated"] + - ["hudson.model", "Slave$JnlpJar", "doIndex", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "Slave$JnlpJar", "getURL", "()", "summary", "df-generated"] + - ["hudson.model", "Slave$JnlpJar", "readFully", "()", "summary", "df-generated"] + - ["hudson.model", "Slave$SlaveDescriptor", "computerLauncherDescriptors", "(Slave)", "summary", "df-generated"] + - ["hudson.model", "Slave$SlaveDescriptor", "doCheckNumExecutors", "(String)", "summary", "df-generated"] + - ["hudson.model", "Slave$SlaveDescriptor", "doCheckRemoteFS", "(String)", "summary", "df-generated"] + - ["hudson.model", "Slave$SlaveDescriptor", "nodePropertyDescriptors", "(Slave)", "summary", "df-generated"] + - ["hudson.model", "Slave$SlaveDescriptor", "retentionStrategyDescriptors", "(Slave)", "summary", "df-generated"] + - ["hudson.model", "Slave", "getComputer", "()", "summary", "df-generated"] + - ["hudson.model", "Slave", "getWorkspaceRoot", "()", "summary", "df-generated"] + - ["hudson.model", "Slave", "setMode", "(Mode)", "summary", "df-generated"] + - ["hudson.model", "Slave", "setNodeProperties", "(List)", "summary", "df-generated"] + - ["hudson.model", "Slave", "setNumExecutors", "(int)", "summary", "df-generated"] + - ["hudson.model", "Slave", "setUserId", "(String)", "summary", "df-generated"] + - ["hudson.model", "StatusIcon", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "StreamBuildListener", "StreamBuildListener", "(File,Charset)", "summary", "df-generated"] + - ["hudson.model", "StringParameterDefinition", "isTrim", "()", "summary", "df-generated"] + - ["hudson.model", "StringParameterDefinition", "setTrim", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "StringParameterValue", "doTrim", "()", "summary", "df-generated"] + - ["hudson.model", "TaskAction", "doClearError", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "TaskAction", "doProgressiveHtml", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "TaskAction", "doProgressiveLog", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "TaskAction", "getLog", "()", "summary", "df-generated"] + - ["hudson.model", "TaskAction", "obtainLog", "()", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "annotate", "(ConsoleNote)", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "error", "(String)", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "error", "(String,Object[])", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "fatalError", "(String)", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "fatalError", "(String,Object[])", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "getCharset", "()", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "getLogger", "()", "summary", "df-generated"] + - ["hudson.model", "TaskListener", "hyperlink", "(String,String)", "summary", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", "forFile", "(File)", "summary", "df-generated"] + - ["hudson.model", "TaskThread$ListenerAndText", "forMemory", "()", "summary", "df-generated"] + - ["hudson.model", "TaskThread", "isRunning", "()", "summary", "df-generated"] + - ["hudson.model", "TaskThread", "readAll", "()", "summary", "df-generated"] + - ["hudson.model", "TimeSeries", "TimeSeries", "(float,float,int)", "summary", "df-generated"] + - ["hudson.model", "TimeSeries", "getHistory", "()", "summary", "df-generated"] + - ["hudson.model", "TimeSeries", "getLatest", "()", "summary", "df-generated"] + - ["hudson.model", "TimeSeries", "toString", "()", "summary", "df-generated"] + - ["hudson.model", "TimeSeries", "update", "(float)", "summary", "df-generated"] + - ["hudson.model", "TimeZoneProperty$DescriptorImpl", "doCheckTimeZoneName", "(String)", "summary", "df-generated"] + - ["hudson.model", "TimeZoneProperty$DescriptorImpl", "doFillTimeZoneNameItems", "(User)", "summary", "df-generated"] + - ["hudson.model", "TimeZoneProperty", "forCurrentUser", "()", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "checkApplicableIn", "(ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "getCategoryId", "()", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "getDescription", "()", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "getIconFilePathPattern", "()", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "isApplicable", "(Descriptor)", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "isApplicableIn", "(ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "newInstance", "(ItemGroup,String)", "summary", "df-generated"] + - ["hudson.model", "TopLevelItemDescriptor", "testInstance", "(TopLevelItem)", "summary", "df-generated"] + - ["hudson.model", "TransientBuildActionFactory", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TransientBuildActionFactory", "createFor", "(AbstractBuild)", "summary", "df-generated"] + - ["hudson.model", "TransientBuildActionFactory", "createFor", "(Run)", "summary", "df-generated"] + - ["hudson.model", "TransientComputerActionFactory", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TransientComputerActionFactory", "createAllFor", "(Computer)", "summary", "df-generated"] + - ["hudson.model", "TransientComputerActionFactory", "createFor", "(Computer)", "summary", "df-generated"] + - ["hudson.model", "TransientProjectActionFactory", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TransientProjectActionFactory", "createFor", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "TransientUserActionFactory", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TransientUserActionFactory", "createFor", "(User)", "summary", "df-generated"] + - ["hudson.model", "TransientViewActionFactory", "all", "()", "summary", "df-generated"] + - ["hudson.model", "TransientViewActionFactory", "createAllFor", "(View)", "summary", "df-generated"] + - ["hudson.model", "TransientViewActionFactory", "createFor", "(View)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$CoreUpdateMonitor", "getData", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$InstallationStatus", "getType", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$InstallationStatus", "isSuccess", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$InstallationStatus", "requiresRestart", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob$Installing", "Installing", "(int)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", "_run", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", "getContentLength", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$DownloadJob", "getName", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$RestartJenkinsJob$Pending", "getType", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$RestartJenkinsJob", "cancel", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "checkConnection", "(ConnectionCheckJob,String)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "checkUpdateCenter", "(ConnectionCheckJob,String)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "download", "(DownloadJob,URL)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "getConnectionCheckUrl", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "getPluginRepositoryBaseUrl", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "getUpdateCenterUrl", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "install", "(DownloadJob,File,File)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "postValidate", "(DownloadJob,File)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "preValidate", "(DownloadJob,URL)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterConfiguration", "upgrade", "(DownloadJob,File,File)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", "getType", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", "schedule", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter$UpdateCenterJob", "submit", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doCancelRestart", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doConnectionStatus", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doDowngrade", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doIncompleteInstallStatus", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doInstallStatus", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doInvalidateData", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doRestart", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doSafeRestart", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "doUpgrade", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getAvailables", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getBackupVersion", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getCategorizedAvailables", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getDefaultBaseUrl", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getLastUpdatedString", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getPlugin", "(String)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getPlugin", "(String,VersionNumber)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getPluginFromAllSites", "(String,VersionNumber)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getSiteList", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "getUpdates", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "hasIncompatibleUpdates", "(MetadataCache)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "init", "(Jenkins)", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "isDowngradable", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "isRestartRequiredForCompletion", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "isRestartScheduled", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "isSiteDataReady", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "load", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "persistInstallStatus", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "updateAllSites", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "updateAllSitesNow", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateCenter", "updateDefaultSite", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Data", "canUpgrade", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Data", "hasCoreUpdates", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", "getFileSize", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Entry", "isNewerThan", "(String)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "deploy", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "deploy", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "deploy", "(boolean,UUID,List,boolean)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "deployBackup", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "doDowngrade", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "doInstall", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "doInstallNow", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "fixesSecurityVulnerabilities", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getDependenciesIncompatibleWithInstalledVersion", "(MetadataCache)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getDeprecation", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getInstalled", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getNeededDependencies", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getNeededDependenciesRequiredCore", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "getWarnings", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "hasCategory", "(String)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "hasIncompatibleParentPlugins", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "hasWarnings", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "install", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isCompatible", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isCompatible", "(MetadataCache)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isCompatibleWithInstalledVersion", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isDeprecated", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isForNewerHudson", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isNeededDependenciesCompatibleWithInstalledVersion", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isNeededDependenciesCompatibleWithInstalledVersion", "(MetadataCache)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isNeededDependenciesForNewerJenkins", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Plugin", "isNeededDependenciesForNewerJenkins", "(MetadataCache)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Warning", "Warning", "(JSONObject)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Warning", "isFixable", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Warning", "isPluginWarning", "(String)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Warning", "isRelevant", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$Warning", "isRelevantToVersion", "(VersionNumber)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$WarningVersionRange", "WarningVersionRange", "(JSONObject)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite$WarningVersionRange", "includes", "(VersionNumber)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "doInvalidateData", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "doVerifySignature", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "getDataTimestamp", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "getJSONObject", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "getUpdates", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "hasUpdates", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "isDue", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "isLegacyDefault", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "updateDirectly", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "updateDirectly", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "updateDirectlyNow", "()", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "updateDirectlyNow", "(boolean)", "summary", "df-generated"] + - ["hudson.model", "UpdateSite", "verifySignatureInternal", "(JSONObject)", "summary", "df-generated"] + - ["hudson.model", "UsageStatistics$CombinedCipherInputStream", "CombinedCipherInputStream", "(InputStream,Cipher,String,int)", "summary", "df-generated"] + - ["hudson.model", "UsageStatistics$CombinedCipherInputStream", "CombinedCipherInputStream", "(InputStream,RSAKey,String)", "summary", "df-generated"] + - ["hudson.model", "UsageStatistics", "getStatData", "()", "summary", "df-generated"] + - ["hudson.model", "UsageStatistics", "isDue", "()", "summary", "df-generated"] + - ["hudson.model", "User$AllUsers", "scanAll", "()", "summary", "df-generated"] + - ["hudson.model", "User$CanonicalIdResolver", "all", "()", "summary", "df-generated"] + - ["hudson.model", "User$CanonicalIdResolver", "getPriority", "()", "summary", "df-generated"] + - ["hudson.model", "User$CanonicalIdResolver", "resolveCanonicalId", "(String,Map)", "summary", "df-generated"] + - ["hudson.model", "User", "canDelete", "()", "summary", "df-generated"] + - ["hudson.model", "User", "clear", "()", "summary", "df-generated"] + - ["hudson.model", "User", "current", "()", "summary", "df-generated"] + - ["hudson.model", "User", "delete", "()", "summary", "df-generated"] + - ["hudson.model", "User", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "doDoDelete", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "doRssAll", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "doRssFailed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "doRssLatest", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "User", "get2", "(Authentication)", "summary", "df-generated"] + - ["hudson.model", "User", "get", "(Authentication)", "summary", "df-generated"] + - ["hudson.model", "User", "getAll", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getAuthorities", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getProjects", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getProperty", "(Class)", "summary", "df-generated"] + - ["hudson.model", "User", "getTransientActions", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getUnknown", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getUserDetailsForImpersonation", "()", "summary", "df-generated"] + - ["hudson.model", "User", "getUserFolder", "()", "summary", "df-generated"] + - ["hudson.model", "User", "idStrategy", "()", "summary", "df-generated"] + - ["hudson.model", "User", "impersonate2", "()", "summary", "df-generated"] + - ["hudson.model", "User", "impersonate", "()", "summary", "df-generated"] + - ["hudson.model", "User", "impersonate", "(UserDetails)", "summary", "df-generated"] + - ["hudson.model", "User", "isIdOrFullnameAllowed", "(String)", "summary", "df-generated"] + - ["hudson.model", "User", "rekey", "()", "summary", "df-generated"] + - ["hudson.model", "User", "reload", "()", "summary", "df-generated"] + - ["hudson.model", "UserProperty", "all", "()", "summary", "df-generated"] + - ["hudson.model", "UserPropertyDescriptor", "isEnabled", "()", "summary", "df-generated"] + - ["hudson.model", "UserPropertyDescriptor", "newInstance", "(User)", "summary", "df-generated"] + - ["hudson.model", "View$AsynchPeople", "getApi", "()", "summary", "df-generated"] + - ["hudson.model", "View$People", "isApplicable", "(Collection)", "summary", "df-generated"] + - ["hudson.model", "View$UserInfo", "getLastChangeTimeString", "()", "summary", "df-generated"] + - ["hudson.model", "View$UserInfo", "getTimeSortKey", "()", "summary", "df-generated"] + - ["hudson.model", "View", "all", "()", "summary", "df-generated"] + - ["hudson.model", "View", "allInstantiable", "()", "summary", "df-generated"] + - ["hudson.model", "View", "contains", "(TopLevelItem)", "summary", "df-generated"] + - ["hudson.model", "View", "doCheckJobName", "(String)", "summary", "df-generated"] + - ["hudson.model", "View", "doConfigDotXml", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.model", "View", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doCreateItem", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doDoDelete", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doItemCategories", "(StaplerRequest,StaplerResponse,String)", "summary", "df-generated"] + - ["hudson.model", "View", "doRssAll", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doRssFailed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doRssLatest", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.model", "View", "getAllItems", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getAllProperties", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getApplicablePropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getApproximateQueueItemsQuickly", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getBuilds", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getColumns", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getComputers", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getIndenter", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getItem", "(String)", "summary", "df-generated"] + - ["hudson.model", "View", "getItemCreatePermission", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getItems", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getNewPronoun", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getOwnerPrimaryView", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getPostConstructLandingPage", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getQueueItems", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getTimeline", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getVisiblePropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "View", "getWidgets", "()", "summary", "df-generated"] + - ["hudson.model", "View", "hasPeople", "()", "summary", "df-generated"] + - ["hudson.model", "View", "isAutomaticRefreshEnabled", "()", "summary", "df-generated"] + - ["hudson.model", "View", "isDefault", "()", "summary", "df-generated"] + - ["hudson.model", "View", "isEditable", "()", "summary", "df-generated"] + - ["hudson.model", "View", "isFilterExecutors", "()", "summary", "df-generated"] + - ["hudson.model", "View", "isFilterQueue", "()", "summary", "df-generated"] + - ["hudson.model", "View", "onJobRenamed", "(Item,String,String)", "summary", "df-generated"] + - ["hudson.model", "View", "registerPermissions", "()", "summary", "df-generated"] + - ["hudson.model", "View", "rename", "(String)", "summary", "df-generated"] + - ["hudson.model", "View", "updateByXml", "(Source)", "summary", "df-generated"] + - ["hudson.model", "View", "updateTransientActions", "()", "summary", "df-generated"] + - ["hudson.model", "View", "writeXml", "(OutputStream)", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "doAutoCompleteCopyNewItemFrom", "(String,ItemGroup)", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "getColumnsDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "getJobFiltersDescriptors", "()", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "getNewViewDetailPage", "()", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "isApplicableIn", "(ViewGroup)", "summary", "df-generated"] + - ["hudson.model", "ViewDescriptor", "isInstantiable", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "canDelete", "(View)", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "deleteView", "(View)", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getAllViews", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getItemGroup", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getPrimaryView", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getUrl", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getView", "(String)", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getViewActions", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getViews", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "getViewsTabBar", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroup", "onViewRenamed", "(View,String,String)", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "canDelete", "(View)", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "deleteView", "(View)", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "getPrimaryView", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "getView", "(String)", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "getViews", "()", "summary", "df-generated"] + - ["hudson.model", "ViewGroupMixIn", "onViewRenamed", "(View,String,String)", "summary", "df-generated"] + - ["hudson.model", "ViewProperty", "all", "()", "summary", "df-generated"] + - ["hudson.model", "ViewPropertyDescriptor", "isEnabledFor", "(View)", "summary", "df-generated"] + - ["hudson.model", "ViewPropertyDescriptor", "newInstance", "(View)", "summary", "df-generated"] + - ["hudson.model", "WorkspaceBrowser", "getWorkspace", "(Job)", "summary", "df-generated"] + - ["hudson.model", "WorkspaceCleanupThread", "invoke", "()", "summary", "df-generated"] + - ["hudson.model", "WorkspaceListener", "afterDelete", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.model", "WorkspaceListener", "all", "()", "summary", "df-generated"] + - ["hudson.model", "WorkspaceListener", "beforeUse", "(AbstractBuild,FilePath,BuildListener)", "summary", "df-generated"] + - ["hudson.node_monitors", "AbstractDiskSpaceMonitor", "getThresholdBytes", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "AbstractDiskSpaceMonitor", "markNodeOfflineIfDiskspaceIsTooLow", "(Computer)", "summary", "df-generated"] + - ["hudson.node_monitors", "AbstractNodeMonitorDescriptor", "getTimestamp", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "AbstractNodeMonitorDescriptor", "getTimestampString", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "AbstractNodeMonitorDescriptor", "isIgnored", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "ClockMonitor", "getDifferenceFor", "(Computer)", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitor", "getFreeSpace", "(Computer)", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitor", "install", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", "getFreeSize", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", "getGbLeft", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", "parse", "(String)", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", "toHtml", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "DiskSpaceMonitorDescriptor$DiskSpace", "toString", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "AbstractNodeMonitorDescriptor_NoDataYet", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "ArchitectureMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "ClockMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "DiskSpaceMonitorDescriptor_DiskSpace_FreeSpace", "(Object,Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "DiskSpaceMonitorDescriptor_DiskSpace_FreeSpaceTooLow", "(Object,Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "DiskSpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "DiskSpaceMonitor_MarkedOffline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "DiskSpaceMonitor_MarkedOnline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "MonitorMarkedNodeOffline_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "ResponseTimeMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "ResponseTimeMonitor_MarkedOffline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "ResponseTimeMonitor_TimeOut", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "SwapSpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "TemporarySpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_AbstractNodeMonitorDescriptor_NoDataYet", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_ArchitectureMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_ClockMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_DiskSpaceMonitorDescriptor_DiskSpace_FreeSpace", "(Object,Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_DiskSpaceMonitorDescriptor_DiskSpace_FreeSpaceTooLow", "(Object,Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_DiskSpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_DiskSpaceMonitor_MarkedOffline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_DiskSpaceMonitor_MarkedOnline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_MonitorMarkedNodeOffline_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_ResponseTimeMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_ResponseTimeMonitor_MarkedOffline", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_ResponseTimeMonitor_TimeOut", "(Object)", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_SwapSpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "Messages", "_TemporarySpaceMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "MonitorOfflineCause", "getTrigger", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "all", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "data", "(Computer)", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "getAll", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "getColumnCaption", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "isIgnored", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "setIgnored", "(boolean)", "summary", "df-generated"] + - ["hudson.node_monitors", "NodeMonitor", "triggerUpdate", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "ResponseTimeMonitor$Data", "getAverage", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "ResponseTimeMonitor$Data", "hasTooManyTimeouts", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "ResponseTimeMonitor$Data", "toString", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor$MemoryUsage2", "MemoryUsage2", "(MemoryUsage)", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor$MemoryUsage2", "getAvailablePhysicalMemory", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor$MemoryUsage2", "getAvailableSwapSpace", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor$MemoryUsage2", "getTotalPhysicalMemory", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor$MemoryUsage2", "getTotalSwapSpace", "()", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor", "toHtml", "(MemoryUsage)", "summary", "df-generated"] + - ["hudson.node_monitors", "SwapSpaceMonitor", "toMB", "(MemoryUsage)", "summary", "df-generated"] + - ["hudson.node_monitors", "TemporarySpaceMonitor", "getFreeSpace", "(Computer)", "summary", "df-generated"] + - ["hudson.node_monitors", "TemporarySpaceMonitor", "install", "()", "summary", "df-generated"] + - ["hudson.os", "SU", "execute", "(TaskListener,String,String,Callable)", "summary", "df-generated"] + - ["hudson.os", "SU", "start", "(TaskListener,String,String)", "summary", "df-generated"] + - ["hudson.os", "WindowsUtil", "execCmd", "(String[])", "summary", "df-generated"] + - ["hudson.scheduler", "CronTab", "ceil", "(long)", "summary", "df-generated"] + - ["hudson.scheduler", "CronTab", "checkSanity", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CronTab", "floor", "(long)", "summary", "df-generated"] + - ["hudson.scheduler", "CronTab", "getTimeZone", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CronTab", "toString", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "check", "(Calendar)", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "checkSanity", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "create", "(String)", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "create", "(String,Hash)", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "next", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CronTabList", "previous", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabLexer", "CrontabLexer", "(CharStream)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$ExprContext", "ExprContext", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$ExprContext", "ExprContext", "(ParserRuleContext,int,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$ExprContext", "OR", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$ExprContext", "expr", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$ExprContext", "term", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "ANNUALLY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "AT", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "DAILY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "EOF", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "HOURLY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "MIDNIGHT", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "MONTHLY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "StartRuleContext", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "WEEKLY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "WS", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "WS", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "YEARLY", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "expr", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$StartRuleContext", "expr", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "DIV", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "H", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "LPAREN", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "MINUS", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "RPAREN", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "STAR", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "TermContext", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "TermContext", "(ParserRuleContext,int,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "token", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TermContext", "token", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TokenContext", "TOKEN", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser$TokenContext", "TokenContext", "(ParserRuleContext,int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser", "CrontabParser", "(TokenStream)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser", "expr", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser", "term", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParser", "token", "()", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "enterExpr", "(ExprContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "enterStartRule", "(StartRuleContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "enterTerm", "(TermContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "enterToken", "(TokenContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "exitExpr", "(ExprContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "exitStartRule", "(StartRuleContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "exitTerm", "(TermContext)", "summary", "df-generated"] + - ["hudson.scheduler", "CrontabParserListener", "exitToken", "(TokenContext)", "summary", "df-generated"] + - ["hudson.scheduler", "Hash", "from", "(String)", "summary", "df-generated"] + - ["hudson.scheduler", "Hash", "next", "(int)", "summary", "df-generated"] + - ["hudson.scheduler", "Hash", "zero", "()", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "BaseParser_MustBePositive", "(Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "BaseParser_OutOfRange", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "BaseParser_StartEndReversed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "CronTabList_InvalidInput", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "CronTab_do_you_really_mean_every_minute_when_you", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "CronTab_short_cycles_in_the_day_of_month_field_w", "()", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "CronTab_spread_load_evenly_by_using_rather_than_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_BaseParser_MustBePositive", "(Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_BaseParser_OutOfRange", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_BaseParser_StartEndReversed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_CronTabList_InvalidInput", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_CronTab_do_you_really_mean_every_minute_when_you", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_CronTab_short_cycles_in_the_day_of_month_field_w", "()", "summary", "df-generated"] + - ["hudson.scheduler", "Messages", "_CronTab_spread_load_evenly_by_using_rather_than_", "(Object,Object)", "summary", "df-generated"] + - ["hudson.scm", "AbstractScmTagAction", "doIndex", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.scm", "AbstractScmTagAction", "getTooltip", "()", "summary", "df-generated"] + - ["hudson.scm", "AbstractScmTagAction", "isTagged", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogAnnotator", "all", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogAnnotator", "annotate", "(AbstractBuild,Entry,MarkupText)", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogAnnotator", "annotate", "(Run,Entry,MarkupText)", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogAnnotator", "register", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogAnnotator", "unregister", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getAffectedFiles", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getAffectedPaths", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getAuthor", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getCommitId", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getMsg", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getMsgAnnotated", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getMsgEscaped", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet$Entry", "getTimestamp", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet", "getKind", "()", "summary", "df-generated"] + - ["hudson.scm", "ChangeLogSet", "isEmptySet", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "NullSCM_DisplayName", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "SCM_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "SCM_TagPermission_Description", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "_NullSCM_DisplayName", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "_SCM_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.scm", "Messages", "_SCM_TagPermission_Description", "()", "summary", "df-generated"] + - ["hudson.scm", "PollingResult", "PollingResult", "(Change)", "summary", "df-generated"] + - ["hudson.scm", "PollingResult", "hasChanges", "()", "summary", "df-generated"] + - ["hudson.scm", "RepositoryBrowser", "all", "()", "summary", "df-generated"] + - ["hudson.scm", "RepositoryBrowser", "getChangeSetLink", "(Entry)", "summary", "df-generated"] + - ["hudson.scm", "RepositoryBrowsers", "createInstance", "(Class,StaplerRequest,JSONObject,String)", "summary", "df-generated"] + - ["hudson.scm", "RepositoryBrowsers", "createInstance", "(Class,StaplerRequest,String)", "summary", "df-generated"] + - ["hudson.scm", "RepositoryBrowsers", "filter", "(Class)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "_calcRevisionsFromBuild", "(AbstractBuild,Launcher,TaskListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "_for", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "_for", "(Job)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "all", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "buildEnvVars", "(AbstractBuild,Map)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "buildEnvironment", "(Run,Map)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "calcRevisionsFromBuild", "(AbstractBuild,Launcher,TaskListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "calcRevisionsFromBuild", "(Run,FilePath,Launcher,TaskListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "checkout", "(AbstractBuild,Launcher,FilePath,BuildListener,File)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "checkout", "(Run,Launcher,FilePath,TaskListener,File,SCMRevisionState)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "compareRemoteRevisionWith", "(Job,Launcher,FilePath,TaskListener,SCMRevisionState)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "createChangeLogParser", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "getBrowser", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "getKey", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "getType", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "guessBrowser", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "poll", "(AbstractProject,Launcher,FilePath,TaskListener,SCMRevisionState)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "pollChanges", "(AbstractProject,Launcher,FilePath,TaskListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "postCheckout", "(AbstractBuild,Launcher,FilePath,BuildListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "postCheckout", "(Run,Launcher,FilePath,TaskListener)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "processWorkspaceBeforeDeletion", "(AbstractProject,FilePath,Node)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "processWorkspaceBeforeDeletion", "(Job,FilePath,Node)", "summary", "df-generated"] + - ["hudson.scm", "SCM", "requiresWorkspaceForPolling", "()", "summary", "df-generated"] + - ["hudson.scm", "SCM", "supportsPolling", "()", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "getBrowserDescriptors", "()", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "getGeneration", "()", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "incrementGeneration", "()", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "isApplicable", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "isApplicable", "(Job)", "summary", "df-generated"] + - ["hudson.scm", "SCMDescriptor", "isBrowserReusable", "(SCM,SCM)", "summary", "df-generated"] + - ["hudson.scm", "SCMS", "parseSCM", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.scm", "SCMS", "parseSCM", "(StaplerRequest,AbstractProject)", "summary", "df-generated"] + - ["hudson.search", "Messages", "UserSearchProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.search", "Messages", "_UserSearchProperty_DisplayName", "()", "summary", "df-generated"] + - ["hudson.search", "Search", "doIndex", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.search", "Search", "doSuggest", "(StaplerRequest,StaplerResponse,String)", "summary", "df-generated"] + - ["hudson.search", "Search", "doSuggestOpenSearch", "(StaplerRequest,StaplerResponse,String)", "summary", "df-generated"] + - ["hudson.search", "Search", "getSuggestions", "(StaplerRequest,String)", "summary", "df-generated"] + - ["hudson.search", "Search", "suggest", "(SearchIndex,String)", "summary", "df-generated"] + - ["hudson.search", "Search", "suggest", "(SearchIndex,String,SearchableModelObject)", "summary", "df-generated"] + - ["hudson.search", "SearchFactory", "all", "()", "summary", "df-generated"] + - ["hudson.search", "SearchFactory", "createFor", "(SearchableModelObject)", "summary", "df-generated"] + - ["hudson.search", "SearchIndex", "find", "(String,List)", "summary", "df-generated"] + - ["hudson.search", "SearchIndex", "suggest", "(String,List)", "summary", "df-generated"] + - ["hudson.search", "SearchItem", "getSearchIndex", "()", "summary", "df-generated"] + - ["hudson.search", "SearchItem", "getSearchName", "()", "summary", "df-generated"] + - ["hudson.search", "SearchItem", "getSearchUrl", "()", "summary", "df-generated"] + - ["hudson.search", "SearchItems", "create", "(String,String)", "summary", "df-generated"] + - ["hudson.search", "SearchItems", "create", "(String,String,SearchIndex)", "summary", "df-generated"] + - ["hudson.search", "SearchItems", "create", "(String,String,SearchableModelObject)", "summary", "df-generated"] + - ["hudson.search", "SearchResult", "hasMoreResults", "()", "summary", "df-generated"] + - ["hudson.search", "SearchableModelObject", "getSearch", "()", "summary", "df-generated"] + - ["hudson.search", "UserSearchProperty", "UserSearchProperty", "(boolean)", "summary", "df-generated"] + - ["hudson.search", "UserSearchProperty", "getInsensitiveSearch", "()", "summary", "df-generated"] + - ["hudson.search", "UserSearchProperty", "isCaseInsensitive", "()", "summary", "df-generated"] + - ["hudson.security.captcha", "CaptchaSupport", "all", "()", "summary", "df-generated"] + - ["hudson.security.captcha", "CaptchaSupport", "generateImage", "(String,OutputStream)", "summary", "df-generated"] + - ["hudson.security.captcha", "CaptchaSupport", "validateCaptcha", "(String,String)", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbExclusion", "all", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbExclusion", "process", "(HttpServletRequest,HttpServletResponse,FilterChain)", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbFilter", "getCrumbIssuer", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "all", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "getCrumb", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "getCrumb", "(ServletRequest)", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "getCrumbRequestField", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "initStaplerCrumbIssuer", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "validateCrumb", "(ServletRequest)", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "validateCrumb", "(ServletRequest,MultipartFormDataParser)", "summary", "df-generated"] + - ["hudson.security.csrf", "CrumbIssuer", "validateCrumb", "(ServletRequest,String,String)", "summary", "df-generated"] + - ["hudson.security.csrf", "DefaultCrumbIssuer", "DefaultCrumbIssuer", "(boolean)", "summary", "df-generated"] + - ["hudson.security.csrf", "DefaultCrumbIssuer", "isExcludeClientIPFromCrumb", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "GlobalCrumbIssuerConfiguration", "createDefaultCrumbIssuer", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "GlobalCrumbIssuerConfiguration", "getCrumbIssuer", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "Messages", "DefaultCrumbIssuer_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security.csrf", "Messages", "_DefaultCrumbIssuer_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "ACL", "as2", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "as", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "as", "(User)", "summary", "df-generated"] + - ["hudson.security", "ACL", "checkAnyPermission", "(Permission[])", "summary", "df-generated"] + - ["hudson.security", "ACL", "checkCreatePermission", "(ItemGroup,TopLevelItemDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "checkCreatePermission", "(ViewGroup,ViewDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasAnyPermission", "(Permission[])", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasCreatePermission2", "(Authentication,ItemGroup,TopLevelItemDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasCreatePermission2", "(Authentication,ViewGroup,ViewDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasCreatePermission", "(Authentication,ItemGroup,TopLevelItemDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasCreatePermission", "(Authentication,ViewGroup,ViewDescriptor)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasPermission2", "(Authentication,Permission)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasPermission", "(Authentication,Permission)", "summary", "df-generated"] + - ["hudson.security", "ACL", "hasPermission", "(Permission)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate2", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate2", "(Authentication,Callable)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate2", "(Authentication,Runnable)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate", "(Authentication,Callable)", "summary", "df-generated"] + - ["hudson.security", "ACL", "impersonate", "(Authentication,Runnable)", "summary", "df-generated"] + - ["hudson.security", "ACL", "isAnonymous2", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "isAnonymous", "(Authentication)", "summary", "df-generated"] + - ["hudson.security", "ACL", "lambda2", "(BiFunction)", "summary", "df-generated"] + - ["hudson.security", "ACL", "lambda", "(BiFunction)", "summary", "df-generated"] + - ["hudson.security", "ACLContext", "getPreviousContext", "()", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "checkAnyPermission", "(Permission[])", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "getACL", "()", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "hasAnyPermission", "(Permission[])", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "hasPermission2", "(Authentication,Permission)", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "hasPermission", "(Authentication,Permission)", "summary", "df-generated"] + - ["hudson.security", "AccessControlled", "hasPermission", "(Permission)", "summary", "df-generated"] + - ["hudson.security", "AccessDeniedException2", "report", "(PrintWriter)", "summary", "df-generated"] + - ["hudson.security", "AccessDeniedException2", "reportAsHeaders", "(HttpServletResponse)", "summary", "df-generated"] + - ["hudson.security", "AccessDeniedException3", "report", "(PrintWriter)", "summary", "df-generated"] + - ["hudson.security", "AccessDeniedException3", "reportAsHeaders", "(HttpServletResponse)", "summary", "df-generated"] + - ["hudson.security", "AuthenticationProcessingFilter2", "AuthenticationProcessingFilter2", "(String)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "all", "()", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(AbstractItem)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(Cloud)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(Computer)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(Job)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(Node)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(User)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getACL", "(View)", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getGroups", "()", "summary", "df-generated"] + - ["hudson.security", "AuthorizationStrategy", "getRootACL", "()", "summary", "df-generated"] + - ["hudson.security", "CliAuthenticator", "authenticate", "()", "summary", "df-generated"] + - ["hudson.security", "ContainerAuthentication", "ContainerAuthentication", "(HttpServletRequest)", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "addTo", "(User)", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "addToCurrentUser", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "getEmailAddress", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "getFullName", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "getIdentifier", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "getNickname", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "getPronoun", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "locateUser", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "signin", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService$FederatedIdentity", "toString", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService", "all", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService", "getUrlName", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginService", "getUserPropertyClass", "()", "summary", "df-generated"] + - ["hudson.security", "FederatedLoginServiceUserProperty", "has", "(String)", "summary", "df-generated"] + - ["hudson.security", "FullControlOnceLoggedInAuthorizationStrategy", "isAllowAnonymousRead", "()", "summary", "df-generated"] + - ["hudson.security", "FullControlOnceLoggedInAuthorizationStrategy", "setAllowAnonymousRead", "(boolean)", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "configure", "(StaplerRequest,JSONObject)", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "doConfigure", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "getAgentProtocols", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "getAuthorizationStrategy", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "getMarkupFormatter", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "getSecurityRealm", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "getSlaveAgentPort", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "isDisableRememberMe", "()", "summary", "df-generated"] + - ["hudson.security", "GlobalSecurityConfiguration", "isSlaveAgentPortEnforced", "()", "summary", "df-generated"] + - ["hudson.security", "GroupDetails", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "GroupDetails", "getMembers", "()", "summary", "df-generated"] + - ["hudson.security", "GroupDetails", "getName", "()", "summary", "df-generated"] + - ["hudson.security", "HttpSessionContextIntegrationFilter2", "HttpSessionContextIntegrationFilter2", "(SecurityContextRepository)", "summary", "df-generated"] + - ["hudson.security", "HudsonFilter", "get", "(ServletContext)", "summary", "df-generated"] + - ["hudson.security", "HudsonFilter", "reset", "(SecurityRealm)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$DescriptorImpl", "doCheckAllowsSignup", "(boolean)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "getAuthorities2", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "getAuthorities", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "getProtectedPassword", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "isAccountNonExpired", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "isAccountNonLocked", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "isCredentialsNonExpired", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "isEnabled", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$Details", "isPasswordCorrect", "(String)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$SignupInfo", "SignupInfo", "(FederatedIdentity)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm$SignupInfo", "SignupInfo", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "HudsonPrivateSecurityRealm", "(boolean)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "createAccountByAdmin", "(StaplerRequest,StaplerResponse,String,String)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "createAccountFromSetupWizard", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "doCreateAccount", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "doCreateAccountByAdmin", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "doCreateAccountWithFederatedIdentity", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "doCreateFirstAccount", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "getAllUsers", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "getAllowsSignup", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "isEnableCaptcha", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "isMailerPluginPresent", "()", "summary", "df-generated"] + - ["hudson.security", "HudsonPrivateSecurityRealm", "load", "(String)", "summary", "df-generated"] + - ["hudson.security", "Messages", "AccessDeniedException2_MissingPermission", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "AccessDeniedException_MissingPermissions", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "AuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "FullControlOnceLoggedInAuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "GlobalSecurityConfiguration_Description", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "GlobalSecurityConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_InvalidEmailAddress", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_PasswordNotMatch", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_PasswordRequired", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_TextNotMatchWordInImage", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_UserNameAlreadyTaken", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_UserNameInvalidCharacters", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_UserNameInvalidCharactersCustom", "(Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_CreateAccount_UserNameRequired", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_Details_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_Details_PasswordError", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_ManageUserLinks_Description", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_ManageUserLinks_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_SignupWarning", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "HudsonPrivateSecurityRealm_WouldYouLikeToSignUp", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "LegacyAuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "LegacySecurityRealm_Displayname", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "NoneSecurityRealm_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "Permission_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "UserDetailsServiceProxy_UnableToQuery", "(Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "_AccessDeniedException2_MissingPermission", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "_AccessDeniedException_MissingPermissions", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "_AuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_FullControlOnceLoggedInAuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_GlobalSecurityConfiguration_Description", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_GlobalSecurityConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_InvalidEmailAddress", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_PasswordNotMatch", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_PasswordRequired", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_TextNotMatchWordInImage", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_UserNameAlreadyTaken", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_UserNameInvalidCharacters", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_UserNameInvalidCharactersCustom", "(Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_CreateAccount_UserNameRequired", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_Details_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_Details_PasswordError", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_ManageUserLinks_Description", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_ManageUserLinks_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_SignupWarning", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_HudsonPrivateSecurityRealm_WouldYouLikeToSignUp", "(Object,Object)", "summary", "df-generated"] + - ["hudson.security", "Messages", "_LegacyAuthorizationStrategy_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_LegacySecurityRealm_Displayname", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_NoneSecurityRealm_DisplayName", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_Permission_Permissions_Title", "()", "summary", "df-generated"] + - ["hudson.security", "Messages", "_UserDetailsServiceProxy_UnableToQuery", "(Object)", "summary", "df-generated"] + - ["hudson.security", "Permission", "fromId", "(String)", "summary", "df-generated"] + - ["hudson.security", "Permission", "getAll", "()", "summary", "df-generated"] + - ["hudson.security", "Permission", "getEnabled", "()", "summary", "df-generated"] + - ["hudson.security", "Permission", "isContainedBy", "(PermissionScope)", "summary", "df-generated"] + - ["hudson.security", "Permission", "setEnabled", "(boolean)", "summary", "df-generated"] + - ["hudson.security", "PermissionAdder", "add", "(AuthorizationStrategy,User,Permission)", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "get", "(Class)", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "getAll", "()", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "getOwnerClassName", "()", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "hasPermissionContainedBy", "(PermissionScope)", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "size", "()", "summary", "df-generated"] + - ["hudson.security", "PermissionGroup", "toString", "()", "summary", "df-generated"] + - ["hudson.security", "PermissionScope", "isContainedBy", "(PermissionScope)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", "SecurityComponents", "(AuthenticationManager)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm$SecurityComponents", "SecurityComponents", "(AuthenticationManager,UserDetailsService)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "all", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "allowsSignup", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "canLogOut", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "commenceSignup", "(FederatedIdentity)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "createCliAuthenticator", "(CLICommand)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "createFilter", "(FilterConfig)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "createSecurityComponents", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "doCaptcha", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "doLogout", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getAuthenticationGatewayUrl", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getCaptchaSupportDescriptors", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getFrom", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getGroupIdStrategy", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getLoginUrl", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "getUserIdStrategy", "()", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "loadGroupByGroupname2", "(String,boolean)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "loadGroupByGroupname", "(String)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "loadGroupByGroupname", "(String,boolean)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "loadUserByUsername2", "(String)", "summary", "df-generated"] + - ["hudson.security", "SecurityRealm", "loadUserByUsername", "(String)", "summary", "df-generated"] + - ["hudson.security", "SidACL", "newInheritingACL", "(SidACL)", "summary", "df-generated"] + - ["hudson.security", "SparseACL", "add", "(Sid,Permission,boolean)", "summary", "df-generated"] + - ["hudson.security", "TokenBasedRememberMeServices2", "TokenBasedRememberMeServices2", "(UserDetailsService)", "summary", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException2", "UserMayOrMayNotExistException2", "(String)", "summary", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException2", "UserMayOrMayNotExistException2", "(String,Throwable)", "summary", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException", "UserMayOrMayNotExistException", "(String)", "summary", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException", "UserMayOrMayNotExistException", "(String,Throwable)", "summary", "df-generated"] + - ["hudson.security", "UserMayOrMayNotExistException", "fromSpring", "(UserMayOrMayNotExistException2)", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "getAuthorities", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "getDetails", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "getName", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "getToString", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "isAnonymous", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "isAuthenticated", "()", "summary", "df-generated"] + - ["hudson.security", "WhoAmI", "isHeaderDangerous", "(String)", "summary", "df-generated"] + - ["hudson.slaves", "AbstractCloudImpl", "getInstanceCap", "()", "summary", "df-generated"] + - ["hudson.slaves", "AbstractCloudImpl", "getInstanceCapStr", "()", "summary", "df-generated"] + - ["hudson.slaves", "AbstractCloudSlave", "terminate", "()", "summary", "df-generated"] + - ["hudson.slaves", "ChannelPinger$SetUpRemotePing", "SetUpRemotePing", "(int,int)", "summary", "df-generated"] + - ["hudson.slaves", "ChannelPinger", "install", "(Channel)", "summary", "df-generated"] + - ["hudson.slaves", "ChannelPinger", "setUpPingForChannel", "(Channel,SlaveComputer,int,int,boolean)", "summary", "df-generated"] + - ["hudson.slaves", "Channels", "forProcess", "(String,ExecutorService,InputStream,OutputStream,OutputStream,Proc)", "summary", "df-generated"] + - ["hudson.slaves", "Channels", "forProcess", "(String,ExecutorService,InputStream,OutputStream,Proc)", "summary", "df-generated"] + - ["hudson.slaves", "Channels", "forProcess", "(String,ExecutorService,Process,OutputStream)", "summary", "df-generated"] + - ["hudson.slaves", "Channels", "newJVM", "(String,TaskListener,FilePath,ClasspathBuilder,Map)", "summary", "df-generated"] + - ["hudson.slaves", "Channels", "newJVM", "(String,TaskListener,JVMBuilder,FilePath,ClasspathBuilder)", "summary", "df-generated"] + - ["hudson.slaves", "Cloud$CloudState", "getAdditionalPlannedCapacity", "()", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "canProvision", "(CloudState)", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "canProvision", "(Label)", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "provision", "(CloudState,int)", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "provision", "(Label,int)", "summary", "df-generated"] + - ["hudson.slaves", "Cloud", "registerPermissions", "()", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "canProvision", "(Cloud,CloudState,int)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "canProvision", "(Cloud,Label,int)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "onCommit", "(PlannedNode,Node)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "onComplete", "(PlannedNode,Node)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "onFailure", "(PlannedNode,Throwable)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "onRollback", "(PlannedNode,Node,Throwable)", "summary", "df-generated"] + - ["hudson.slaves", "CloudProvisioningListener", "onStarted", "(Cloud,Label,Collection)", "summary", "df-generated"] + - ["hudson.slaves", "CloudRetentionStrategy", "CloudRetentionStrategy", "(int)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerConnector", "launch", "(String,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerConnectorDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "afterDisconnect", "(SlaveComputer,StreamTaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "afterDisconnect", "(SlaveComputer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "beforeDisconnect", "(SlaveComputer,StreamTaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "beforeDisconnect", "(SlaveComputer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "isLaunchSupported", "()", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "launch", "(SlaveComputer,StreamTaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerLauncher", "launch", "(SlaveComputer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onConfigurationChange", "()", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onLaunchFailure", "(Computer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onOffline", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onOffline", "(Computer,OfflineCause)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onOnline", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onOnline", "(Computer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onTemporarilyOffline", "(Computer,OfflineCause)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "onTemporarilyOnline", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "preLaunch", "(Computer,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "preOnline", "(Computer,Channel,FilePath,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "register", "()", "summary", "df-generated"] + - ["hudson.slaves", "ComputerListener", "unregister", "()", "summary", "df-generated"] + - ["hudson.slaves", "DelegatingComputerLauncher$DescriptorImpl", "applicableDescriptors", "(Slave,SlaveDescriptor)", "summary", "df-generated"] + - ["hudson.slaves", "DelegatingComputerLauncher$DescriptorImpl", "getApplicableDescriptors", "()", "summary", "df-generated"] + - ["hudson.slaves", "EnvironmentVariablesNodeProperty$DescriptorImpl", "getHelpPage", "()", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher$DescriptorImpl", "doCheckWebSocket", "(boolean,String)", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher$DescriptorImpl", "isWorkDirSupported", "()", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", "JNLPLauncher", "(boolean)", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", "getInboundAgentUrl", "()", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", "isWebSocket", "()", "summary", "df-generated"] + - ["hudson.slaves", "JNLPLauncher", "setWebSocket", "(boolean)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "Cloud_ProvisionPermission_Description", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ComputerLauncher_JavaVersionResult", "(Object,Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ComputerLauncher_NoJavaFound", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ComputerLauncher_UnknownJavaVersion", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ComputerLauncher_abortedLaunch", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ComputerLauncher_unexpectedError", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "ConnectionActivityMonitor_OfflineCause", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "DumbSlave_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "EnvironmentVariablesNodeProperty_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "JNLPLauncher_InstanceIdentityRequired", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "JNLPLauncher_TCPPortDisabled", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "JNLPLauncher_TunnelingNotSupported", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "JNLPLauncher_WebsocketNotEnabled", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "JNLPLauncher_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "NodeDescriptor_CheckName_Mandatory", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "NodeProvisioner_EmptyString", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "OfflineCause_LaunchFailed", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "OfflineCause_connection_was_broken_", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "RetentionStrategy_Always_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "RetentionStrategy_Demand_OfflineIdle", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "RetentionStrategy_Demand_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "SimpleScheduledRetentionStrategy_FinishedUpTime", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "SimpleScheduledRetentionStrategy_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "SlaveComputer_DisconnectedBy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_Cloud_ProvisionPermission_Description", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ComputerLauncher_JavaVersionResult", "(Object,Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ComputerLauncher_NoJavaFound", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ComputerLauncher_UnknownJavaVersion", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ComputerLauncher_abortedLaunch", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ComputerLauncher_unexpectedError", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_ConnectionActivityMonitor_OfflineCause", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_DumbSlave_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_EnvironmentVariablesNodeProperty_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_JNLPLauncher_InstanceIdentityRequired", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_JNLPLauncher_TCPPortDisabled", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_JNLPLauncher_TunnelingNotSupported", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_JNLPLauncher_WebsocketNotEnabled", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_JNLPLauncher_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_NodeDescriptor_CheckName_Mandatory", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_NodeProvisioner_EmptyString", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_OfflineCause_LaunchFailed", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_OfflineCause_connection_was_broken_", "(Object)", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_RetentionStrategy_Always_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_RetentionStrategy_Demand_OfflineIdle", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_RetentionStrategy_Demand_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_SimpleScheduledRetentionStrategy_FinishedUpTime", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_SimpleScheduledRetentionStrategy_displayName", "()", "summary", "df-generated"] + - ["hudson.slaves", "Messages", "_SlaveComputer_DisconnectedBy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "allInstantiable", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "doCheckName", "(String)", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "handleNewNodePage", "(ComputerSet,String,StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "isInstantiable", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeDescriptor", "newInstanceDetailPage", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeList$ConverterImpl", "ConverterImpl", "(XStream)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "buildEnvVars", "(EnvVars,TaskListener)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "canTake", "(BuildableItem)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "canTake", "(Task)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "for_", "(Node)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProperty", "setUp", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.slaves", "NodePropertyDescriptor", "isApplicableAsGlobal", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$PlannedNode", "spent", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$Strategy", "apply", "(StrategyState)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getAdditionalPlannedCapacity", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getAvailableExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getBusyExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getConnectingExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getDefinedExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getIdleExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getIdleLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getIdleSnapshot", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getOnlineExecutorsLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getPlannedCapacityLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getPlannedCapacitySnapshot", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getQueueLengthLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getQueueLengthSnapshot", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getTotalLatest", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "getTotalSnapshot", "()", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "recordPendingLaunches", "(Collection)", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner$StrategyState", "recordPendingLaunches", "(PlannedNode[])", "summary", "df-generated"] + - ["hudson.slaves", "NodeProvisioner", "suggestReviewNow", "()", "summary", "df-generated"] + - ["hudson.slaves", "OfflineCause$ChannelTermination", "getShortDescription", "()", "summary", "df-generated"] + - ["hudson.slaves", "OfflineCause$ChannelTermination", "toString", "()", "summary", "df-generated"] + - ["hudson.slaves", "OfflineCause$LaunchFailed", "toString", "()", "summary", "df-generated"] + - ["hudson.slaves", "OfflineCause", "getTime", "()", "summary", "df-generated"] + - ["hudson.slaves", "OfflineCause", "getTimestamp", "()", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy$Demand", "Demand", "(long,long)", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy$Demand", "getIdleDelay", "()", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy$Demand", "getInDemandDelay", "()", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy", "all", "()", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy", "check", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy", "isAcceptingTasks", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy", "isManualLaunchAllowed", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "RetentionStrategy", "start", "(Computer)", "summary", "df-generated"] + - ["hudson.slaves", "SimpleScheduledRetentionStrategy$DescriptorImpl", "doCheck", "(String)", "summary", "df-generated"] + - ["hudson.slaves", "SimpleScheduledRetentionStrategy", "getUpTimeMins", "()", "summary", "df-generated"] + - ["hudson.slaves", "SimpleScheduledRetentionStrategy", "isKeepUpWhenActive", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "doDoDisconnect", "(String)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "doSubmitDescription", "(StaplerResponse,String)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getChannelToMaster", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getClassLoadingCount", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getClassLoadingPrefetchCacheCount", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getClassLoadingTime", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getEnvVarsFull", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getJnlpMac", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getOSDescription", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getResourceLoadingCount", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getResourceLoadingTime", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getSlaveVersion", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "getSystemInfoExtensions", "()", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "setAcceptingTasks", "(boolean)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "setChannel", "(ChannelBuilder,CommandTransport,Listener)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "setChannel", "(InputStream,OutputStream,OutputStream,Listener)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "setChannel", "(InputStream,OutputStream,TaskListener,Listener)", "summary", "df-generated"] + - ["hudson.slaves", "SlaveComputer", "tryReconnect", "()", "summary", "df-generated"] + - ["hudson.slaves", "WorkspaceList$Lease", "release", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver$DescriptorImpl", "doCheckArtifacts", "(AbstractProject,String,String)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "getAllowEmptyArchive", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isCaseSensitive", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isDefaultExcludes", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isFingerprint", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isFollowSymlinks", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isLatestOnly", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "isOnlyIfSuccessful", "()", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setAllowEmptyArchive", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setCaseSensitive", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setDefaultExcludes", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setFingerprint", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setFollowSymlinks", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "ArtifactArchiver", "setOnlyIfSuccessful", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "BatchFile$DescriptorImpl", "doCheckUnstableReturn", "(String)", "summary", "df-generated"] + - ["hudson.tasks", "BatchFile$DescriptorImpl", "getApplicableLocalRules", "()", "summary", "df-generated"] + - ["hudson.tasks", "BatchFile", "getUnstableReturn", "()", "summary", "df-generated"] + - ["hudson.tasks", "BatchFile", "setUnstableReturn", "(Integer)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStep", "getProjectAction", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStep", "getProjectActions", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStep", "getRequiredMonitorService", "()", "summary", "df-generated"] + - ["hudson.tasks", "BuildStep", "perform", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStep", "prebuild", "(AbstractBuild,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStepCompatibilityLayer", "getProjectAction", "(Project)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStepCompatibilityLayer", "perform", "(Build,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStepCompatibilityLayer", "prebuild", "(Build,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStepDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["hudson.tasks", "BuildStepMonitor", "perform", "(BuildStep,AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger$DescriptorImpl", "doAutoCompleteChildProjects", "(String,Item,ItemGroup)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger$DescriptorImpl", "doCheck", "(AbstractProject,String)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger$DescriptorImpl", "showEvenIfUnstableOption", "(Class)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "execute", "(AbstractBuild,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "execute", "(AbstractBuild,BuildListener,BuildTrigger)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "getChildJobs", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "getChildProjects", "()", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "getChildProjects", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "getChildProjects", "(ItemGroup)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "hasSame", "(AbstractProject,Collection)", "summary", "df-generated"] + - ["hudson.tasks", "BuildTrigger", "hasSame", "(Collection)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper$Environment", "tearDown", "(Build,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "all", "()", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "getProjectAction", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "getProjectActions", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "makeBuildVariables", "(AbstractBuild,Map)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "makeSensitiveBuildVariables", "(AbstractBuild,Set)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "preCheckout", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapper", "setUp", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrapperDescriptor", "isApplicable", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "BuildWrappers", "getFor", "(AbstractProject)", "summary", "df-generated"] + - ["hudson.tasks", "Builder", "all", "()", "summary", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", "buildCommandLine", "(FilePath)", "summary", "df-generated"] + - ["hudson.tasks", "CommandInterpreter", "perform", "(AbstractBuild,Launcher,TaskListener)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter$DescriptorImpl", "doCheck", "(AbstractProject,String)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter$DescriptorImpl", "doCheckTargets", "(AbstractProject,String)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", "add", "(Map)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", "getDependencies", "()", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter$FingerprintAction", "getDependencies", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter", "getCaseSensitive", "()", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter", "getDefaultExcludes", "()", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter", "getRecordBuildArtifacts", "()", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter", "setCaseSensitive", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "Fingerprinter", "setDefaultExcludes", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "LogRotator", "(String,String,String,String)", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "LogRotator", "(int,int)", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "LogRotator", "(int,int,int,int)", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getArtifactDaysToKeep", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getArtifactDaysToKeepStr", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getArtifactNumToKeep", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getArtifactNumToKeepStr", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getDaysToKeep", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getDaysToKeepStr", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getNumToKeep", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "getNumToKeepStr", "()", "summary", "df-generated"] + - ["hudson.tasks", "LogRotator", "parse", "(String)", "summary", "df-generated"] + - ["hudson.tasks", "Maven$DescriptorImpl", "getDefaultGlobalSettingsProvider", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven$DescriptorImpl", "getDefaultSettingsProvider", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven$DescriptorImpl", "setInstallations", "(MavenInstallation[])", "summary", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", "getExecutable", "(Launcher)", "summary", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", "getExists", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", "isMaven2_1", "(Launcher)", "summary", "df-generated"] + - ["hudson.tasks", "Maven$MavenInstallation", "meetsMavenReqVersion", "(Launcher,int)", "summary", "df-generated"] + - ["hudson.tasks", "Maven$ProjectWithMaven", "inferMavenInstallation", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven", "getMaven", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven", "isInjectBuildVariables", "()", "summary", "df-generated"] + - ["hudson.tasks", "Maven", "setUsePrivateRepository", "(boolean)", "summary", "df-generated"] + - ["hudson.tasks", "Maven", "usesPrivateRepository", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_ExecFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_ExecutableNotFound", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_GlobalConfigNeeded", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_NotADirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_NotAntDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Ant_ProjectConfigNeeded", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "ArtifactArchiver_ARCHIVING_ARTIFACTS", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "ArtifactArchiver_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "ArtifactArchiver_NoIncludes", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "ArtifactArchiver_NoMatchFound", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "ArtifactArchiver_SkipBecauseOnlyIfSuccessful", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BatchFile_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BatchFile_invalid_exit_code_range", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BatchFile_invalid_exit_code_zero", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_InQueue", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_NoProjectSpecified", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_NoSuchProject", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_NotBuildable", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_Triggering", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_ok_ancestor_is_null", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "BuildTrigger_you_have_no_permission_to_build_", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "CommandInterpreter_CommandFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "CommandInterpreter_UnableToDelete", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "CommandInterpreter_UnableToProduceScript", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_Aborted", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_Action_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_DigestFailed", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_Failed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_FailedFor", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Fingerprinter_Recording", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "InstallFromApache", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_DisplayName_Generic", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_DisplayName_Javadoc", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_NoMatchFound", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_Publishing", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "JavadocArchiver_UnableToCopy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Maven_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Maven_ExecFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Maven_NoExecutable", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Maven_NotMavenDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Shell_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Shell_invalid_exit_code_range", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "Shell_invalid_exit_code_zero", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "TestJavadocArchiver_DisplayName_Javadoc", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_ExecFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_ExecutableNotFound", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_GlobalConfigNeeded", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_NotADirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_NotAntDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Ant_ProjectConfigNeeded", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_ArtifactArchiver_ARCHIVING_ARTIFACTS", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_ArtifactArchiver_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_ArtifactArchiver_NoIncludes", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_ArtifactArchiver_NoMatchFound", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_ArtifactArchiver_SkipBecauseOnlyIfSuccessful", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BatchFile_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BatchFile_invalid_exit_code_range", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BatchFile_invalid_exit_code_zero", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_InQueue", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_NoProjectSpecified", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_NoSuchProject", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_NotBuildable", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_Triggering", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_ok_ancestor_is_null", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_BuildTrigger_you_have_no_permission_to_build_", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_CommandInterpreter_CommandFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_CommandInterpreter_UnableToDelete", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_CommandInterpreter_UnableToProduceScript", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_Aborted", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_Action_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_DigestFailed", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_Failed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_FailedFor", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Fingerprinter_Recording", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_InstallFromApache", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_DisplayName_Generic", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_DisplayName_Javadoc", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_NoMatchFound", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_Publishing", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_JavadocArchiver_UnableToCopy", "(Object,Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Maven_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Maven_ExecFailed", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Maven_NoExecutable", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Maven_NotMavenDirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Shell_DisplayName", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Shell_invalid_exit_code_range", "(Object)", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_Shell_invalid_exit_code_zero", "()", "summary", "df-generated"] + - ["hudson.tasks", "Messages", "_TestJavadocArchiver_DisplayName_Javadoc", "()", "summary", "df-generated"] + - ["hudson.tasks", "Publisher", "all", "()", "summary", "df-generated"] + - ["hudson.tasks", "Publisher", "needsToRunAfterFinalized", "()", "summary", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", "doCheckShell", "(String)", "summary", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", "doCheckUnstableReturn", "(String)", "summary", "df-generated"] + - ["hudson.tasks", "Shell$DescriptorImpl", "getApplicableLocalRules", "()", "summary", "df-generated"] + - ["hudson.tasks", "Shell", "getUnstableReturn", "()", "summary", "df-generated"] + - ["hudson.tasks", "Shell", "setUnstableReturn", "(Integer)", "summary", "df-generated"] + - ["hudson.tasks", "UserAvatarResolver", "all", "()", "summary", "df-generated"] + - ["hudson.tasks", "UserAvatarResolver", "findAvatarFor", "(User,int,int)", "summary", "df-generated"] + - ["hudson.tasks", "UserAvatarResolver", "resolve", "(User,String)", "summary", "df-generated"] + - ["hudson.tasks", "UserAvatarResolver", "resolveOrNull", "(User,String)", "summary", "df-generated"] + - ["hudson.tasks", "UserNameResolver", "all", "()", "summary", "df-generated"] + - ["hudson.tasks", "UserNameResolver", "findNameFor", "(User)", "summary", "df-generated"] + - ["hudson.tasks", "UserNameResolver", "resolve", "(User)", "summary", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller$Descriptor", "doCheckCommand", "(String)", "summary", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller$Descriptor", "doCheckToolHome", "(String)", "summary", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller", "getCommandCall", "(FilePath)", "summary", "df-generated"] + - ["hudson.tools", "AbstractCommandInstaller", "getCommandFileExtension", "()", "summary", "df-generated"] + - ["hudson.tools", "DownloadFromUrlInstaller$DescriptorImpl", "createDownloadable", "()", "summary", "df-generated"] + - ["hudson.tools", "DownloadFromUrlInstaller$DescriptorImpl", "getInstallables", "()", "summary", "df-generated"] + - ["hudson.tools", "DownloadFromUrlInstaller", "getInstallable", "()", "summary", "df-generated"] + - ["hudson.tools", "InstallSourceProperty", "InstallSourceProperty", "(List)", "summary", "df-generated"] + - ["hudson.tools", "Messages", "BatchCommandInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "CannotBeInstalled", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.tools", "Messages", "CommandInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "CommandInstaller_no_command", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "CommandInstaller_no_toolHome", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "InstallSourceProperty_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ToolDescriptor_NotADirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ToolLocationNodeProperty_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ZipExtractionInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ZipExtractionInstaller_bad_connection", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ZipExtractionInstaller_could_not_connect", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "ZipExtractionInstaller_malformed_url", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_BatchCommandInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_CannotBeInstalled", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_CommandInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_CommandInstaller_no_command", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_CommandInstaller_no_toolHome", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_InstallSourceProperty_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ToolDescriptor_NotADirectory", "(Object)", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ToolLocationNodeProperty_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ZipExtractionInstaller_DescriptorImpl_displayName", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ZipExtractionInstaller_bad_connection", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ZipExtractionInstaller_could_not_connect", "()", "summary", "df-generated"] + - ["hudson.tools", "Messages", "_ZipExtractionInstaller_malformed_url", "()", "summary", "df-generated"] + - ["hudson.tools", "PropertyDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["hudson.tools", "ToolDescriptor", "doCheckHome", "(File)", "summary", "df-generated"] + - ["hudson.tools", "ToolDescriptor", "doCheckName", "(String)", "summary", "df-generated"] + - ["hudson.tools", "ToolDescriptor", "getDefaultInstallers", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolDescriptor", "getDefaultProperties", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolDescriptor", "getPropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallation", "all", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallation", "buildEnvVars", "(EnvVars)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstaller", "appliesTo", "(Node)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstaller", "performInstallation", "(ToolInstallation,Node,TaskListener)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallerDescriptor", "all", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallerDescriptor", "doAutoCompleteLabel", "(String)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallerDescriptor", "doCheckLabel", "(String)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallerDescriptor", "for_", "(Class)", "summary", "df-generated"] + - ["hudson.tools", "ToolInstallerDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["hudson.tools", "ToolLocationNodeProperty$DescriptorImpl", "getToolDescriptors", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolLocationTranslator", "all", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolLocationTranslator", "getToolHome", "(Node,ToolInstallation,TaskListener)", "summary", "df-generated"] + - ["hudson.tools", "ToolProperty", "all", "()", "summary", "df-generated"] + - ["hudson.tools", "ToolProperty", "type", "()", "summary", "df-generated"] + - ["hudson.tools", "ZipExtractionInstaller$DescriptorImpl", "doCheckUrl", "(String)", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_AdministrativeMonitorImpl_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_BuildAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_SCMTriggerCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_getDisplayName", "(Object)", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_no_schedules_hooks", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SCMTrigger_no_schedules_no_hooks", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "SlowTriggerAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_MissingWhitespace", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_TimerTriggerCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_no_schedules_so_will_never_run", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_the_specified_cron_tab_is_rare_or_impossible", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "TimerTrigger_would_last_have_run_at_would_next_run_at", "(Object,Object)", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "Trigger_init", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_AdministrativeMonitorImpl_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_BuildAction_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_SCMTriggerCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_getDisplayName", "(Object)", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_no_schedules_hooks", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SCMTrigger_no_schedules_no_hooks", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_SlowTriggerAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_DisplayName", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_MissingWhitespace", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_TimerTriggerCause_ShortDescription", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_no_schedules_so_will_never_run", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_the_specified_cron_tab_is_rare_or_impossible", "()", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_TimerTrigger_would_last_have_run_at_would_next_run_at", "(Object,Object)", "summary", "df-generated"] + - ["hudson.triggers", "Messages", "_Trigger_init", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", "doPollingLog", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", "getPollingLogFile", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$BuildAction", "writePollingLogTo", "(long,XMLOutput)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "clogCheck", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "doCheckPollingThreadCount", "(String)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "doCheckScmpoll_spec", "(String,boolean,Item)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "getItemsBeingPolled", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "getPollingThreadCount", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "getRunners", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "isClogged", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "isPollingThreadCountOptionVisible", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$DescriptorImpl", "setPollingThreadCount", "(int)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$Runner", "getDuration", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$Runner", "getLogFile", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$Runner", "getStartTime", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$Runner", "getTarget", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMAction", "getItem", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMAction", "getLog", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMAction", "getOwner", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMAction", "writeLogTo", "(XMLOutput)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger$SCMTriggerCause", "SCMTriggerCause", "(File)", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger", "isIgnorePostCommitHooks", "()", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger", "run", "(Action[])", "summary", "df-generated"] + - ["hudson.triggers", "SCMTrigger", "setIgnorePostCommitHooks", "(boolean)", "summary", "df-generated"] + - ["hudson.triggers", "SafeTimerTask", "doRun", "()", "summary", "df-generated"] + - ["hudson.triggers", "SafeTimerTask", "getLogsRoot", "()", "summary", "df-generated"] + - ["hudson.triggers", "SafeTimerTask", "of", "(ExceptionRunnable)", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor$Value", "getDuration", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor$Value", "getTimeString", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor$Value", "getTrigger", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor", "clear", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor", "doClear", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor", "getInstance", "()", "summary", "df-generated"] + - ["hudson.triggers", "SlowTriggerAdminMonitor", "report", "(Class,String,long)", "summary", "df-generated"] + - ["hudson.triggers", "TimerTrigger$DescriptorImpl", "doCheck", "(String,Item)", "summary", "df-generated"] + - ["hudson.triggers", "TimerTrigger$DescriptorImpl", "doCheckSpec", "(String,Item)", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "all", "()", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "checkTriggers", "(Calendar)", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "for_", "(Item)", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "getProjectAction", "()", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "getProjectActions", "()", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "run", "()", "summary", "df-generated"] + - ["hudson.triggers", "Trigger", "stop", "()", "summary", "df-generated"] + - ["hudson.triggers", "TriggerDescriptor", "isApplicable", "(Item)", "summary", "df-generated"] + - ["hudson.triggers", "Triggers", "getApplicableTriggers", "(Item)", "summary", "df-generated"] + - ["hudson.util.io", "Archiver", "countEntries", "()", "summary", "df-generated"] + - ["hudson.util.io", "ArchiverFactory", "create", "(OutputStream)", "summary", "df-generated"] + - ["hudson.util.io", "ParserConfigurator", "all", "()", "summary", "df-generated"] + - ["hudson.util.io", "ParserConfigurator", "applyConfiguration", "(SAXReader,Object)", "summary", "df-generated"] + - ["hudson.util.io", "ParserConfigurator", "configure", "(SAXReader,Object)", "summary", "df-generated"] + - ["hudson.util.io", "ReopenableFileOutputStream", "rewind", "()", "summary", "df-generated"] + - ["hudson.util.io", "ReopenableRotatingFileOutputStream", "deleteAll", "()", "summary", "df-generated"] + - ["hudson.util.io", "RewindableFileOutputStream", "rewind", "()", "summary", "df-generated"] + - ["hudson.util.io", "RewindableRotatingFileOutputStream", "deleteAll", "()", "summary", "df-generated"] + - ["hudson.util.jna", "DotNet", "isInstalled", "(int,int)", "summary", "df-generated"] + - ["hudson.util.jna", "DotNet", "isInstalled", "(int,int,String,IJIAuthInfo)", "summary", "df-generated"] + - ["hudson.util.jna", "InitializationErrorInvocationHandler", "create", "(Class,Throwable)", "summary", "df-generated"] + - ["hudson.util.jna", "JnaException", "JnaException", "(int)", "summary", "df-generated"] + - ["hudson.util.jna", "JnaException", "getErrorCode", "()", "summary", "df-generated"] + - ["hudson.util.jna", "Kernel32Utils", "createSymbolicLink", "(File,String,boolean)", "summary", "df-generated"] + - ["hudson.util.jna", "Kernel32Utils", "getTempDir", "()", "summary", "df-generated"] + - ["hudson.util.jna", "Kernel32Utils", "getWin32FileAttributes", "(File)", "summary", "df-generated"] + - ["hudson.util.jna", "Kernel32Utils", "isJunctionOrSymlink", "(File)", "summary", "df-generated"] + - ["hudson.util.jna", "Kernel32Utils", "waitForExitProcess", "(Pointer)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "delete", "()", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "deleteValue", "(String)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "dispose", "()", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "getIntValue", "(String)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "getStringValue", "(String)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "getSubKeys", "()", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "getValues", "()", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "setValue", "(String,String)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "setValue", "(String,int)", "summary", "df-generated"] + - ["hudson.util.jna", "RegistryKey", "valueExists", "(String)", "summary", "df-generated"] + - ["hudson.util.jna", "WinIOException", "WinIOException", "(Throwable)", "summary", "df-generated"] + - ["hudson.util.jna", "WinIOException", "getErrorCode", "()", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableListConverter", "ImmutableListConverter", "(Mapper,ReflectionProvider)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableListConverter", "ImmutableListConverter", "(XStream)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableMapConverter", "ImmutableMapConverter", "(Mapper,ReflectionProvider)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableMapConverter", "ImmutableMapConverter", "(XStream)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableSetConverter", "ImmutableSetConverter", "(Mapper,ReflectionProvider)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableSetConverter", "ImmutableSetConverter", "(XStream)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableSortedSetConverter", "ImmutableSortedSetConverter", "(Mapper,ReflectionProvider)", "summary", "df-generated"] + - ["hudson.util.xstream", "ImmutableSortedSetConverter", "ImmutableSortedSetConverter", "(XStream)", "summary", "df-generated"] + - ["hudson.util", "AlternativeUiTextProvider", "all", "()", "summary", "df-generated"] + - ["hudson.util", "AlternativeUiTextProvider", "get", "(Message,Object)", "summary", "df-generated"] + - ["hudson.util", "AlternativeUiTextProvider", "getText", "(Message,Object)", "summary", "df-generated"] + - ["hudson.util", "Area", "Area", "(int,int)", "summary", "df-generated"] + - ["hudson.util", "Area", "area", "()", "summary", "df-generated"] + - ["hudson.util", "Area", "parse", "(String)", "summary", "df-generated"] + - ["hudson.util", "Area", "toString", "()", "summary", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", "clear", "()", "summary", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", "hasMaskedArguments", "()", "summary", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", "toMaskArray", "()", "summary", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", "toWindowsCommand", "()", "summary", "df-generated"] + - ["hudson.util", "ArgumentListBuilder", "toWindowsCommand", "(boolean)", "summary", "df-generated"] + - ["hudson.util", "AtomicFileWriter", "abort", "()", "summary", "df-generated"] + - ["hudson.util", "AtomicFileWriter", "commit", "()", "summary", "df-generated"] + - ["hudson.util", "BootFailure", "publish", "(ServletContext,File)", "summary", "df-generated"] + - ["hudson.util", "ByteArrayOutputStream2", "ByteArrayOutputStream2", "(int)", "summary", "df-generated"] + - ["hudson.util", "ChartUtil", "adjustChebyshev", "(CategoryDataset,NumberAxis)", "summary", "df-generated"] + - ["hudson.util", "ChartUtil", "generateClickableMap", "(StaplerRequest,StaplerResponse,JFreeChart,Area)", "summary", "df-generated"] + - ["hudson.util", "ChartUtil", "generateClickableMap", "(StaplerRequest,StaplerResponse,JFreeChart,int,int)", "summary", "df-generated"] + - ["hudson.util", "ChartUtil", "generateGraph", "(StaplerRequest,StaplerResponse,JFreeChart,Area)", "summary", "df-generated"] + - ["hudson.util", "ChartUtil", "generateGraph", "(StaplerRequest,StaplerResponse,JFreeChart,int,int)", "summary", "df-generated"] + - ["hudson.util", "ChunkedOutputStream", "finish", "()", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "ClockDifference", "(long)", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "abs", "()", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "isDangerous", "()", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "toHtml", "()", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "toHtml", "(ClockDifference)", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "toHtml", "(Node)", "summary", "df-generated"] + - ["hudson.util", "ClockDifference", "toString", "()", "summary", "df-generated"] + - ["hudson.util", "ColorPalette", "apply", "(LineAndShapeRenderer)", "summary", "df-generated"] + - ["hudson.util", "ComboBoxModel", "ComboBoxModel", "(int)", "summary", "df-generated"] + - ["hudson.util", "CompressedFile", "compress", "()", "summary", "df-generated"] + - ["hudson.util", "CompressedFile", "loadAsString", "()", "summary", "df-generated"] + - ["hudson.util", "CompressedFile", "read", "()", "summary", "df-generated"] + - ["hudson.util", "CompressedFile", "write", "()", "summary", "df-generated"] + - ["hudson.util", "ConsistentHash", "ConsistentHash", "(int)", "summary", "df-generated"] + - ["hudson.util", "ConsistentHash", "countAllPoints", "()", "summary", "df-generated"] + - ["hudson.util", "ConsistentHash", "list", "(String)", "summary", "df-generated"] + - ["hudson.util", "ConsistentHash", "list", "(int)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "clear", "()", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "contains", "(Object)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "isEmpty", "()", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "remove", "(Object)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "size", "()", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteList", "toString", "()", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Hash$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteMap$Tree$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "CopyOnWriteMap", "toString", "()", "summary", "df-generated"] + - ["hudson.util", "DataSetBuilder", "build", "()", "summary", "df-generated"] + - ["hudson.util", "DescribableList$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "buildDependencyGraph", "(AbstractProject,DependencyGraph)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "contains", "(Descriptor)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "rebuild", "(StaplerRequest,JSONObject,List)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "rebuild", "(StaplerRequest,JSONObject,List,String)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "rebuildHetero", "(StaplerRequest,JSONObject,Collection,String)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "remove", "(Descriptor)", "summary", "df-generated"] + - ["hudson.util", "DescribableList", "replace", "(Describable)", "summary", "df-generated"] + - ["hudson.util", "DescriptorList", "DescriptorList", "(Class)", "summary", "df-generated"] + - ["hudson.util", "DescriptorList", "DescriptorList", "(Descriptor[])", "summary", "df-generated"] + - ["hudson.util", "DescriptorList", "load", "(Class)", "summary", "df-generated"] + - ["hudson.util", "DescriptorList", "newInstanceFromRadioList", "(JSONObject)", "summary", "df-generated"] + - ["hudson.util", "DescriptorList", "newInstanceFromRadioList", "(JSONObject,String)", "summary", "df-generated"] + - ["hudson.util", "DirScanner", "scan", "(File,FileVisitor)", "summary", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", "doIgnore", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", "getId", "()", "summary", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", "init", "()", "summary", "df-generated"] + - ["hudson.util", "DoubleLaunchChecker", "schedule", "()", "summary", "df-generated"] + - ["hudson.util", "EditDistance", "editDistance", "(String,String)", "summary", "df-generated"] + - ["hudson.util", "ErrorObject", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "FileVisitor", "understandsSymlink", "()", "summary", "df-generated"] + - ["hudson.util", "FileVisitor", "visit", "(File,String)", "summary", "df-generated"] + - ["hudson.util", "FileVisitor", "visitSymlink", "(File,String,String)", "summary", "df-generated"] + - ["hudson.util", "FormApply", "applyResponse", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormApply", "isApply", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson.util", "FormApply", "success", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "error", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "error", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "errorWithMarkup", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "ok", "()", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "ok", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "ok", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "okWithMarkup", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "process", "()", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "respond", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "warning", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "warning", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFieldValidator", "warningWithMarkup", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "error", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "error", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "error", "(Throwable,String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "error", "(Throwable,String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "getKind", "()", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "isSelectionCleared", "()", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "renderHtml", "()", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "respond", "(Kind,String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "warning", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "warning", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "warning", "(Throwable,String)", "summary", "df-generated"] + - ["hudson.util", "FormFillFailure", "warning", "(Throwable,String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormValidation$FileValidator", "validate", "(File)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "error", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "error", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "error", "(Throwable,String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "error", "(Throwable,String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "ok", "()", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "ok", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "ok", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "renderHtml", "()", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "respond", "(Kind,String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateBase64", "(String,boolean,boolean,String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateExecutable", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateExecutable", "(String,FileValidator)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateIntegerInRange", "(String,int,int)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateNonNegativeInteger", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validatePositiveInteger", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "validateRequired", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "warning", "(String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "warning", "(String,Object[])", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "warning", "(Throwable,String)", "summary", "df-generated"] + - ["hudson.util", "FormValidation", "warning", "(Throwable,String,Object[])", "summary", "df-generated"] + - ["hudson.util", "Futures", "precomputed", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Graph", "doMap", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "Graph", "doPng", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "Graph", "safeDimension", "(int,int,int,int)", "summary", "df-generated"] + - ["hudson.util", "HeadBufferingStream", "HeadBufferingStream", "(InputStream,int)", "summary", "df-generated"] + - ["hudson.util", "HeadBufferingStream", "fillSide", "()", "summary", "df-generated"] + - ["hudson.util", "HttpResponses", "okJSON", "()", "summary", "df-generated"] + - ["hudson.util", "HttpResponses", "okJSON", "(Map)", "summary", "df-generated"] + - ["hudson.util", "HttpResponses", "staticResource", "(File)", "summary", "df-generated"] + - ["hudson.util", "HudsonIsLoading", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "HudsonIsRestarting", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "IOException2", "IOException2", "(String,Throwable)", "summary", "df-generated"] + - ["hudson.util", "IOException2", "IOException2", "(Throwable)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "closeQuietly", "(InputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "closeQuietly", "(OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "closeQuietly", "(Reader)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "closeQuietly", "(Writer)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "contentEquals", "(InputStream,InputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "contentEquals", "(Reader,Reader)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "copy", "(File,OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "copy", "(InputStream,File)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "copy", "(Reader,OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "copy", "(Reader,OutputStream,String)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "drain", "(InputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "isAbsolute", "(String)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "mkdirs", "(File)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "mode", "(File)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "toByteArray", "(InputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(String,OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(String,OutputStream,String)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(StringBuffer,OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(StringBuffer,OutputStream,String)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(char[],OutputStream)", "summary", "df-generated"] + - ["hudson.util", "IOUtils", "write", "(char[],OutputStream,String)", "summary", "df-generated"] + - ["hudson.util", "IncompatibleAntVersionDetected", "IncompatibleAntVersionDetected", "(Class)", "summary", "df-generated"] + - ["hudson.util", "IncompatibleAntVersionDetected", "getWhereAntIsLoaded", "()", "summary", "df-generated"] + - ["hudson.util", "IncompatibleServletVersionDetected", "IncompatibleServletVersionDetected", "(Class)", "summary", "df-generated"] + - ["hudson.util", "IncompatibleServletVersionDetected", "getWhereServletIsLoaded", "()", "summary", "df-generated"] + - ["hudson.util", "IncompatibleVMDetected", "getSystemProperties", "()", "summary", "df-generated"] + - ["hudson.util", "InterceptingProxy", "wrap", "(Class,Object)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "empty", "()", "summary", "df-generated"] + - ["hudson.util", "Iterators", "limit", "(Iterator,CountingPredicate)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "readOnly", "(Iterator)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "removeDups", "(Iterable)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "reverse", "(List)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "reverseSequence", "(int,int)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "reverseSequence", "(int,int,int)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "sequence", "(Iterable[])", "summary", "df-generated"] + - ["hudson.util", "Iterators", "sequence", "(int,int)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "sequence", "(int,int,int)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "skip", "(Iterator,int)", "summary", "df-generated"] + - ["hudson.util", "Iterators", "wrap", "(Iterable)", "summary", "df-generated"] + - ["hudson.util", "KeyedDataStorage", "getPerformanceStats", "()", "summary", "df-generated"] + - ["hudson.util", "KeyedDataStorage", "resetPerformanceStats", "()", "summary", "df-generated"] + - ["hudson.util", "LRUStringConverter", "LRUStringConverter", "(int)", "summary", "df-generated"] + - ["hudson.util", "ListBoxModel", "ListBoxModel", "(int)", "summary", "df-generated"] + - ["hudson.util", "ListBoxModel", "writeTo", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "LogTaskListener", "LogTaskListener", "(Logger,Level)", "summary", "df-generated"] + - ["hudson.util", "Messages", "ClockDifference_Ahead", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "ClockDifference_Behind", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "ClockDifference_Failed", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "ClockDifference_InSync", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "FormFieldValidator_did_not_manage_to_validate_may_be_too_sl", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "FormValidation_Error_Details", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "FormValidation_ValidateRequired", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "HttpResponses_Saved", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_Attempt", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_AttemptFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_CallingListener", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_ExceptionFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_ExceptionThrown", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_Interruption", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_NoSuccess", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_Sleeping", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "Retrier_Success", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_ClockDifference_Ahead", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_ClockDifference_Behind", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_ClockDifference_Failed", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "_ClockDifference_InSync", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "_FormFieldValidator_did_not_manage_to_validate_may_be_too_sl", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_FormValidation_Error_Details", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "_FormValidation_ValidateRequired", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "_HttpResponses_Saved", "()", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_Attempt", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_AttemptFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_CallingListener", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_ExceptionFailed", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_ExceptionThrown", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_Interruption", "(Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_NoSuccess", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_Sleeping", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "Messages", "_Retrier_Success", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "MultipartFormDataParser", "MultipartFormDataParser", "(HttpServletRequest)", "summary", "df-generated"] + - ["hudson.util", "MultipartFormDataParser", "cleanUp", "()", "summary", "df-generated"] + - ["hudson.util", "MultipartFormDataParser", "get", "(String)", "summary", "df-generated"] + - ["hudson.util", "MultipartFormDataParser", "isMultiPartForm", "(String)", "summary", "df-generated"] + - ["hudson.util", "NoOverlapCategoryAxis", "NoOverlapCategoryAxis", "(String)", "summary", "df-generated"] + - ["hudson.util", "NoTempDir", "getTempDir", "()", "summary", "df-generated"] + - ["hudson.util", "OneShotEvent", "block", "()", "summary", "df-generated"] + - ["hudson.util", "OneShotEvent", "block", "(long)", "summary", "df-generated"] + - ["hudson.util", "OneShotEvent", "isSignaled", "()", "summary", "df-generated"] + - ["hudson.util", "OneShotEvent", "signal", "()", "summary", "df-generated"] + - ["hudson.util", "PackedMap$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "PersistedList$ConverterImpl", "ConverterImpl", "(Mapper)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "get", "(Class)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "getAll", "(Class)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "remove", "(Class)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "removeAll", "(Class)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "replace", "(Object,Object)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "replaceBy", "(Collection)", "summary", "df-generated"] + - ["hudson.util", "PersistedList", "toString", "()", "summary", "df-generated"] + - ["hudson.util", "PluginServletFilter", "addFilter", "(Filter)", "summary", "df-generated"] + - ["hudson.util", "PluginServletFilter", "cleanUp", "()", "summary", "df-generated"] + - ["hudson.util", "PluginServletFilter", "hasFilter", "(Filter)", "summary", "df-generated"] + - ["hudson.util", "PluginServletFilter", "removeFilter", "(Filter)", "summary", "df-generated"] + - ["hudson.util", "ProcessKiller", "all", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessKiller", "kill", "(OSProcess)", "summary", "df-generated"] + - ["hudson.util", "ProcessKillingVeto", "all", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessKillingVeto", "vetoProcessKilling", "(IOSProcess)", "summary", "df-generated"] + - ["hudson.util", "ProcessTree$OSProcess", "getChildren", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTree$OSProcess", "hasMatchingEnvVars", "(Map)", "summary", "df-generated"] + - ["hudson.util", "ProcessTree$Remote", "Remote", "(ProcessTree,Channel)", "summary", "df-generated"] + - ["hudson.util", "ProcessTree$Remote", "Remote", "(ProcessTree,Channel,boolean)", "summary", "df-generated"] + - ["hudson.util", "ProcessTree", "get", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTree", "get", "(Process)", "summary", "df-generated"] + - ["hudson.util", "ProcessTree", "killAll", "(Process,Map)", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "act", "(ProcessCallable)", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "getArguments", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "getEnvironmentVariables", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "getParent", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "getPid", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "kill", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IOSProcess", "killRecursively", "()", "summary", "df-generated"] + - ["hudson.util", "ProcessTreeRemoting$IProcessTree", "killAll", "(Map)", "summary", "df-generated"] + - ["hudson.util", "Protector", "protect", "(String)", "summary", "df-generated"] + - ["hudson.util", "Protector", "unprotect", "(String)", "summary", "df-generated"] + - ["hudson.util", "QueryParameterMap", "QueryParameterMap", "(HttpServletRequest)", "summary", "df-generated"] + - ["hudson.util", "QueryParameterMap", "QueryParameterMap", "(String)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "convertHexDigit", "(byte)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "getDouble", "()", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "getSingle", "()", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "quote", "(String)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "quote", "(StringBuffer,String)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "setDouble", "(boolean)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "setSingle", "(boolean)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "tokenize", "(String)", "summary", "df-generated"] + - ["hudson.util", "QuotedStringTokenizer", "tokenize", "(String,String)", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", "annotation", "(Class)", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", "index", "()", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils$Parameter", "type", "()", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils", "getPublicMethodNamed", "(Class,String)", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils", "getPublicProperty", "(Object,String)", "summary", "df-generated"] + - ["hudson.util", "ReflectionUtils", "getVmDefaultValueForPrimitiveType", "(Class)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics$HeapDump", "doHeapDump", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics$HeapDump", "doIndex", "(StaplerResponse)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics$HeapDump", "obtain", "()", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics", "executeGroovy", "(String,VirtualChannel)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics", "getHeapDump", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics", "getSystemProperties", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics", "getThreadDump", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson.util", "RemotingDiagnostics", "getThreadDumpAsync", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson.util", "Retrier", "start", "()", "summary", "df-generated"] + - ["hudson.util", "RingBufferLogHandler", "RingBufferLogHandler", "(int)", "summary", "df-generated"] + - ["hudson.util", "RingBufferLogHandler", "clear", "()", "summary", "df-generated"] + - ["hudson.util", "RingBufferLogHandler", "getDefaultRingBufferSize", "()", "summary", "df-generated"] + - ["hudson.util", "RingBufferLogHandler", "getView", "()", "summary", "df-generated"] + - ["hudson.util", "RobustCollectionConverter", "RobustCollectionConverter", "(Mapper,ReflectionProvider)", "summary", "df-generated"] + - ["hudson.util", "RobustCollectionConverter", "RobustCollectionConverter", "(XStream)", "summary", "df-generated"] + - ["hudson.util", "RobustReflectionConverter$DuplicateFieldException", "DuplicateFieldException", "(String)", "summary", "df-generated"] + - ["hudson.util", "RobustReflectionConverter", "addErrorInContext", "(UnmarshallingContext,Throwable)", "summary", "df-generated"] + - ["hudson.util", "RunList", "RunList", "(Collection)", "summary", "df-generated"] + - ["hudson.util", "RunList", "RunList", "(View)", "summary", "df-generated"] + - ["hudson.util", "RunList", "fromJobs", "(Iterable)", "summary", "df-generated"] + - ["hudson.util", "Secret", "getCipher", "(String)", "summary", "df-generated"] + - ["hudson.util", "SecretRewriter", "SecretRewriter", "(File)", "summary", "df-generated"] + - ["hudson.util", "SecretRewriter", "rewrite", "(File)", "summary", "df-generated"] + - ["hudson.util", "SecretRewriter", "rewrite", "(File,File)", "summary", "df-generated"] + - ["hudson.util", "SequentialExecutionQueue", "isStarving", "(long)", "summary", "df-generated"] + - ["hudson.util", "Service", "load", "(Class,ClassLoader,Collection)", "summary", "df-generated"] + - ["hudson.util", "Service", "loadInstances", "(ClassLoader,Class)", "summary", "df-generated"] + - ["hudson.util", "ShiftedCategoryAxis", "ShiftedCategoryAxis", "(String)", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "StreamTaskListener", "(File)", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "StreamTaskListener", "(File,Charset)", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "StreamTaskListener", "(File,boolean,Charset)", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "StreamTaskListener", "(Writer)", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "closeQuietly", "()", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "fromStderr", "()", "summary", "df-generated"] + - ["hudson.util", "StreamTaskListener", "fromStdout", "()", "summary", "df-generated"] + - ["hudson.util", "TableNestChecker", "TableNestChecker", "(ContentHandler)", "summary", "df-generated"] + - ["hudson.util", "TableNestChecker", "applyTo", "(XMLOutput)", "summary", "df-generated"] + - ["hudson.util", "TagCloud$Entry", "getClassName", "()", "summary", "df-generated"] + - ["hudson.util", "TagCloud$Entry", "scale", "()", "summary", "df-generated"] + - ["hudson.util", "TagCloud", "TagCloud", "(Iterable,WeightFunction)", "summary", "df-generated"] + - ["hudson.util", "TextFile", "delete", "()", "summary", "df-generated"] + - ["hudson.util", "TextFile", "exists", "()", "summary", "df-generated"] + - ["hudson.util", "TextFile", "fastTail", "(int)", "summary", "df-generated"] + - ["hudson.util", "TextFile", "fastTail", "(int,Charset)", "summary", "df-generated"] + - ["hudson.util", "TextFile", "head", "(int)", "summary", "df-generated"] + - ["hudson.util", "TextFile", "lines", "()", "summary", "df-generated"] + - ["hudson.util", "TextFile", "read", "()", "summary", "df-generated"] + - ["hudson.util", "TextFile", "readTrim", "()", "summary", "df-generated"] + - ["hudson.util", "TextFile", "write", "(String)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "convert", "(long,TimeUnit)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "convert", "(long,TimeUnit2)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "sleep", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "timedJoin", "(Thread,long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "timedWait", "(Object,long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toDays", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toHours", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toMicros", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toMillis", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toMinutes", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toNanos", "(long)", "summary", "df-generated"] + - ["hudson.util", "TimeUnit2", "toSeconds", "(long)", "summary", "df-generated"] + - ["hudson.util", "XStream2", "XStream2", "(HierarchicalStreamDriver)", "summary", "df-generated"] + - ["hudson.util", "XStream2", "XStream2", "(ReflectionProvider,HierarchicalStreamDriver,ClassLoaderReference,Mapper,ConverterLookup,ConverterRegistry)", "summary", "df-generated"] + - ["hudson.util", "XStream2", "addCriticalField", "(Class,String)", "summary", "df-generated"] + - ["hudson.util", "XStream2", "getDefaultDriver", "()", "summary", "df-generated"] + - ["hudson.util", "XStream2", "toXMLUTF8", "(Object,OutputStream)", "summary", "df-generated"] + - ["hudson.util", "XStream2", "unmarshal", "(HierarchicalStreamReader,Object,DataHolder,boolean)", "summary", "df-generated"] + - ["hudson.util", "XStream2SecurityUtils", "checkForCollectionDoSAttack", "(UnmarshallingContext,long)", "summary", "df-generated"] + - ["hudson.views", "BuildButtonColumn", "taskNoun", "(Object)", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "all", "()", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "createDefaultInitialColumnList", "()", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "createDefaultInitialColumnList", "(Class)", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "createDefaultInitialColumnList", "(View)", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "getColumnCaption", "()", "summary", "df-generated"] + - ["hudson.views", "ListViewColumn", "shownByDefault", "()", "summary", "df-generated"] + - ["hudson.views", "ListViewColumnDescriptor", "shownByDefault", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "BuildButtonColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "DefaultMyViewsTabsBar_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "DefaultViewsTabsBar_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "GlobalDefaultViewConfiguration_ViewDoesNotExist", "(Object)", "summary", "df-generated"] + - ["hudson.views", "Messages", "JobColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "LastDurationColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "LastFailureColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "LastStableColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "LastSuccessColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "StatusColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "StatusFilter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "WeatherColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_BuildButtonColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_DefaultMyViewsTabsBar_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_DefaultViewsTabsBar_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_GlobalDefaultViewConfiguration_ViewDoesNotExist", "(Object)", "summary", "df-generated"] + - ["hudson.views", "Messages", "_JobColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_LastDurationColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_LastFailureColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_LastStableColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_LastSuccessColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_StatusColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_StatusFilter_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "Messages", "_WeatherColumn_DisplayName", "()", "summary", "df-generated"] + - ["hudson.views", "MyViewsTabBar$GlobalConfigurationImpl", "getMyViewsTabBar", "()", "summary", "df-generated"] + - ["hudson.views", "MyViewsTabBar", "all", "()", "summary", "df-generated"] + - ["hudson.views", "StatusFilter", "StatusFilter", "(boolean)", "summary", "df-generated"] + - ["hudson.views", "StatusFilter", "getStatusFilter", "()", "summary", "df-generated"] + - ["hudson.views", "ViewJobFilter", "all", "()", "summary", "df-generated"] + - ["hudson.views", "ViewJobFilter", "filter", "(List,List,View)", "summary", "df-generated"] + - ["hudson.views", "ViewsTabBar$GlobalConfigurationImpl", "getViewsTabBar", "()", "summary", "df-generated"] + - ["hudson.views", "ViewsTabBar", "all", "()", "summary", "df-generated"] + - ["hudson.widgets", "BuildHistoryWidget", "getQueuedItem", "()", "summary", "df-generated"] + - ["hudson.widgets", "BuildHistoryWidget", "getQueuedItems", "()", "summary", "df-generated"] + - ["hudson.widgets", "HistoryWidget", "getDisplayName", "()", "summary", "df-generated"] + - ["hudson.widgets", "HistoryWidget", "isTrimmed", "()", "summary", "df-generated"] + - ["hudson.widgets", "HistoryWidget", "setTrimmed", "(boolean)", "summary", "df-generated"] + - ["hudson.widgets", "Messages", "BuildHistoryWidget_DisplayName", "()", "summary", "df-generated"] + - ["hudson.widgets", "Messages", "_BuildHistoryWidget_DisplayName", "()", "summary", "df-generated"] + - ["hudson.widgets", "RenderOnDemandClosure", "RenderOnDemandClosure", "(JellyContext,String)", "summary", "df-generated"] + - ["hudson.widgets", "RenderOnDemandClosure", "render", "()", "summary", "df-generated"] + - ["hudson.widgets", "Widget", "getUrlName", "()", "summary", "df-generated"] + - ["hudson", "AboutJenkins", "getLicensesURL", "()", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "addHyperlink", "(int,int,String)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "addHyperlinkLowKey", "(int,int,String)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "addMarkup", "(int,int,String,String)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "charAt", "(int)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "findToken", "(Pattern)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "findTokens", "(Pattern)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "getText", "()", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "hide", "(int,int)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "length", "()", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "subText", "(int,int)", "summary", "df-generated"] + - ["hudson", "AbstractMarkupText", "wrapBy", "(String,String)", "summary", "df-generated"] + - ["hudson", "BulkChange", "abort", "()", "summary", "df-generated"] + - ["hudson", "BulkChange", "commit", "()", "summary", "df-generated"] + - ["hudson", "BulkChange", "contains", "(Saveable)", "summary", "df-generated"] + - ["hudson", "BulkChange", "current", "()", "summary", "df-generated"] + - ["hudson", "ClassicPluginStrategy", "getImpliedDependencies", "(String,String)", "summary", "df-generated"] + - ["hudson", "ClassicPluginStrategy", "startPlugin", "(PluginWrapper)", "summary", "df-generated"] + - ["hudson", "DependencyRunner$ProjectRunnable", "run", "(AbstractProject)", "summary", "df-generated"] + - ["hudson", "DescriptorExtensionList", "clearLegacyInstances", "()", "summary", "df-generated"] + - ["hudson", "DescriptorExtensionList", "listLegacyInstances", "()", "summary", "df-generated"] + - ["hudson", "DescriptorExtensionList", "newInstanceFromRadioList", "(JSONObject)", "summary", "df-generated"] + - ["hudson", "DescriptorExtensionList", "newInstanceFromRadioList", "(JSONObject,String)", "summary", "df-generated"] + - ["hudson", "EnvVars", "createCookie", "()", "summary", "df-generated"] + - ["hudson", "EnvVars", "getPlatform", "()", "summary", "df-generated"] + - ["hudson", "EnvVars", "getRemote", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson", "EnvVars", "putAllNonNull", "(Map)", "summary", "df-generated"] + - ["hudson", "EnvVars", "resolve", "(Map)", "summary", "df-generated"] + - ["hudson", "EnvVars", "setPlatform", "(Platform)", "summary", "df-generated"] + - ["hudson", "ExtensionComponent", "isDescriptorOf", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionComponent", "ordinal", "()", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "_find", "(Class,Hudson)", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "find", "(Class,Hudson)", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "findExtensions", "(Class,Hudson)", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "isRefreshable", "()", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "refresh", "()", "summary", "df-generated"] + - ["hudson", "ExtensionFinder", "scout", "(Class,Hudson)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "clearLegacyInstances", "()", "summary", "df-generated"] + - ["hudson", "ExtensionList", "get", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "getInstance", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "lookup", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "lookupSingleton", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "refresh", "(ExtensionComponentSet)", "summary", "df-generated"] + - ["hudson", "ExtensionList", "reverseView", "()", "summary", "df-generated"] + - ["hudson", "ExtensionListListener", "onChange", "()", "summary", "df-generated"] + - ["hudson", "ExtensionListView", "createCopyOnWriteList", "(Class)", "summary", "df-generated"] + - ["hudson", "ExtensionListView", "createList", "(Class)", "summary", "df-generated"] + - ["hudson", "FilePath$FileCallableWrapperFactory", "wrap", "(DelegatingCallable)", "summary", "df-generated"] + - ["hudson", "FilePath$TarCompression", "compress", "(OutputStream)", "summary", "df-generated"] + - ["hudson", "FilePath$TarCompression", "extract", "(InputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "FilePath", "(File)", "summary", "df-generated"] + - ["hudson", "FilePath", "act", "(Callable)", "summary", "df-generated"] + - ["hudson", "FilePath", "actAsync", "(FileCallable)", "summary", "df-generated"] + - ["hudson", "FilePath", "archive", "(ArchiverFactory,OutputStream,DirScanner)", "summary", "df-generated"] + - ["hudson", "FilePath", "archive", "(ArchiverFactory,OutputStream,DirScanner,String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "archive", "(ArchiverFactory,OutputStream,FileFilter)", "summary", "df-generated"] + - ["hudson", "FilePath", "archive", "(ArchiverFactory,OutputStream,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "chmod", "(int)", "summary", "df-generated"] + - ["hudson", "FilePath", "containsSymlink", "(FilePath,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyFrom", "(FileItem)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyFrom", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyFrom", "(InputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyFrom", "(URL)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyRecursiveTo", "(DirScanner,FilePath,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyRecursiveTo", "(DirScanner,FilePath,String,TarCompression)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyRecursiveTo", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyRecursiveTo", "(String,FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyRecursiveTo", "(String,String,FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyTo", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyTo", "(OutputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "copyToWithPermission", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "createZipArchive", "(OutputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "createZipArchive", "(OutputStream,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "delete", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "deleteContents", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "deleteRecursive", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "deleteSuffixesRecursive", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "exists", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "getFreeDiskSpace", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "getHomeDirectory", "(VirtualChannel)", "summary", "df-generated"] + - ["hudson", "FilePath", "getTotalDiskSpace", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "getUsableDiskSpace", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "hasSymlink", "(FilePath,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "installIfNecessaryFrom", "(URL,TaskListener,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "isDescendant", "(String)", "summary", "df-generated"] + - ["hudson", "FilePath", "isDirectory", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "isRemote", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "isSymlink", "(File,String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "lastModified", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "length", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "(FileFilter)", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "(FilePath,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "(String)", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "(String,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "list", "(String,String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "listDirectories", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "mkdirs", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "mode", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "moveAllChildrenTo", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "newInputStreamDenyingSymlinkAsNeeded", "(File,String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "read", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "read", "(FilePath,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "readFromOffset", "(long)", "summary", "df-generated"] + - ["hudson", "FilePath", "renameTo", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "symlinkTo", "(String,TaskListener)", "summary", "df-generated"] + - ["hudson", "FilePath", "tar", "(OutputStream,DirScanner)", "summary", "df-generated"] + - ["hudson", "FilePath", "tar", "(OutputStream,FileFilter)", "summary", "df-generated"] + - ["hudson", "FilePath", "tar", "(OutputStream,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "toComputer", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "touch", "(long)", "summary", "df-generated"] + - ["hudson", "FilePath", "untar", "(FilePath,TarCompression)", "summary", "df-generated"] + - ["hudson", "FilePath", "untarFrom", "(InputStream,TarCompression)", "summary", "df-generated"] + - ["hudson", "FilePath", "unzip", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "unzipFrom", "(InputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateFileMask", "(FilePath,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateFileMask", "(FilePath,String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateFileMask", "(String)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateFileMask", "(String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateFileMask", "(String,boolean,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateRelativeDirectory", "(String)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateRelativeDirectory", "(String,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "validateRelativePath", "(String,boolean,boolean)", "summary", "df-generated"] + - ["hudson", "FilePath", "write", "()", "summary", "df-generated"] + - ["hudson", "FilePath", "write", "(String,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(FilePath)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(OutputStream)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(OutputStream,DirScanner)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(OutputStream,DirScanner,String,boolean,String)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(OutputStream,FileFilter)", "summary", "df-generated"] + - ["hudson", "FilePath", "zip", "(OutputStream,String)", "summary", "df-generated"] + - ["hudson", "FileSystemProvisioner", "discardWorkspace", "(AbstractProject,FilePath)", "summary", "df-generated"] + - ["hudson", "FileSystemProvisioner", "prepareWorkspace", "(AbstractBuild,FilePath,TaskListener)", "summary", "df-generated"] + - ["hudson", "FileSystemProvisioner", "snapshot", "(AbstractBuild,FilePath,String,TaskListener)", "summary", "df-generated"] + - ["hudson", "Functions", "adminCheck", "(StaplerRequest,StaplerResponse,Object,Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "advertiseHeaders", "(HttpServletResponse)", "summary", "df-generated"] + - ["hudson", "Functions", "checkAnyPermission", "(AccessControlled,Permission[])", "summary", "df-generated"] + - ["hudson", "Functions", "checkAnyPermission", "(Object,Permission[])", "summary", "df-generated"] + - ["hudson", "Functions", "checkPermission", "(AccessControlled,Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "checkPermission", "(Object,Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "checkPermission", "(Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "configureAutoRefresh", "(HttpServletRequest,HttpServletResponse,boolean)", "summary", "df-generated"] + - ["hudson", "Functions", "createRenderOnDemandProxy", "(JellyContext,String)", "summary", "df-generated"] + - ["hudson", "Functions", "defaultToTrue", "(Boolean)", "summary", "df-generated"] + - ["hudson", "Functions", "determineRows", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "dumpAllThreads", "()", "summary", "df-generated"] + - ["hudson", "Functions", "emptyList", "()", "summary", "df-generated"] + - ["hudson", "Functions", "escape", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "generateConsoleAnnotationScriptAndStylesheet", "()", "summary", "df-generated"] + - ["hudson", "Functions", "generateId", "()", "summary", "df-generated"] + - ["hudson", "Functions", "generateItemId", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getAllTopLevelItems", "(ItemGroup)", "summary", "df-generated"] + - ["hudson", "Functions", "getAuthorizationStrategyDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getAvatar", "(User,String)", "summary", "df-generated"] + - ["hudson", "Functions", "getBuildWrapperDescriptors", "(AbstractProject)", "summary", "df-generated"] + - ["hudson", "Functions", "getBuilderDescriptors", "(AbstractProject)", "summary", "df-generated"] + - ["hudson", "Functions", "getCLICommands", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCaptchaSupportDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCloudDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getComputerLauncherDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCookie", "(HttpServletRequest,String)", "summary", "df-generated"] + - ["hudson", "Functions", "getCrumb", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "Functions", "getCrumbIssuerDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCrumbRequestField", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCurrentDescriptorByNameUrl", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCurrentJellyContext", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCurrentLocale", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getCurrentTime", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getDiffString2", "(int)", "summary", "df-generated"] + - ["hudson", "Functions", "getDiffString", "(int)", "summary", "df-generated"] + - ["hudson", "Functions", "getEnvVars", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getFooterURL", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getGlobalNodePropertyDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getHourLocalTimezone", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getIconFilePath", "(Action)", "summary", "df-generated"] + - ["hudson", "Functions", "getIsUnitTest", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getJDKDescriptor", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getJobPropertyDescriptors", "(Class)", "summary", "df-generated"] + - ["hudson", "Functions", "getJobPropertyDescriptors", "(Job)", "summary", "df-generated"] + - ["hudson", "Functions", "getLogRecords", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getLoggerNames", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getMyViewsTabBarDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getNodeModes", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getNodePropertyDescriptors", "(Class)", "summary", "df-generated"] + - ["hudson", "Functions", "getPageDecorators", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getParameterDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getPublisherDescriptors", "(AbstractProject)", "summary", "df-generated"] + - ["hudson", "Functions", "getRelativeLinkTo", "(Item)", "summary", "df-generated"] + - ["hudson", "Functions", "getRequestHeaders", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "getResourcePath", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getRetentionStrategyDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSCMDescriptors", "(AbstractProject)", "summary", "df-generated"] + - ["hudson", "Functions", "getScreenResolution", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSearchURL", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSecurityRealmDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getServerName", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSimplePageDecorator", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSimplePageDecorators", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfig", "(Predicate)", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfigByDescriptor", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfigByDescriptor", "(Predicate)", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfigNoSecurity", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfigUnclassified", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSortedDescriptorsForGlobalConfigUnclassifiedReadable", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSystemProperties", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getSystemProperty", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "getThreadInfos", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getTimeSpanString", "(Date)", "summary", "df-generated"] + - ["hudson", "Functions", "getTypeParameter", "(Class,Class,int)", "summary", "df-generated"] + - ["hudson", "Functions", "getUserAvatar", "(User,String)", "summary", "df-generated"] + - ["hudson", "Functions", "getUserTimeZone", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getUserTimeZonePostfix", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getVersion", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getViewsTabBarDescriptors", "()", "summary", "df-generated"] + - ["hudson", "Functions", "getWin32ErrorMessage", "(IOException)", "summary", "df-generated"] + - ["hudson", "Functions", "getYuiSuffix", "()", "summary", "df-generated"] + - ["hudson", "Functions", "hasAnyPermission", "(AccessControlled,Permission[])", "summary", "df-generated"] + - ["hudson", "Functions", "hasAnyPermission", "(Object,Permission[])", "summary", "df-generated"] + - ["hudson", "Functions", "hasPermission", "(Object,Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "hasPermission", "(Permission)", "summary", "df-generated"] + - ["hudson", "Functions", "hasView", "(Object,String)", "summary", "df-generated"] + - ["hudson", "Functions", "htmlAttributeEscape", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "humanReadableByteSize", "(long)", "summary", "df-generated"] + - ["hudson", "Functions", "hyperlinkMatchesCurrentPage", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "inferHudsonURL", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "Functions", "initPageVariables", "(JellyContext)", "summary", "df-generated"] + - ["hudson", "Functions", "isAnonymous", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isArtifactsPermissionEnabled", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isAutoRefresh", "(HttpServletRequest)", "summary", "df-generated"] + - ["hudson", "Functions", "isCollapsed", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "isContextMenuVisible", "(Action)", "summary", "df-generated"] + - ["hudson", "Functions", "isExtensionsAvailable", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isGlibcSupported", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isMatrixProject", "(Object)", "summary", "df-generated"] + - ["hudson", "Functions", "isModel", "(Object)", "summary", "df-generated"] + - ["hudson", "Functions", "isModelWithChildren", "(Object)", "summary", "df-generated"] + - ["hudson", "Functions", "isModelWithContextMenu", "(Object)", "summary", "df-generated"] + - ["hudson", "Functions", "isMultiline", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "isMustangOrAbove", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isUserTimeZoneOverride", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isWindows", "()", "summary", "df-generated"] + - ["hudson", "Functions", "isWipeOutPermissionEnabled", "()", "summary", "df-generated"] + - ["hudson", "Functions", "iso8601DateTime", "(Date)", "summary", "df-generated"] + - ["hudson", "Functions", "jsStringEscape", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "localDate", "(Date)", "summary", "df-generated"] + - ["hudson", "Functions", "nbspIndent", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "printLogRecord", "(LogRecord)", "summary", "df-generated"] + - ["hudson", "Functions", "printLogRecordHtml", "(LogRecord,LogRecord)", "summary", "df-generated"] + - ["hudson", "Functions", "printStackTrace", "(Throwable,PrintStream)", "summary", "df-generated"] + - ["hudson", "Functions", "printStackTrace", "(Throwable,PrintWriter)", "summary", "df-generated"] + - ["hudson", "Functions", "restoreCurrentDescriptorByNameUrl", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "rfc822Date", "(Calendar)", "summary", "df-generated"] + - ["hudson", "Functions", "runScript", "(Script)", "summary", "df-generated"] + - ["hudson", "Functions", "setCurrentDescriptorByNameUrl", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "size2", "(Object)", "summary", "df-generated"] + - ["hudson", "Functions", "sortThreadsAndGetGroupMap", "(ThreadInfo[])", "summary", "df-generated"] + - ["hudson", "Functions", "toCCStatus", "(Item)", "summary", "df-generated"] + - ["hudson", "Functions", "toEmailSafeString", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "tryGetIcon", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "urlEncode", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "useHidingPasswordFields", "()", "summary", "df-generated"] + - ["hudson", "Functions", "xmlEscape", "(String)", "summary", "df-generated"] + - ["hudson", "Functions", "xsDate", "(Calendar)", "summary", "df-generated"] + - ["hudson", "Indenter", "getCss", "(Job)", "summary", "df-generated"] + - ["hudson", "Indenter", "getRelativeShift", "(Job)", "summary", "df-generated"] + - ["hudson", "Launcher$LocalLauncher", "launchChannel", "(OutputStream,ProcessBuilder)", "summary", "df-generated"] + - ["hudson", "Launcher$ProcStarter", "join", "()", "summary", "df-generated"] + - ["hudson", "Launcher$ProcStarter", "masks", "()", "summary", "df-generated"] + - ["hudson", "Launcher$ProcStarter", "quiet", "()", "summary", "df-generated"] + - ["hudson", "Launcher$RemoteProcess", "getIOtriplet", "()", "summary", "df-generated"] + - ["hudson", "Launcher$RemoteProcess", "isAlive", "()", "summary", "df-generated"] + - ["hudson", "Launcher$RemoteProcess", "join", "()", "summary", "df-generated"] + - ["hudson", "Launcher$RemoteProcess", "kill", "()", "summary", "df-generated"] + - ["hudson", "Launcher", "getComputer", "()", "summary", "df-generated"] + - ["hudson", "Launcher", "isUnix", "()", "summary", "df-generated"] + - ["hudson", "Launcher", "kill", "(Map)", "summary", "df-generated"] + - ["hudson", "Launcher", "launch", "()", "summary", "df-generated"] + - ["hudson", "Launcher", "launch", "(ProcStarter)", "summary", "df-generated"] + - ["hudson", "Launcher", "launchChannel", "(String[],OutputStream,FilePath,Map)", "summary", "df-generated"] + - ["hudson", "Launcher", "prepareFilterRules", "(Run,EnvVarsFilterableBuilder)", "summary", "df-generated"] + - ["hudson", "LauncherDecorator", "all", "()", "summary", "df-generated"] + - ["hudson", "LauncherDecorator", "decorate", "(Launcher,Node)", "summary", "df-generated"] + - ["hudson", "Lookup", "get", "(Class)", "summary", "df-generated"] + - ["hudson", "Main", "remotePost", "(String[])", "summary", "df-generated"] + - ["hudson", "Main", "run", "(String[])", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "SubText", "(Matcher,int)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "SubText", "(int,int)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "end", "()", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "end", "(int)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "group", "(int)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "groupCount", "()", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "href", "(String)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "replace", "(String)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "start", "()", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "start", "(int)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "surroundWith", "(String,String)", "summary", "df-generated"] + - ["hudson", "MarkupText$SubText", "surroundWithLiteral", "(String,String)", "summary", "df-generated"] + - ["hudson", "MarkupText", "addMarkup", "(int,String)", "summary", "df-generated"] + - ["hudson", "Messages", "AboutJenkins_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "AboutJenkins_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_TildaDoesntWork", "()", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_did_not_manage_to_validate_may_be_too_sl", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_doesntMatchAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_doesntMatchAnything", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_doesntMatchAnythingAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_matchWithCaseInsensitive", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_portionMatchAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_portionMatchButPreviousNotMatchAndSuggest", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateAntFileMask_whitespaceSeparator", "()", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateRelativePath_noSuchDirectory", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateRelativePath_noSuchFile", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateRelativePath_notDirectory", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateRelativePath_notFile", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "FilePath_validateRelativePath_wildcardNotAllowed", "()", "summary", "df-generated"] + - ["hudson", "Messages", "Functions_NoExceptionDetails", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_CheckUpdateServerError", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_ConfigureUpdateCenterPermission_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PluginCycleDependenciesMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PluginDeprecationMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PluginDoesntSupportDynamicLoad_RestartRequired", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PluginIsAlreadyInstalled_RestartRequired", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PluginUpdateMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PortNotANumber", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_PortNotInRange", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_UnexpectedException", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_UpdateSiteChangeLogLevel", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_UpdateSiteError", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_UploadPluginsPermission_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_adoptThisPlugin", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_ago", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_compatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_connectionFailed", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_coreWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_depCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_depCoreWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_deprecationWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_emptyUpdateSiteUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_insecureUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_invalidUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_parentCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_parentDepCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginManager_securityWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_Already_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_Error_Disabling", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_NoSuchPlugin", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_PluginWrapperAdministrativeMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_Plugin_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_Plugin_Has_Dependent", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_disabled_2", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_failed_to_load_dependency_2", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_failed_to_load_plugin_2", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_missing", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_obsoleteCore", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "PluginWrapper_obsolete_2", "(Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "ProxyConfiguration_FailedToConnect", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "ProxyConfiguration_FailedToConnectViaProxy", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "ProxyConfiguration_MalformedTestUrl", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "ProxyConfiguration_Success", "()", "summary", "df-generated"] + - ["hudson", "Messages", "ProxyConfiguration_TestUrlRequired", "()", "summary", "df-generated"] + - ["hudson", "Messages", "TcpSlaveAgentListener_PingAgentProtocol_displayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "Util_day", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_hour", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_millisecond", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_minute", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_month", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_second", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "Util_year", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_AboutJenkins_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_AboutJenkins_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_TildaDoesntWork", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_did_not_manage_to_validate_may_be_too_sl", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_doesntMatchAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_doesntMatchAnything", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_doesntMatchAnythingAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_matchWithCaseInsensitive", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_portionMatchAndSuggest", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_portionMatchButPreviousNotMatchAndSuggest", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateAntFileMask_whitespaceSeparator", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateRelativePath_noSuchDirectory", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateRelativePath_noSuchFile", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateRelativePath_notDirectory", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateRelativePath_notFile", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_FilePath_validateRelativePath_wildcardNotAllowed", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_Functions_NoExceptionDetails", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_CheckUpdateServerError", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_ConfigureUpdateCenterPermission_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PluginCycleDependenciesMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PluginDeprecationMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PluginDoesntSupportDynamicLoad_RestartRequired", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PluginIsAlreadyInstalled_RestartRequired", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PluginUpdateMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PortNotANumber", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_PortNotInRange", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_UnexpectedException", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_UpdateSiteChangeLogLevel", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_UpdateSiteError", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_UploadPluginsPermission_Description", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_adoptThisPlugin", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_ago", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_compatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_connectionFailed", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_coreWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_depCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_depCoreWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_deprecationWarning", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_emptyUpdateSiteUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_insecureUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_invalidUrl", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_parentCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_parentDepCompatWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginManager_securityWarning", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_Already_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_Error_Disabling", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_NoSuchPlugin", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_PluginWrapperAdministrativeMonitor_DisplayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_Plugin_Disabled", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_Plugin_Has_Dependent", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_disabled_2", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_failed_to_load_dependency_2", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_failed_to_load_plugin_2", "(Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_missing", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_obsoleteCore", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_PluginWrapper_obsolete_2", "(Object,Object,Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_ProxyConfiguration_FailedToConnect", "(Object,Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_ProxyConfiguration_FailedToConnectViaProxy", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_ProxyConfiguration_MalformedTestUrl", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_ProxyConfiguration_Success", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_ProxyConfiguration_TestUrlRequired", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_TcpSlaveAgentListener_PingAgentProtocol_displayName", "()", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_day", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_hour", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_millisecond", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_minute", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_month", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_second", "(Object)", "summary", "df-generated"] + - ["hudson", "Messages", "_Util_year", "(Object)", "summary", "df-generated"] + - ["hudson", "Platform", "current", "()", "summary", "df-generated"] + - ["hudson", "Platform", "isDarwin", "()", "summary", "df-generated"] + - ["hudson", "Platform", "isSnowLeopardOrLater", "()", "summary", "df-generated"] + - ["hudson", "Plugin", "configure", "(JSONObject)", "summary", "df-generated"] + - ["hudson", "Plugin", "configure", "(StaplerRequest,JSONObject)", "summary", "df-generated"] + - ["hudson", "Plugin", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson", "Plugin", "postInitialize", "()", "summary", "df-generated"] + - ["hudson", "Plugin", "setServletContext", "(ServletContext)", "summary", "df-generated"] + - ["hudson", "Plugin", "start", "()", "summary", "df-generated"] + - ["hudson", "Plugin", "stop", "()", "summary", "df-generated"] + - ["hudson", "PluginFirstClassLoader2", "PluginFirstClassLoader2", "(URL[],ClassLoader)", "summary", "df-generated"] + - ["hudson", "PluginManager$MetadataCache", "of", "(String,Class,Supplier)", "summary", "df-generated"] + - ["hudson", "PluginManager$PluginDeprecationMonitor", "getDeprecatedPlugins", "()", "summary", "df-generated"] + - ["hudson", "PluginManager$PluginUpdateMonitor", "getInstance", "()", "summary", "df-generated"] + - ["hudson", "PluginManager$UberClassLoader", "toString", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "createCache", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "discover", "(Class)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doCheckPluginUrl", "(StaplerRequest,String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doCheckUpdateSiteUrl", "(StaplerRequest,String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doCheckUpdatesServer", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "doInstall", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doInstallNecessaryPlugins", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doInstallPlugins", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doInstallPluginsDone", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "doPlugins", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "doPluginsSearch", "(String,Integer)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doPrevalidateConfig", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doProxyConfigure", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doSiteConfigure", "(String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doUpdateSources", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "doUploadPlugin", "(StaplerRequest)", "summary", "df-generated"] + - ["hudson", "PluginManager", "dynamicLoad", "(File)", "summary", "df-generated"] + - ["hudson", "PluginManager", "getBundledPluginManifest", "(String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "getProxyDescriptor", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "getUpdates", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "hasAdoptThisPluginLabel", "(Plugin)", "summary", "df-generated"] + - ["hudson", "PluginManager", "hasAdoptThisPluginLabel", "(PluginWrapper)", "summary", "df-generated"] + - ["hudson", "PluginManager", "initTasks", "(InitStrategy)", "summary", "df-generated"] + - ["hudson", "PluginManager", "install", "(Collection,boolean)", "summary", "df-generated"] + - ["hudson", "PluginManager", "isMetaLabel", "(String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "isNonMetaLabel", "(String)", "summary", "df-generated"] + - ["hudson", "PluginManager", "isPluginUploaded", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "parseRequestedPlugins", "(InputStream)", "summary", "df-generated"] + - ["hudson", "PluginManager", "prevalidateConfig", "(InputStream)", "summary", "df-generated"] + - ["hudson", "PluginManager", "resolveDependentPlugins", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "start", "(List)", "summary", "df-generated"] + - ["hudson", "PluginManager", "stop", "()", "summary", "df-generated"] + - ["hudson", "PluginManager", "unscientific", "(double)", "summary", "df-generated"] + - ["hudson", "PluginManagerStaplerOverride", "all", "()", "summary", "df-generated"] + - ["hudson", "PluginStrategy", "findComponents", "(Class,Hudson)", "summary", "df-generated"] + - ["hudson", "PluginStrategy", "initializeComponents", "(PluginWrapper)", "summary", "df-generated"] + - ["hudson", "PluginStrategy", "load", "(PluginWrapper)", "summary", "df-generated"] + - ["hudson", "PluginStrategy", "updateDependency", "(PluginWrapper,PluginWrapper)", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", "getStatus", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableResult", "setStatus", "(PluginDisableStatus)", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginDisableStrategy", "toString", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginWrapperAdministrativeMonitor", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginWrapperAdministrativeMonitor", "get", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper$PluginWrapperAdministrativeMonitor", "hasAnyDerivedDependencyErrors", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "disable", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "doDoUninstall", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "doMakeDisabled", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "doMakeEnabled", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "doPin", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "doUnpin", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "enable", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getActiveWarnings", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getBackupVersion", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getDeprecations", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getImpliedDependents", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getIndexPage", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getInfo", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getIssueTrackerReportUrl", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getPlugin", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getPluginClass", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getPluginOrFail", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getRequiredCoreVersion", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getUpdateInfo", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getUrl", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getVersion", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "getVersionNumber", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasCycleDependency", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasDependants", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasDependencies", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasDependents", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasDerivedDependencyErrors", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasImpliedDependents", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasLicensesXml", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasMandatoryDependencies", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasMandatoryDependents", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasOptionalDependants", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasOptionalDependents", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasOriginalDependencyErrors", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "hasUpdate", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "injectJarsToClasspath", "(File[])", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isActive", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isBundled", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isDeleted", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isDeprecated", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isDetached", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isDowngradable", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isEnabled", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isOlderThan", "(VersionNumber)", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isPinned", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "isPinningForcingOldVersion", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "releaseClassLoader", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "setHasCycleDependency", "(boolean)", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "setOptionalDependants", "(Set)", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "stop", "()", "summary", "df-generated"] + - ["hudson", "PluginWrapper", "supportsDynamicLoad", "()", "summary", "df-generated"] + - ["hudson", "Proc", "getStderr", "()", "summary", "df-generated"] + - ["hudson", "Proc", "getStdin", "()", "summary", "df-generated"] + - ["hudson", "Proc", "getStdout", "()", "summary", "df-generated"] + - ["hudson", "Proc", "isAlive", "()", "summary", "df-generated"] + - ["hudson", "Proc", "join", "()", "summary", "df-generated"] + - ["hudson", "Proc", "joinWithTimeout", "(long,TimeUnit,TaskListener)", "summary", "df-generated"] + - ["hudson", "Proc", "kill", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration$DescriptorImpl", "doCheckPort", "(String)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration$DescriptorImpl", "doValidateProxy", "(String,String,int,String,Secret,String)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "createProxy", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "createProxy", "(String)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "createProxy", "(String,String,int,String)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "getInputStream", "(URL)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "getNoProxyHostPatterns", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "getNoProxyHostPatterns", "(String)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "getPort", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "getXmlFile", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "load", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "newHttpClient", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "newHttpClientBuilder", "()", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "newHttpRequestBuilder", "(URI)", "summary", "df-generated"] + - ["hudson", "ProxyConfiguration", "open", "(URL)", "summary", "df-generated"] + - ["hudson", "StructuredForm", "toList", "(JSONObject,String)", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener$ConnectionFromCurrentPeer", "toString", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener$PingAgentProtocol", "connect", "(Socket)", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "TcpSlaveAgentListener", "(int)", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getAdvertisedHost", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getAdvertisedPort", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getAgentProtocolNames", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getIdentityPublicKey", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getPort", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "getRemotingMinimumVersion", "()", "summary", "df-generated"] + - ["hudson", "TcpSlaveAgentListener", "shutdown", "()", "summary", "df-generated"] + - ["hudson", "URLConnectionDecorator", "all", "()", "summary", "df-generated"] + - ["hudson", "URLConnectionDecorator", "decorate", "(URLConnection)", "summary", "df-generated"] + - ["hudson", "Util", "closeAndLogFailures", "(Closeable,Logger,String,String)", "summary", "df-generated"] + - ["hudson", "Util", "copyFile", "(File,File)", "summary", "df-generated"] + - ["hudson", "Util", "createFileSet", "(File,String)", "summary", "df-generated"] + - ["hudson", "Util", "createFileSet", "(File,String,String)", "summary", "df-generated"] + - ["hudson", "Util", "createSubList", "(Collection,Class)", "summary", "df-generated"] + - ["hudson", "Util", "createSymlink", "(File,String,String,TaskListener)", "summary", "df-generated"] + - ["hudson", "Util", "createTempDir", "()", "summary", "df-generated"] + - ["hudson", "Util", "daysBetween", "(Date,Date)", "summary", "df-generated"] + - ["hudson", "Util", "daysElapsedSince", "(Date)", "summary", "df-generated"] + - ["hudson", "Util", "deleteContentsRecursive", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "deleteContentsRecursive", "(Path,PathChecker)", "summary", "df-generated"] + - ["hudson", "Util", "deleteFile", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "deleteRecursive", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "deleteRecursive", "(Path,PathChecker)", "summary", "df-generated"] + - ["hudson", "Util", "displayIOException", "(IOException,TaskListener)", "summary", "df-generated"] + - ["hudson", "Util", "escape", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "filter", "(Iterable,Class)", "summary", "df-generated"] + - ["hudson", "Util", "filter", "(List,Class)", "summary", "df-generated"] + - ["hudson", "Util", "fromHexString", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "getDigestOf", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "getDigestOf", "(InputStream)", "summary", "df-generated"] + - ["hudson", "Util", "getDigestOf", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "getHostName", "()", "summary", "df-generated"] + - ["hudson", "Util", "getNearestAncestorOfTypeOrThrow", "(StaplerRequest,Class)", "summary", "df-generated"] + - ["hudson", "Util", "getPastTimeString", "(long)", "summary", "df-generated"] + - ["hudson", "Util", "getTimeSpanString", "(long)", "summary", "df-generated"] + - ["hudson", "Util", "getWin32ErrorMessage", "(IOException)", "summary", "df-generated"] + - ["hudson", "Util", "getWin32ErrorMessage", "(Throwable)", "summary", "df-generated"] + - ["hudson", "Util", "getWin32ErrorMessage", "(int)", "summary", "df-generated"] + - ["hudson", "Util", "ifOverridden", "(Supplier,Class,Class,String,Class[])", "summary", "df-generated"] + - ["hudson", "Util", "isAbsoluteUri", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "isDescendant", "(File,File)", "summary", "df-generated"] + - ["hudson", "Util", "isOverridden", "(Class,Class,String,Class[])", "summary", "df-generated"] + - ["hudson", "Util", "isRelativePath", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "isSafeToRedirectTo", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "isSymlink", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "isSymlink", "(Path)", "summary", "df-generated"] + - ["hudson", "Util", "loadFile", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "loadFile", "(File,Charset)", "summary", "df-generated"] + - ["hudson", "Util", "loadProperties", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "min", "(int,int[])", "summary", "df-generated"] + - ["hudson", "Util", "modeToPermissions", "(int)", "summary", "df-generated"] + - ["hudson", "Util", "permissionsToMode", "(Set)", "summary", "df-generated"] + - ["hudson", "Util", "resolveSymlink", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "resolveSymlink", "(File,TaskListener)", "summary", "df-generated"] + - ["hudson", "Util", "resolveSymlinkToFile", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "toAes128Key", "(String)", "summary", "df-generated"] + - ["hudson", "Util", "toHexString", "(byte[],int,int)", "summary", "df-generated"] + - ["hudson", "Util", "tokenize", "(String,String)", "summary", "df-generated"] + - ["hudson", "Util", "touch", "(File)", "summary", "df-generated"] + - ["hudson", "Util", "tryParseNumber", "(String,Number)", "summary", "df-generated"] + - ["hudson", "Util", "xmlEscape", "(String)", "summary", "df-generated"] + - ["hudson", "WebAppMain", "getDefaultRingBufferSize", "()", "summary", "df-generated"] + - ["hudson", "WebAppMain", "getHomeDir", "(ServletContextEvent)", "summary", "df-generated"] + - ["hudson", "WebAppMain", "installExpressionFactory", "(ServletContextEvent)", "summary", "df-generated"] + - ["hudson", "WebAppMain", "joinInit", "()", "summary", "df-generated"] + - ["hudson", "WorkspaceSnapshot", "restoreTo", "(AbstractBuild,FilePath,TaskListener)", "summary", "df-generated"] + - ["hudson", "XmlFile", "asString", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "delete", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "exists", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "mkdirs", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "read", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "readRaw", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "sniffEncoding", "()", "summary", "df-generated"] + - ["hudson", "XmlFile", "unmarshal", "(Object)", "summary", "df-generated"] + - ["hudson", "XmlFile", "unmarshalNullingOut", "(Object)", "summary", "df-generated"] + - ["hudson", "XmlFile", "write", "(Object)", "summary", "df-generated"] + - ["hudson", "XmlFile", "writeRawTo", "(Writer)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "findClass", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "findResource", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "findResources", "(String)", "summary", "df-generated"] + - ["java.lang", "ClassLoader", "getClassLoadingLock", "(String)", "summary", "df-generated"] + - ["jenkins.agents", "AgentComputerUtil", "getChannelToController", "()", "summary", "df-generated"] + - ["jenkins.agents", "AgentComputerUtil", "getChannelToMaster", "()", "summary", "df-generated"] + - ["jenkins.agents", "WebSocketAgents", "doIndex", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "doDelete", "()", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "doDownload", "()", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "getLastModified", "()", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "getLastModifiedDate", "()", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "getPath", "()", "summary", "df-generated"] + - ["jenkins.diagnosis", "HsErrPidFile", "getTimeSpanString", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "ControllerExecutorsAgents", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.diagnostics", "ControllerExecutorsNoAgents", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "CompletedInitializationMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "ControllerExecutorsAgents_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "ControllerExecutorsNoAgents_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "RootUrlNotSetMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "SecurityIsOffMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "URICheckEncodingMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_CompletedInitializationMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_ControllerExecutorsAgents_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_ControllerExecutorsNoAgents_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_RootUrlNotSetMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_SecurityIsOffMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "Messages", "_URICheckEncodingMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "RootUrlNotSetMonitor", "isUrlNull", "()", "summary", "df-generated"] + - ["jenkins.diagnostics", "SecurityIsOffMonitor", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.diagnostics", "URICheckEncodingMonitor", "doCheckURIEncoding", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.diagnostics", "URICheckEncodingMonitor", "isCheckEnabled", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "FileFingerprintStorage", "load", "(File)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FileFingerprintStorage", "save", "(Fingerprint,File)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "cleanFingerprint", "(Fingerprint,TaskListener)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "delete", "(String)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "get", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "getFileFingerprintStorage", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "isReady", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "iterateAndCleanupFingerprints", "(TaskListener)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "load", "(String)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorage", "save", "(Fingerprint)", "summary", "df-generated"] + - ["jenkins.fingerprints", "FingerprintStorageDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", "getFingerprintStorageDescriptors", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", "isFingerprintCleanupDisabled", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "GlobalFingerprintConfiguration", "setFingerprintCleanupDisabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.fingerprints", "Messages", "FileFingerprintStorage_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.fingerprints", "Messages", "_FileFingerprintStorage_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.formelementpath", "FormElementPathPageDecorator", "isEnabled", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallState", "initializeState", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallState", "isSetupComplete", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallState", "valueOf", "(String)", "summary", "df-generated"] + - ["jenkins.install", "InstallStateFilter", "all", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallStateFilter", "getNextInstallState", "(InstallState,Provider)", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "clearInstallStatus", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "getLastExecVersion", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "getPersistedInstallStatus", "()", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "persistInstallStatus", "(List)", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "proceedToNextStateFrom", "(InstallState)", "summary", "df-generated"] + - ["jenkins.install", "InstallUtil", "saveLastExecVersion", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "SetupWizard_ConfigureInstance_RootUrl_Empty", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "SetupWizard_ConfigureInstance_RootUrl_Invalid", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "SetupWizard_ConfigureInstance_ValidationErrors", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "SetupWizard_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "_SetupWizard_ConfigureInstance_RootUrl_Empty", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "_SetupWizard_ConfigureInstance_RootUrl_Invalid", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "_SetupWizard_ConfigureInstance_ValidationErrors", "()", "summary", "df-generated"] + - ["jenkins.install", "Messages", "_SetupWizard_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "doCompleteInstall", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "doConfigureInstance", "(StaplerRequest,String)", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "doCreateAdminUser", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "doPlatformPluginList", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "doRestartStatus", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getCurrentLevel", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getInitialAdminApiTokenFile", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getInitialAdminPasswordFile", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getInstallState", "(String)", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getInstallStates", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "getPlatformPluginUpdates", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "hasSetupWizardFilter", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "isUsingSecurityToken", "()", "summary", "df-generated"] + - ["jenkins.install", "SetupWizard", "onInstallStateUpdate", "(InstallState)", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsApi", "doNonSecurityPopupContent", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsApi", "doSecurityPopupContent", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsApiData", "hasActiveMonitors", "()", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsDecorator", "getMonitorsToDisplay", "()", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsDecorator", "getNonSecurityAdministrativeMonitors", "()", "summary", "df-generated"] + - ["jenkins.management", "AdministrativeMonitorsDecorator", "getSecurityAdministrativeMonitors", "()", "summary", "df-generated"] + - ["jenkins.management", "AsynchronousAdministrativeMonitor", "isFixingActive", "()", "summary", "df-generated"] + - ["jenkins.management", "Badge", "getSeverity", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "AdministrativeMonitorsDecorator_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "CliLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "CliLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConfigureLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConfigureLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConfigureTools_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConfigureTools_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConsoleLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ConsoleLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "NodesLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "NodesLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_incompatibleUpdateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_incompatibleUpdatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_securityUpdateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_securityUpdatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_updateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "PluginsLink_updatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ReloadLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ReloadLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_DisplayName_cancel", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_DisplayName_prepare", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_DisplayName_update", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_ShutDownReason_title", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_ShutDownReason_update", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "ShutdownLink_ShuttingDownInProgressDescription", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "StatisticsLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "StatisticsLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "SystemInfoLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "SystemInfoLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "SystemLogLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "SystemLogLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_AdministrativeMonitorsDecorator_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_CliLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_CliLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConfigureLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConfigureLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConfigureTools_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConfigureTools_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConsoleLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ConsoleLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_NodesLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_NodesLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_incompatibleUpdateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_incompatibleUpdatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_securityUpdateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_securityUpdatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_updateAvailable", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_PluginsLink_updatesAvailable", "(Object)", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ReloadLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ReloadLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_DisplayName_cancel", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_DisplayName_prepare", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_DisplayName_update", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_ShutDownReason_title", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_ShutDownReason_update", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_ShutdownLink_ShuttingDownInProgressDescription", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_StatisticsLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_StatisticsLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_SystemInfoLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_SystemInfoLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_SystemLogLink_Description", "()", "summary", "df-generated"] + - ["jenkins.management", "Messages", "_SystemLogLink_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.management", "ShutdownLink", "doCancel", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.management", "ShutdownLink", "doPrepare", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model.identity", "IdentityRootAction", "getFingerprint", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "IdentityRootAction", "getPublicKey", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getCertificate", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getKeyPair", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getPrivateKey", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getPrivateKeyClass", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getPublicKey", "()", "summary", "df-generated"] + - ["jenkins.model.identity", "InstanceIdentityProvider$KeyTypes", "getPublicKeyClass", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Category", "getMinToShow", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Category", "getOrder", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getCategory", "(TopLevelItemDescriptor)", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getDescription", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getId", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getMinToShow", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "ItemCategory", "getOrder", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "NestedProjects_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "NestedProjects_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "StandaloneProjects_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "StandaloneProjects_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "Uncategorized_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "Uncategorized_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_NestedProjects_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_NestedProjects_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_StandaloneProjects_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_StandaloneProjects_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_Uncategorized_Description", "()", "summary", "df-generated"] + - ["jenkins.model.item_category", "Messages", "_Uncategorized_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "baseDirInitialized", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "get", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "getById", "(String)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "getByNumber", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "maxNumberOnDisk", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "newestBuild", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "oldestBuild", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "purgeCache", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "removeValue", "(Object)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "reset", "(TreeMap)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "runExists", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "AbstractLazyLoadRunMap", "search", "(int,Direction)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn$RunMixIn", "dropLinks", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getBuild", "(String)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getBuildByNumber", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getFirstBuild", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getLastBuild", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getNearestBuild", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "getNearestOldBuild", "(int)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "loadBuild", "(File)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "newBuild", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "onCreatedFromScratch", "()", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "onLoad", "(ItemGroup,String)", "summary", "df-generated"] + - ["jenkins.model.lazy", "LazyBuildMixIn", "removeRun", "(Run)", "summary", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", "blocksRestart", "()", "summary", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", "displayCell", "()", "summary", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", "interrupt", "(boolean)", "summary", "df-generated"] + - ["jenkins.model.queue", "AsynchronousExecution", "maybeComplete", "()", "summary", "df-generated"] + - ["jenkins.model.queue", "ItemDeletion", "contains", "(Item)", "summary", "df-generated"] + - ["jenkins.model.queue", "ItemDeletion", "deregister", "(Item)", "summary", "df-generated"] + - ["jenkins.model.queue", "ItemDeletion", "isRegistered", "(Item)", "summary", "df-generated"] + - ["jenkins.model.queue", "ItemDeletion", "register", "(Item)", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManager", "archive", "(FilePath,Launcher,BuildListener,Map)", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManager", "delete", "()", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManager", "onLoad", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManager", "root", "()", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManagerConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManagerFactory", "managerFor", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "ArtifactManagerFactoryDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "AssetManager", "doDynamic", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "BackgroundGlobalBuildDiscarder", "processJob", "(TaskListener,Job)", "summary", "df-generated"] + - ["jenkins.model", "BuildDiscarder", "perform", "(Job)", "summary", "df-generated"] + - ["jenkins.model", "BuildDiscarderDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "BuiltInNodeMigration", "doAct", "(StaplerRequest,StaplerResponse,String,String)", "summary", "df-generated"] + - ["jenkins.model", "CauseOfInterruption", "getShortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "CauseOfInterruption", "print", "(TaskListener)", "summary", "df-generated"] + - ["jenkins.model", "Configuration", "getBooleanConfigParameter", "(String,boolean)", "summary", "df-generated"] + - ["jenkins.model", "DependencyDeclarer", "buildDependencyGraph", "(AbstractProject,DependencyGraph)", "summary", "df-generated"] + - ["jenkins.model", "DirectlyModifiableTopLevelItemGroup", "canAdd", "(TopLevelItem)", "summary", "df-generated"] + - ["jenkins.model", "DirectlyModifiableTopLevelItemGroup", "remove", "(TopLevelItem)", "summary", "df-generated"] + - ["jenkins.model", "FingerprintFacet", "createActions", "(List)", "summary", "df-generated"] + - ["jenkins.model", "FingerprintFacet", "getTimestamp", "()", "summary", "df-generated"] + - ["jenkins.model", "FingerprintFacet", "isFingerprintDeletionBlocked", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderStrategy", "apply", "(Job)", "summary", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderStrategy", "apply", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderStrategy", "isApplicable", "(Job)", "summary", "df-generated"] + - ["jenkins.model", "GlobalBuildDiscarderStrategyDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalCloudConfiguration", "doConfigure", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "GlobalConfiguration", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalConfigurationCategory", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalConfigurationCategory", "get", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "GlobalConfigurationCategory", "getShortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalQuietPeriodConfiguration", "getQuietPeriod", "()", "summary", "df-generated"] + - ["jenkins.model", "GlobalSCMRetryCountConfiguration", "getScmCheckoutRetryCount", "()", "summary", "df-generated"] + - ["jenkins.model", "IdStrategy", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "IdStrategy", "equals", "(String,String)", "summary", "df-generated"] + - ["jenkins.model", "IdStrategy", "filenameOf", "(String)", "summary", "df-generated"] + - ["jenkins.model", "IdStrategy", "legacyFilenameOf", "(String)", "summary", "df-generated"] + - ["jenkins.model", "IdStrategy", "toString", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$DescriptorImpl", "doCheckNumExecutors", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$DescriptorImpl", "getDynamic", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$EnforceSlaveAgentPortAdministrativeMonitor", "doAct", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$EnforceSlaveAgentPortAdministrativeMonitor", "getExpectedPort", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$EnforceSlaveAgentPortAdministrativeMonitor", "getSystemPropertyName", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins$JenkinsHolder", "getInstance", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "_doScript", "(StaplerRequest,StaplerResponse,RequestDispatcher,VirtualChannel,ACL)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "addNode", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "checkGoodName", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "cleanUp", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "copy", "(AbstractProject,String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "createProject", "(Class,String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "disableSecurity", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doCancelQuietDown", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doCheckDisplayName", "(String,String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doCheckURIEncoding", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doCheckViewName", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doClassicThreadDump", "(StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doConfigExecutorsSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doConfigSubmit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doCreateView", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doDefaultJDKCheck", "(StaplerRequest,String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doDoFingerprintCheck", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doEval", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doException", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doExit", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doFingerprintCleanup", "(StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doGc", "(StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doIconSize", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doLoginEntry", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doLogout", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doQuietDown", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doQuietDown", "(boolean,int)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doReload", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doResources", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doRestart", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSafeExit", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSafeRestart", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doScript", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doScriptText", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSecured", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSignup", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSimulateOutOfMemory", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doSubmitDescription", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doTestPost", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doToggleCollapse", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doViewExistsCheck", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "doWorkspaceCleanup", "(StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "get", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getActiveInstance", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getAuthentication2", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getAuthentication", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getBuildWrapper", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getBuilder", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getCategorizedManagementLinks", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getComputer", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getConfiguredRootUrl", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getDescriptor", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getDescriptorByType", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getFederatedLoginService", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getFederatedLoginServices", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getInitLevel", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getInjector", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getInstallState", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getInstance", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getInstanceOrNull", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getItem", "(String,Item,Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getItem", "(String,ItemGroup,Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getItemByFullName", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getItemByFullName", "(String,Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getItems", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getJobNames", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getJobProperty", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getLegacyInstanceId", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getLifecycle", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getManagementLinks", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getMe", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getPlugin", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getPlugin", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getPlugins", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getProjects", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getPublisher", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getQuietPeriod", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getRepositoryBrowser", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getRetentionStrategy", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getRootUrl", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getRootUrlFromRequest", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getScm", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getScmCheckoutRetryCount", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getSecretKeyAsAES128", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getSecurity", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getSecurityRealms", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getSlaveAgentPort", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getStoredVersion", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getTrigger", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getUnprotectedRootActions", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "getVersion", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "hasPeople", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isCheckURIEncodingEnabled", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isDefaultBuildDir", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isDisableRememberMe", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isNoUsageStatistics", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isQuietingDown", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isRootUrlSecure", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isSlaveAgentPortEnforced", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isSubjectToMandatoryReadPermissionCheck", "(String)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isTerminating", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isUpgradedFromBefore", "(VersionNumber)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isUsageStatisticsCollected", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isUseCrumbs", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isUseProjectNamingStrategy", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "isUseSecurity", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "lookup", "(Class)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "rebuildDependencyGraph", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "refreshExtensions", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "reload", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "removeNode", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "restart", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "safeRestart", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setAgentProtocols", "(Set)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setDisableRememberMe", "(boolean)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setMode", "(Mode)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setNoUsageStatistics", "(Boolean)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setNodes", "(List)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setNumExecutors", "(int)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setQuietPeriod", "(Integer)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setScmCheckoutRetryCount", "(int)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setSlaveAgentPort", "(int)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "setViews", "(Collection)", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "shouldShowStackTrace", "()", "summary", "df-generated"] + - ["jenkins.model", "Jenkins", "updateNode", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", "doCheckAdminAddress", "(String)", "summary", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", "doCheckUrl", "(String)", "summary", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.model", "JenkinsLocationConfiguration", "getOrDie", "()", "summary", "df-generated"] + - ["jenkins.model", "MasterBuildConfiguration", "getLabelString", "()", "summary", "df-generated"] + - ["jenkins.model", "MasterBuildConfiguration", "getNumExecutors", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "BlockedBecauseOfBuildInProgress_ETA", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "BlockedBecauseOfBuildInProgress_shortDescription", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "BuildDiscarderProperty_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "BuiltInNodeMigration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_disable_job_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_enable_job_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_keep_build_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_restart_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_safe_restart_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_safe_shutdown_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CLI_shutdown_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "CauseOfInterruption_ShortDescription", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "DefaultProjectNamingStrategy_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "EnforceSlaveAgentPortAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "GlobalCloudConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_BadPortNumber", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_Computer_Caption", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_Computer_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_Computer_IncorrectNumberOfExecutors", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_ControlCodeNotAllowed", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_JobAlreadyExists", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_JobNameConventionNotApplyed", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_NoJavaInPath", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_NoName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_NodeBeingRemoved", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_NodeDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_NotUsesUTF8ToDecodeURL", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_UnsafeChar", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_ViewAlreadyExists", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Hudson_ViewName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "IdStrategy_CaseInsensitive_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "IdStrategy_CaseSensitiveEmailAddress_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "IdStrategy_CaseSensitive_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "JenkinsLocationConfiguration_does_not_look_like_an_email_address", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "JobGlobalBuildDiscarderStrategy_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Mailer_Address_Not_Configured", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Mailer_Localhost_Error", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "Mailer_NotHttp_Error", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "ParameterizedJobMixIn_build_now", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "ParameterizedJobMixIn_build_with_parameters", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "PatternProjectNamingStrategy_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "PatternProjectNamingStrategy_NamePatternInvalidSyntax", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "PatternProjectNamingStrategy_NamePatternRequired", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "SimpleGlobalBuildDiscarderStrategy_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_BlockedBecauseOfBuildInProgress_ETA", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_BlockedBecauseOfBuildInProgress_shortDescription", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_BuildDiscarderProperty_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_BuiltInNodeMigration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_disable_job_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_enable_job_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_keep_build_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_restart_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_safe_restart_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_safe_shutdown_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CLI_shutdown_shortDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_CauseOfInterruption_ShortDescription", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_DefaultProjectNamingStrategy_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_EnforceSlaveAgentPortAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_GlobalCloudConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_BadPortNumber", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_Computer_Caption", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_Computer_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_Computer_IncorrectNumberOfExecutors", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_ControlCodeNotAllowed", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_JobAlreadyExists", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_JobNameConventionNotApplyed", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_NoJavaInPath", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_NoName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_NodeBeingRemoved", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_NodeDescription", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_NotUsesUTF8ToDecodeURL", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_UnsafeChar", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_ViewAlreadyExists", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Hudson_ViewName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_IdStrategy_CaseInsensitive_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_IdStrategy_CaseSensitiveEmailAddress_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_IdStrategy_CaseSensitive_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_JenkinsLocationConfiguration_does_not_look_like_an_email_address", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_JobGlobalBuildDiscarderStrategy_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Mailer_Address_Not_Configured", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Mailer_Localhost_Error", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_Mailer_NotHttp_Error", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_ParameterizedJobMixIn_build_now", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_ParameterizedJobMixIn_build_with_parameters", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_PatternProjectNamingStrategy_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_PatternProjectNamingStrategy_NamePatternInvalidSyntax", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_PatternProjectNamingStrategy_NamePatternRequired", "()", "summary", "df-generated"] + - ["jenkins.model", "Messages", "_SimpleGlobalBuildDiscarderStrategy_displayName", "()", "summary", "df-generated"] + - ["jenkins.model", "ModelObjectWithChildren", "doChildrenContextMenu", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "ModelObjectWithContextMenu", "doContextMenu", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "ModifiableTopLevelItemGroup", "copy", "(TopLevelItem,String)", "summary", "df-generated"] + - ["jenkins.model", "ModifiableTopLevelItemGroup", "createProjectFromXML", "(String,InputStream)", "summary", "df-generated"] + - ["jenkins.model", "NodeListener", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "NodeListener", "fireOnCreated", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "NodeListener", "fireOnDeleted", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "NodeListener", "fireOnUpdated", "(Node,Node)", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "isLegacy", "()", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "load", "()", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "removeNode", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "replaceNode", "(Node,Node)", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "setNodes", "(Collection)", "summary", "df-generated"] + - ["jenkins.model", "Nodes", "updateNode", "(Node)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doBuild", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doBuildWithParameters", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doCancelQueue", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doDisable", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doEnable", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "doPolling", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "getBuildNowText", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "getParameterizedJobMixIn", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "getQuietPeriod", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "isBuildable", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "isDisabled", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "isParameterized", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "makeDisabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "resolveForCLI", "(String)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "scheduleBuild2", "(int,Action[])", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "setDisabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn$ParameterizedJob", "supportsMakeDisabled", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "doBuild", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "doBuildWithParameters", "(StaplerRequest,StaplerResponse,TimeDuration)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "doCancelQueue", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "getBuildCause", "(ParameterizedJob,StaplerRequest)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "getBuildNowText", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "getTrigger", "(Job,Class)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "isParameterized", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "scheduleBuild2", "(int,Action[])", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "scheduleBuild", "()", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "scheduleBuild", "(Cause)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "scheduleBuild", "(int)", "summary", "df-generated"] + - ["jenkins.model", "ParameterizedJobMixIn", "scheduleBuild", "(int,Cause)", "summary", "df-generated"] + - ["jenkins.model", "PeepholePermalink", "apply", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy$PatternProjectNamingStrategy$DescriptorImpl", "doCheckNamePattern", "(String)", "summary", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy", "checkName", "(String)", "summary", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy", "checkName", "(String,String)", "summary", "df-generated"] + - ["jenkins.model", "ProjectNamingStrategy", "isForceExistingJobs", "()", "summary", "df-generated"] + - ["jenkins.model", "RunAction2", "onAttached", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "RunAction2", "onLoad", "(Run)", "summary", "df-generated"] + - ["jenkins.model", "RunIdMigrator$UnmigrationInstruction", "getCommand", "()", "summary", "df-generated"] + - ["jenkins.model", "RunIdMigrator", "created", "(File)", "summary", "df-generated"] + - ["jenkins.model", "RunIdMigrator", "delete", "(File,String)", "summary", "df-generated"] + - ["jenkins.model", "RunIdMigrator", "findNumber", "(String)", "summary", "df-generated"] + - ["jenkins.model", "RunIdMigrator", "migrate", "(File,File)", "summary", "df-generated"] + - ["jenkins.model", "SimplePageDecorator", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "SimplePageDecorator", "first", "()", "summary", "df-generated"] + - ["jenkins.model", "SimplePageDecorator", "getUrl", "()", "summary", "df-generated"] + - ["jenkins.model", "TransientActionFactory", "actionType", "()", "summary", "df-generated"] + - ["jenkins.model", "TransientActionFactory", "createFor", "(Object)", "summary", "df-generated"] + - ["jenkins.model", "TransientActionFactory", "factoriesFor", "(Class,Class)", "summary", "df-generated"] + - ["jenkins.model", "TransientActionFactory", "type", "()", "summary", "df-generated"] + - ["jenkins.model", "TransientFingerprintFacetFactory", "all", "()", "summary", "df-generated"] + - ["jenkins.model", "TransientFingerprintFacetFactory", "createFor", "(Fingerprint,List)", "summary", "df-generated"] + - ["jenkins.model", "Uptime", "getStartTime", "()", "summary", "df-generated"] + - ["jenkins.model", "Uptime", "getUptime", "()", "summary", "df-generated"] + - ["jenkins.model", "Uptime", "init", "()", "summary", "df-generated"] + - ["jenkins.monitor", "JavaVersionRecommendationAdminMonitor", "doAct", "(String)", "summary", "df-generated"] + - ["jenkins.monitor", "Messages", "JavaLevelAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.monitor", "Messages", "_JavaLevelAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "GlobalMavenConfig", "get", "()", "summary", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", "parseSettingsProvider", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProvider", "supplySettings", "(AbstractBuild,TaskListener)", "summary", "df-generated"] + - ["jenkins.mvn", "GlobalSettingsProviderDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "DefaultGlobalSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "DefaultSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "FilePathGlobalSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "FilePathSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "_DefaultGlobalSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "_DefaultSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "_FilePathGlobalSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "Messages", "_FilePathSettingsProvider_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", "parseSettingsProvider", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.mvn", "SettingsProvider", "supplySettings", "(AbstractBuild,TaskListener)", "summary", "df-generated"] + - ["jenkins.mvn", "SettingsProviderDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "getInstance", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "getInstance", "(boolean)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "getTLDEntries", "(ArrayType)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isAllowLocal", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValid", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValidCountryCodeTld", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValidGenericTld", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValidInfrastructureTld", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValidLocalTld", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "isValidTld", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "unicodeToASCII", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "DomainValidator", "updateTLDOverride", "(ArrayType,String[])", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "InetAddressValidator", "getInstance", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "InetAddressValidator", "isValid", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "InetAddressValidator", "isValidInet4Address", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "InetAddressValidator", "isValidInet6Address", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "RegexValidator", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "RegexValidator", "(String,boolean)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "RegexValidator", "(String[])", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "RegexValidator", "(String[],boolean)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "isValid", "(String)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "RegexValidator", "toString", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", "UrlValidator", "(long)", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", "getInstance", "()", "summary", "df-generated"] + - ["jenkins.org.apache.commons.validator.routines", "UrlValidator", "isValid", "(String)", "summary", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil$DetachedPlugin", "getRequiredVersion", "()", "summary", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil", "getDetachedPlugins", "()", "summary", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil", "getDetachedPlugins", "(VersionNumber)", "summary", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil", "getImpliedDependencies", "(String,String)", "summary", "df-generated"] + - ["jenkins.plugins", "DetachedPluginsUtil", "isDetachedPlugin", "(String)", "summary", "df-generated"] + - ["jenkins.scm", "RunWithSCM", "calculateCulprits", "()", "summary", "df-generated"] + - ["jenkins.scm", "RunWithSCM", "getCulprits", "()", "summary", "df-generated"] + - ["jenkins.scm", "RunWithSCM", "hasParticipant", "(User)", "summary", "df-generated"] + - ["jenkins.scm", "SCMCheckoutStrategy", "checkout", "(AbstractBuildExecution)", "summary", "df-generated"] + - ["jenkins.scm", "SCMCheckoutStrategy", "preCheckout", "(AbstractBuild,Launcher,BuildListener)", "summary", "df-generated"] + - ["jenkins.scm", "SCMCheckoutStrategyDescriptor", "_for", "(AbstractProject)", "summary", "df-generated"] + - ["jenkins.scm", "SCMCheckoutStrategyDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.scm", "SCMCheckoutStrategyDescriptor", "isApplicable", "(AbstractProject)", "summary", "df-generated"] + - ["jenkins.scm", "SCMDecisionHandler", "all", "()", "summary", "df-generated"] + - ["jenkins.scm", "SCMDecisionHandler", "firstShouldPollVeto", "(Item)", "summary", "df-generated"] + - ["jenkins.scm", "SCMDecisionHandler", "listShouldPollVetos", "(Item)", "summary", "df-generated"] + - ["jenkins.scm", "SCMDecisionHandler", "shouldPoll", "(Item)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "hasExistingConfigFile", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "isCreationOfLegacyTokenEnabled", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "isTokenGenerationOnCreationEnabled", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "isUsageStatisticsEnabled", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "setCreationOfLegacyTokenEnabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "setTokenGenerationOnCreationEnabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyConfiguration", "setUsageStatisticsEnabled", "(boolean)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyDisabledDefaultAdministrativeMonitor", "doAct", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenPropertyEnabledNewLegacyAdministrativeMonitor", "doAct", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats$SingleTokenStats", "getNumDaysUse", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats$SingleTokenStats", "getUseCounter", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", "removeAll", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", "removeAllExcept", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStats", "removeId", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", "getNumDaysCreation", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", "isLegacy", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore$HashedToken", "match", "(byte[])", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "addFixedNewToken", "(String,String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "generateNewToken", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "reconfigure", "(Map)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "regenerateTokenFromLegacy", "(Secret)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "regenerateTokenFromLegacyIfRequired", "(Secret)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "renameToken", "(String,String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "revokeAllTokens", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "ApiTokenStore", "revokeAllTokensExcept", "(String)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "doIndex", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "doRevokeAllSelected", "(RevokeAllSelectedModel)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "getImpactedUserList", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "getLegacyTokenOf", "(User)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "hasFreshToken", "(User,TokenInfoAndStats)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "LegacyApiTokenAdministrativeMonitor", "hasMoreRecentlyUsedToken", "(User,TokenInfoAndStats)", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "ApiTokenPropertyDisabledDefaultAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "ApiTokenPropertyEnabledNewLegacyAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "LegacyApiTokenAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "_ApiTokenPropertyDisabledDefaultAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "_ApiTokenPropertyEnabledNewLegacyAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.apitoken", "Messages", "_LegacyApiTokenAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.csrf", "Messages", "CSRFAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.csrf", "Messages", "_CSRFAdministrativeMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.security.s2m", "AdminWhitelistRule", "getMasterKillSwitch", "()", "summary", "df-generated"] + - ["jenkins.security.s2m", "AdminWhitelistRule", "setMasterKillSwitch", "(boolean)", "summary", "df-generated"] + - ["jenkins.security.seed", "Messages", "UserSeedProperty_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security.seed", "Messages", "_UserSeedProperty_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security.seed", "UserSeedChangeListener", "fireUserSeedRenewed", "(User)", "summary", "df-generated"] + - ["jenkins.security.seed", "UserSeedChangeListener", "onUserSeedRenewed", "(User)", "summary", "df-generated"] + - ["jenkins.security.seed", "UserSeedProperty$DescriptorImpl", "doRenewSessionSeed", "(User)", "summary", "df-generated"] + - ["jenkins.security.seed", "UserSeedProperty$DescriptorImpl", "isCurrentUser", "(User)", "summary", "df-generated"] + - ["jenkins.security.seed", "UserSeedProperty", "renewSeed", "()", "summary", "df-generated"] + - ["jenkins.security.stapler", "RoutingDecisionProvider", "decide", "(String)", "summary", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", "get", "()", "summary", "df-generated"] + - ["jenkins.security.stapler", "StaticRoutingDecisionProvider", "reload", "()", "summary", "df-generated"] + - ["jenkins.security.stapler", "TypedFilter", "isStaplerRelevant", "(Class)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doAddFixedToken", "(User,String,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doChangeToken", "(User,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doGenerateNewToken", "(User,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doRename", "(User,String,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doRevoke", "(User,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doRevokeAll", "(User)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "doRevokeAllExcept", "(User,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "getNoLegacyToken", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "hasCurrentUserRightToGenerateNewToken", "(User)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "isStatisticsEnabled", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty$DescriptorImpl", "mustDisplayLegacyApiToken", "(User)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "addFixedNewToken", "(String,String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "changeApiToken", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "deleteApiToken", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "generateNewToken", "(String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "getApiToken", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "getTokenList", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "hasLegacyToken", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "matchesPassword", "(String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "revokeAllTokens", "()", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "revokeAllTokensExceptOne", "(String)", "summary", "df-generated"] + - ["jenkins.security", "ApiTokenProperty", "revokeToken", "(String)", "summary", "df-generated"] + - ["jenkins.security", "BasicHeaderAuthenticator", "all", "()", "summary", "df-generated"] + - ["jenkins.security", "BasicHeaderAuthenticator", "authenticate2", "(HttpServletRequest,HttpServletResponse,String,String)", "summary", "df-generated"] + - ["jenkins.security", "BasicHeaderAuthenticator", "authenticate", "(HttpServletRequest,HttpServletResponse,String,String)", "summary", "df-generated"] + - ["jenkins.security", "ChannelConfigurator", "all", "()", "summary", "df-generated"] + - ["jenkins.security", "ChannelConfigurator", "onChannelBuilding", "(ChannelBuilder,Object)", "summary", "df-generated"] + - ["jenkins.security", "ClassFilterImpl", "register", "()", "summary", "df-generated"] + - ["jenkins.security", "ClassFilterImpl", "unregister", "()", "summary", "df-generated"] + - ["jenkins.security", "ConfidentialStore", "get", "()", "summary", "df-generated"] + - ["jenkins.security", "ConfidentialStore", "randomBytes", "(int)", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "decrypt", "()", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "decrypt", "(byte[])", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "encrypt", "()", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "encrypt", "(byte[])", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "newIv", "()", "summary", "df-generated"] + - ["jenkins.security", "CryptoConfidentialKey", "newIv", "(int)", "summary", "df-generated"] + - ["jenkins.security", "CustomClassFilter$Contributed", "load", "()", "summary", "df-generated"] + - ["jenkins.security", "CustomClassFilter", "permits", "(Class)", "summary", "df-generated"] + - ["jenkins.security", "CustomClassFilter", "permits", "(String)", "summary", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", "checkMac", "(String,String)", "summary", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", "checkMac", "(byte[],byte[])", "summary", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", "createMac", "()", "summary", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", "mac", "(String)", "summary", "df-generated"] + - ["jenkins.security", "HMACConfidentialKey", "mac", "(byte[])", "summary", "df-generated"] + - ["jenkins.security", "LastGrantedAuthoritiesProperty", "getAuthorities2", "()", "summary", "df-generated"] + - ["jenkins.security", "LastGrantedAuthoritiesProperty", "getAuthorities", "()", "summary", "df-generated"] + - ["jenkins.security", "LastGrantedAuthoritiesProperty", "invalidate", "()", "summary", "df-generated"] + - ["jenkins.security", "LastGrantedAuthoritiesProperty", "update", "(Authentication)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_ChangeToken_CapabilityNotAllowed", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_ChangeToken_Success", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_ChangeToken_SuccessHidden", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_ChangeToken_TokenIsHidden", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_LegacyTokenName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ApiTokenProperty_NoLegacyToken", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "RekeySecretAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_Empty", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_Exception", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_FailedIdentityCheck", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_IOException", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_Invalid", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_InvalidRootURL", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_NeedsRootURL", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_NotJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_OtherJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_ResourceResponse", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_SameAsCurrent", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_SameAsJenkinsRoot", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_SomeJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "ResourceDomainConfiguration_ThisJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "Token_Created_on", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "UpdateSiteWarningsMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_ChangeToken_CapabilityNotAllowed", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_ChangeToken_Success", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_ChangeToken_SuccessHidden", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_ChangeToken_TokenIsHidden", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_LegacyTokenName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ApiTokenProperty_NoLegacyToken", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_RekeySecretAdminMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_Empty", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_Exception", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_FailedIdentityCheck", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_IOException", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_Invalid", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_InvalidRootURL", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_NeedsRootURL", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_NotJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_OtherJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_ResourceResponse", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_SameAsCurrent", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_SameAsJenkinsRoot", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_SomeJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_ResourceDomainConfiguration_ThisJenkins", "()", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_Token_Created_on", "(Object)", "summary", "df-generated"] + - ["jenkins.security", "Messages", "_UpdateSiteWarningsMonitor_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticator", "authenticate2", "(Item)", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticator", "authenticate2", "(Task)", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticator", "authenticate", "(Item)", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticator", "authenticate", "(Task)", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticatorConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticatorDescriptor", "all", "()", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticatorProvider", "authenticators", "()", "summary", "df-generated"] + - ["jenkins.security", "QueueItemAuthenticatorProvider", "getAuthenticators", "()", "summary", "df-generated"] + - ["jenkins.security", "RSAConfidentialKey", "getEncodedPublicKey", "()", "summary", "df-generated"] + - ["jenkins.security", "RSADigitalSignatureConfidentialKey", "sign", "(String)", "summary", "df-generated"] + - ["jenkins.security", "RekeySecretAdminMonitor", "doScan", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins.security", "RekeySecretAdminMonitor", "isDone", "()", "summary", "df-generated"] + - ["jenkins.security", "RekeySecretAdminMonitor", "isScanOnBoot", "()", "summary", "df-generated"] + - ["jenkins.security", "RekeySecretAdminMonitor", "scanOnReboot", "()", "summary", "df-generated"] + - ["jenkins.security", "RekeySecretAdminMonitor", "setNeeded", "()", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", "doCheckUrl", "(String)", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", "isResourceDomainConfigured", "()", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainConfiguration", "isResourceRequest", "(HttpServletRequest)", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainFilter", "init", "()", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainRecommendation", "doAct", "(String,String)", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainRootAction", "doIndex", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.security", "ResourceDomainRootAction", "get", "()", "summary", "df-generated"] + - ["jenkins.security", "SecureRequester", "permit", "(StaplerRequest,Object)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireAuthenticated2", "(UserDetails)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireAuthenticated", "(UserDetails)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireFailedToAuthenticate", "(String)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireFailedToLogIn", "(String)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireLoggedIn", "(String)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireLoggedOut", "(String)", "summary", "df-generated"] + - ["jenkins.security", "SecurityListener", "fireUserCreated", "(String)", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", "getAllWarnings", "()", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", "getApplicableWarnings", "()", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", "getPlugin", "(Warning)", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsConfiguration", "isIgnored", "(Warning)", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsMonitor", "doForward", "(String,String)", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsMonitor", "getActiveCoreWarnings", "()", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsMonitor", "getActivePluginWarningsByPlugin", "()", "summary", "df-generated"] + - ["jenkins.security", "UpdateSiteWarningsMonitor", "hasApplicableHiddenWarnings", "()", "summary", "df-generated"] + - ["jenkins.security", "UserDetailsCache", "get", "()", "summary", "df-generated"] + - ["jenkins.security", "UserDetailsCache", "invalidate", "(String)", "summary", "df-generated"] + - ["jenkins.security", "UserDetailsCache", "invalidateAll", "()", "summary", "df-generated"] + - ["jenkins.slaves.restarter", "SlaveRestarter", "all", "()", "summary", "df-generated"] + - ["jenkins.slaves.restarter", "SlaveRestarter", "canWork", "()", "summary", "df-generated"] + - ["jenkins.slaves.restarter", "SlaveRestarter", "restart", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "ClassLoaderStatisticsSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "EnvVarsSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "SystemPropertySlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "ThreadDumpSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "_ClassLoaderStatisticsSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "_EnvVarsSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "_SystemPropertySlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "Messages", "_ThreadDumpSlaveInfo_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "SlaveSystemInfo", "all", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "SlaveSystemInfo", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins.slaves.systemInfo", "SlaveSystemInfo", "getRequiredPermission", "()", "summary", "df-generated"] + - ["jenkins.slaves", "IOHubProvider", "cleanUp", "()", "summary", "df-generated"] + - ["jenkins.slaves", "JnlpAgentReceiver", "all", "()", "summary", "df-generated"] + - ["jenkins.slaves", "JnlpAgentReceiver", "exists", "(String)", "summary", "df-generated"] + - ["jenkins.slaves", "JnlpAgentReceiver", "generateCookie", "()", "summary", "df-generated"] + - ["jenkins.slaves", "JnlpAgentReceiver", "owns", "(String)", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "DeprecatedAgentProtocolMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "JnlpSlaveAgentProtocol2_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "JnlpSlaveAgentProtocol3_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "JnlpSlaveAgentProtocol4_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "JnlpSlaveAgentProtocol_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "_DeprecatedAgentProtocolMonitor_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "_JnlpSlaveAgentProtocol2_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "_JnlpSlaveAgentProtocol3_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "_JnlpSlaveAgentProtocol4_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "Messages", "_JnlpSlaveAgentProtocol_displayName", "()", "summary", "df-generated"] + - ["jenkins.slaves", "NioChannelSelector", "cleanUp", "()", "summary", "df-generated"] + - ["jenkins.slaves", "PingFailureAnalyzer", "all", "()", "summary", "df-generated"] + - ["jenkins.slaves", "PingFailureAnalyzer", "onPingFailure", "(Channel,Throwable)", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingVersionInfo", "getEmbeddedVersion", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingVersionInfo", "getMinimumSupportedVersion", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", "getDisabledDefaults", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", "getEnabledDefaults", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", "isDisabled", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", "isFailIfWorkDirIsMissing", "()", "summary", "df-generated"] + - ["jenkins.slaves", "RemotingWorkDirSettings", "isUseAgentRootDir", "()", "summary", "df-generated"] + - ["jenkins.slaves", "WorkspaceLocator", "all", "()", "summary", "df-generated"] + - ["jenkins.slaves", "WorkspaceLocator", "locate", "(TopLevelItem,Node)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_CharacteristicEnvVarsFormValidationOK", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_CharacteristicEnvVarsFormValidationWarning", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_REMOVE_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_RESET_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_RemovalMessage", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "RetainVariablesLocalRule_ResetMessage", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_CharacteristicEnvVarsFormValidationOK", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_CharacteristicEnvVarsFormValidationWarning", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_REMOVE_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_RESET_DisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_RemovalMessage", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "Messages", "_RetainVariablesLocalRule_ResetMessage", "(Object,Object)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule$DescriptorImpl", "doCheckRetainCharacteristicEnvVars", "(boolean)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule$ProcessVariablesHandling", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", "getProcessVariablesHandling", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", "isRetainCharacteristicEnvVars", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", "setProcessVariablesHandling", "(ProcessVariablesHandling)", "summary", "df-generated"] + - ["jenkins.tasks.filters.impl", "RetainVariablesLocalRule", "setRetainCharacteristicEnvVars", "(boolean)", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterGlobalConfiguration", "get", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterGlobalConfiguration", "getAllActivatedGlobalRules", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterGlobalConfiguration", "getAllGlobalRules", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterLocalRuleDescriptor", "allApplicableFor", "(Class)", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterLocalRuleDescriptor", "isApplicable", "(Class)", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRule", "filter", "(EnvVars,EnvVarsFilterRuleContext)", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRule", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterRuleWrapper", "filter", "(EnvVars,Launcher,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks.filters", "EnvVarsFilterableBuilder", "buildEnvVarsFilterRules", "()", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildStep", "perform", "(Run,EnvVars,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildStep", "perform", "(Run,FilePath,EnvVars,Launcher,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildStep", "perform", "(Run,FilePath,Launcher,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildStep", "requiresWorkspace", "()", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Disposer", "requiresWorkspace", "()", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Disposer", "tearDown", "(Run,FilePath,Launcher,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper$Disposer", "tearDown", "(Run,TaskListener)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper", "createContext", "()", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper", "createLoggerDecorator", "(Run)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper", "requiresWorkspace", "()", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper", "setUp", "(Context,Run,FilePath,Launcher,TaskListener,EnvVars)", "summary", "df-generated"] + - ["jenkins.tasks", "SimpleBuildWrapper", "setUp", "(Context,Run,TaskListener,EnvVars)", "summary", "df-generated"] + - ["jenkins.telemetry.impl", "UserLanguages", "setUpFilter", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "all", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "createContent", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "getEnd", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "getId", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "getStart", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "isActivePeriod", "()", "summary", "df-generated"] + - ["jenkins.telemetry", "Telemetry", "isDisabled", "()", "summary", "df-generated"] + - ["jenkins.tools", "GlobalToolConfiguration", "doConfigure", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "ReverseBuildTrigger_build_after_other_projects_are_built", "()", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "ReverseBuildTrigger_running_as_cannot_even_see_for_trigger_f", "(Object,Object,Object)", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "SCMTriggerItem_PollingVetoed", "(Object)", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "_ReverseBuildTrigger_build_after_other_projects_are_built", "()", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "_ReverseBuildTrigger_running_as_cannot_even_see_for_trigger_f", "(Object,Object,Object)", "summary", "df-generated"] + - ["jenkins.triggers", "Messages", "_SCMTriggerItem_PollingVetoed", "(Object)", "summary", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger$DescriptorImpl", "doAutoCompleteUpstreamProjects", "(String,Item,ItemGroup)", "summary", "df-generated"] + - ["jenkins.triggers", "ReverseBuildTrigger$DescriptorImpl", "doCheckUpstreamProjects", "(Job,String)", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "asItem", "()", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "getNextBuildNumber", "()", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "getQuietPeriod", "()", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "getSCMTrigger", "()", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "getSCMs", "()", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "poll", "(TaskListener)", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "scheduleBuild2", "(int,Action[])", "summary", "df-generated"] + - ["jenkins.triggers", "SCMTriggerItem", "schedulePolling", "()", "summary", "df-generated"] + - ["jenkins.util.groovy", "AbstractGroovyViewModule", "methodMissing", "(String,Object)", "summary", "df-generated"] + - ["jenkins.util.groovy", "AbstractGroovyViewModule", "propertyMissing", "(String)", "summary", "df-generated"] + - ["jenkins.util.groovy", "AbstractGroovyViewModule", "propertyMissing", "(String,Object)", "summary", "df-generated"] + - ["jenkins.util.groovy", "GroovyHookScript", "run", "()", "summary", "df-generated"] + - ["jenkins.util.io", "CompositeIOException", "asUncheckedIOException", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "fastGet", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "get", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "isOff", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "isOn", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "off", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "on", "()", "summary", "df-generated"] + - ["jenkins.util.io", "FileBoolean", "set", "(boolean)", "summary", "df-generated"] + - ["jenkins.util.io", "PathRemover$RetryStrategy", "shouldRetry", "(int)", "summary", "df-generated"] + - ["jenkins.util.io", "PathRemover", "forceRemoveDirectoryContents", "(Path)", "summary", "df-generated"] + - ["jenkins.util.io", "PathRemover", "forceRemoveFile", "(Path)", "summary", "df-generated"] + - ["jenkins.util.io", "PathRemover", "forceRemoveRecursive", "(Path)", "summary", "df-generated"] + - ["jenkins.util.io", "PathRemover", "newSimpleRemover", "()", "summary", "df-generated"] + - ["jenkins.util.java", "JavaUtils", "getCurrentJavaRuntimeVersionNumber", "()", "summary", "df-generated"] + - ["jenkins.util.java", "JavaUtils", "getCurrentRuntimeJavaVersion", "()", "summary", "df-generated"] + - ["jenkins.util.java", "JavaUtils", "isRunningWithJava8OrBelow", "()", "summary", "df-generated"] + - ["jenkins.util.java", "JavaUtils", "isRunningWithPostJava8", "()", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "getValue", "(String,Document)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "getValue", "(String,File)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "getValue", "(String,File,String)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "parse", "(File)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "parse", "(File,String)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "parse", "(InputStream)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "parse", "(Reader)", "summary", "df-generated"] + - ["jenkins.util.xml", "XMLUtils", "safeTransform", "(Source,Result)", "summary", "df-generated"] + - ["jenkins.util.xstream", "CriticalXStreamException", "CriticalXStreamException", "(XStreamException)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM$ConverterImpl", "unmarshalElement", "(HierarchicalStreamReader,UnmarshallingContext)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "from", "(HierarchicalStreamReader)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "from", "(InputStream)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "from", "(Reader)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "from", "(XStream,Object)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "getAttributeCount", "()", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "newReader", "()", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "newWriter", "()", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "unmarshal", "(XStream)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "unmarshal", "(XStream,Object)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "writeTo", "(HierarchicalStreamWriter)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "writeTo", "(OutputStream)", "summary", "df-generated"] + - ["jenkins.util.xstream", "XStreamDOM", "writeTo", "(Writer)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "AntClassLoader", "(ClassLoader,Project,Path)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "AntClassLoader", "(ClassLoader,Project,Path,boolean)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "AntClassLoader", "(ClassLoader,boolean)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "AntClassLoader", "(Project,Path)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "AntClassLoader", "(Project,Path,boolean)", "summary", "df-generated"] + - ["jenkins.util", "AntClassLoader", "addPathFiles", "(Collection)", "summary", "df-generated"] + - ["jenkins.util", "DirectedGraph$SCC", "SCC", "(int)", "summary", "df-generated"] + - ["jenkins.util", "DirectedGraph", "getStronglyConnectedComponents", "()", "summary", "df-generated"] + - ["jenkins.util", "FullDuplexHttpService", "download", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.util", "FullDuplexHttpService", "upload", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["jenkins.util", "HttpSessionListener", "all", "()", "summary", "df-generated"] + - ["jenkins.util", "InterceptingExecutorService", "toString", "()", "summary", "df-generated"] + - ["jenkins.util", "JSONSignatureValidator", "verifySignature", "(JSONObject)", "summary", "df-generated"] + - ["jenkins.util", "JavaVMArguments", "current", "()", "summary", "df-generated"] + - ["jenkins.util", "JenkinsClassLoader", "findClass", "(String)", "summary", "df-generated"] + - ["jenkins.util", "JenkinsClassLoader", "findLoadedClass2", "(String)", "summary", "df-generated"] + - ["jenkins.util", "JenkinsClassLoader", "findResource", "(String)", "summary", "df-generated"] + - ["jenkins.util", "JenkinsClassLoader", "findResources", "(String)", "summary", "df-generated"] + - ["jenkins.util", "JenkinsClassLoader", "getClassLoadingLock", "(String)", "summary", "df-generated"] + - ["jenkins.util", "JenkinsJVM", "checkJenkinsJVM", "()", "summary", "df-generated"] + - ["jenkins.util", "JenkinsJVM", "checkNotJenkinsJVM", "()", "summary", "df-generated"] + - ["jenkins.util", "JenkinsJVM", "isJenkinsJVM", "()", "summary", "df-generated"] + - ["jenkins.util", "Listeners", "notify", "(Class,boolean,Consumer)", "summary", "df-generated"] + - ["jenkins.util", "MemoryReductionUtil", "getPresizedMutableMap", "(int)", "summary", "df-generated"] + - ["jenkins.util", "MemoryReductionUtil", "preallocatedHashmapCapacity", "(int)", "summary", "df-generated"] + - ["jenkins.util", "PluginLabelUtil", "canonicalLabels", "(JSONArray)", "summary", "df-generated"] + - ["jenkins.util", "ProgressiveRendering", "news", "()", "summary", "df-generated"] + - ["jenkins.util", "ProgressiveRendering", "start", "()", "summary", "df-generated"] + - ["jenkins.util", "ResourceBundleUtil", "getBundle", "(String)", "summary", "df-generated"] + - ["jenkins.util", "ResourceBundleUtil", "getBundle", "(String,Locale)", "summary", "df-generated"] + - ["jenkins.util", "ServerTcpPort", "ServerTcpPort", "(JSONObject)", "summary", "df-generated"] + - ["jenkins.util", "ServerTcpPort", "getPort", "()", "summary", "df-generated"] + - ["jenkins.util", "SetContextClassLoader", "SetContextClassLoader", "(Class)", "summary", "df-generated"] + - ["jenkins.util", "SetContextClassLoader", "SetContextClassLoader", "(ClassLoader)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "allowOnAgent", "(String)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getBoolean", "(String)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getBoolean", "(String,boolean)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getInteger", "(String)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getInteger", "(String,Integer)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getInteger", "(String,Integer,Level)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getLong", "(String)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getLong", "(String,Long)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getLong", "(String,Long,Level)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "getString", "(String)", "summary", "df-generated"] + - ["jenkins.util", "SystemProperties", "optBoolean", "(String)", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "TimeDuration", "(long)", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "as", "(TimeUnit)", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "fromString", "(String)", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "getTime", "()", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "getTimeInMillis", "()", "summary", "df-generated"] + - ["jenkins.util", "TimeDuration", "getTimeInSeconds", "()", "summary", "df-generated"] + - ["jenkins.util", "Timer", "get", "()", "summary", "df-generated"] + - ["jenkins.util", "Timer", "shutdown", "()", "summary", "df-generated"] + - ["jenkins.util", "TreeString$ConverterImpl", "ConverterImpl", "(XStream)", "summary", "df-generated"] + - ["jenkins.util", "TreeString", "isBlank", "()", "summary", "df-generated"] + - ["jenkins.util", "TreeStringBuilder", "dedup", "()", "summary", "df-generated"] + - ["jenkins.util", "URLClassLoader2", "URLClassLoader2", "(URL[])", "summary", "df-generated"] + - ["jenkins.util", "URLClassLoader2", "URLClassLoader2", "(URL[],ClassLoader)", "summary", "df-generated"] + - ["jenkins.util", "UrlHelper", "isValidRootUrl", "(String)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "canRead", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "child", "(String)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "containsSymLinkChild", "(boolean)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "exists", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "getName", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "getParent", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "hasSymlink", "(boolean)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "isDescendant", "(String)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "isDirectory", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "isFile", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "lastModified", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "length", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "list", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "list", "(String,String,boolean)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "list", "(String,String,boolean,boolean)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "listOnlyDescendants", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "mode", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "open", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "open", "(boolean)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "readLink", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "run", "(Callable)", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "supportIsDescendant", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "supportsQuickRecursiveListing", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "toExternalURL", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "toString", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "toURI", "()", "summary", "df-generated"] + - ["jenkins.util", "VirtualFile", "zip", "(OutputStream,String,String,boolean,boolean,String)", "summary", "df-generated"] + - ["jenkins.views", "Header", "get", "()", "summary", "df-generated"] + - ["jenkins.views", "Header", "isAvailable", "()", "summary", "df-generated"] + - ["jenkins.views", "Header", "isCompatible", "()", "summary", "df-generated"] + - ["jenkins.views", "Header", "isEnabled", "()", "summary", "df-generated"] + - ["jenkins.views", "PartialHeader", "getSupportedHeaderVersion", "()", "summary", "df-generated"] + - ["jenkins.views", "PartialHeader", "incompatibleHeaders", "()", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Handler", "close", "()", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Handler", "sendBinary", "(ByteBuffer)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Handler", "sendBinary", "(ByteBuffer,boolean)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Handler", "sendPing", "(ByteBuffer)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Handler", "sendText", "(String)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", "onWebSocketBinary", "(byte[],int,int)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", "onWebSocketClose", "(int,String)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", "onWebSocketError", "(Throwable)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider$Listener", "onWebSocketText", "(String)", "summary", "df-generated"] + - ["jenkins.websocket", "Provider", "handle", "(HttpServletRequest,HttpServletResponse,Listener)", "summary", "df-generated"] + - ["jenkins.websocket", "WebSocketEcho", "doIndex", "()", "summary", "df-generated"] + - ["jenkins.websocket", "WebSockets", "isSupported", "()", "summary", "df-generated"] + - ["jenkins.websocket", "WebSockets", "upgrade", "(WebSocketSession)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageEntry", "getEntryId", "()", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "HistoryPageFilter", "(int)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "add", "(Iterable)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "add", "(Iterable,List)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "setNewerThan", "(Long)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "setOlderThan", "(Long)", "summary", "df-generated"] + - ["jenkins.widgets", "HistoryPageFilter", "size", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "all", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "getDisplayName", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "getName", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "handle", "(Socket)", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "isDeprecated", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "isOptIn", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "isRequired", "()", "summary", "df-generated"] + - ["jenkins", "AgentProtocol", "of", "(String)", "summary", "df-generated"] + - ["jenkins", "ClassLoaderReflectionToolkit", "_findResource", "(ClassLoader,String)", "summary", "df-generated"] + - ["jenkins", "ClassLoaderReflectionToolkit", "_findResources", "(ClassLoader,String)", "summary", "df-generated"] + - ["jenkins", "ClassLoaderReflectionToolkit", "loadClass", "(ClassLoader,String)", "summary", "df-generated"] + - ["jenkins", "ExtensionComponentSet", "allOf", "(ExtensionFinder)", "summary", "df-generated"] + - ["jenkins", "ExtensionComponentSet", "filtered", "()", "summary", "df-generated"] + - ["jenkins", "ExtensionComponentSet", "find", "(Class)", "summary", "df-generated"] + - ["jenkins", "ExtensionComponentSet", "union", "(Collection)", "summary", "df-generated"] + - ["jenkins", "ExtensionComponentSet", "union", "(ExtensionComponentSet[])", "summary", "df-generated"] + - ["jenkins", "ExtensionFilter", "all", "()", "summary", "df-generated"] + - ["jenkins", "ExtensionFilter", "allows", "(Class,ExtensionComponent)", "summary", "df-generated"] + - ["jenkins", "ExtensionFilter", "isAllowed", "(Class,ExtensionComponent)", "summary", "df-generated"] + - ["jenkins", "ExtensionRefreshException", "ExtensionRefreshException", "(String,Throwable)", "summary", "df-generated"] + - ["jenkins", "ExtensionRefreshException", "ExtensionRefreshException", "(Throwable)", "summary", "df-generated"] + - ["jenkins", "I18n", "doResourceBundle", "(StaplerRequest)", "summary", "df-generated"] + - ["jenkins", "InitReactorRunner", "getDisplayName", "(Task)", "summary", "df-generated"] + - ["jenkins", "InitReactorRunner", "run", "(Reactor)", "summary", "df-generated"] + - ["jenkins", "UserAgentURLConnectionDecorator", "getUserAgent", "()", "summary", "df-generated"] + - ["jenkins", "YesNoMaybe", "toBool", "()", "summary", "df-generated"] + - ["jenkins", "YesNoMaybe", "toBoolean", "(YesNoMaybe)", "summary", "df-generated"] + - ["org.acegisecurity.acls.sid", "GrantedAuthoritySid", "GrantedAuthoritySid", "(GrantedAuthority)", "summary", "df-generated"] + - ["org.acegisecurity.acls.sid", "PrincipalSid", "PrincipalSid", "(Authentication)", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", "fromSpring", "(SecurityContext)", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", "getAuthentication", "()", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", "setAuthentication", "(Authentication)", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContext", "toSpring", "()", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContextHolder", "clearContext", "()", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContextHolder", "getContext", "()", "summary", "df-generated"] + - ["org.acegisecurity.context", "SecurityContextHolder", "setContext", "(SecurityContext)", "summary", "df-generated"] + - ["org.acegisecurity.providers.anonymous", "AnonymousAuthenticationToken", "AnonymousAuthenticationToken", "(String,Object,GrantedAuthority[])", "summary", "df-generated"] + - ["org.acegisecurity.providers.anonymous", "AnonymousAuthenticationToken", "setDetails", "(Object)", "summary", "df-generated"] + - ["org.acegisecurity.providers.anonymous", "AnonymousAuthenticationToken", "toString", "()", "summary", "df-generated"] + - ["org.acegisecurity.providers", "AbstractAuthenticationToken", "toString", "()", "summary", "df-generated"] + - ["org.acegisecurity.providers", "AuthenticationProvider", "authenticate", "(Authentication)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "AuthenticationProvider", "supports", "(Class)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "ProviderNotFoundException", "ProviderNotFoundException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "ProviderNotFoundException", "ProviderNotFoundException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "ProviderNotFoundException", "fromSpring", "(ProviderNotFoundException)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "UsernamePasswordAuthenticationToken", "UsernamePasswordAuthenticationToken", "(Object,Object)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "UsernamePasswordAuthenticationToken", "UsernamePasswordAuthenticationToken", "(Object,Object,GrantedAuthority[])", "summary", "df-generated"] + - ["org.acegisecurity.providers", "UsernamePasswordAuthenticationToken", "setDetails", "(Object)", "summary", "df-generated"] + - ["org.acegisecurity.providers", "UsernamePasswordAuthenticationToken", "toString", "()", "summary", "df-generated"] + - ["org.acegisecurity.ui.rememberme", "RememberMeServices", "autoLogin", "(HttpServletRequest,HttpServletResponse)", "summary", "df-generated"] + - ["org.acegisecurity.ui.rememberme", "RememberMeServices", "loginFail", "(HttpServletRequest,HttpServletResponse)", "summary", "df-generated"] + - ["org.acegisecurity.ui.rememberme", "RememberMeServices", "loginSuccess", "(HttpServletRequest,HttpServletResponse,Authentication)", "summary", "df-generated"] + - ["org.acegisecurity.ui", "WebAuthenticationDetails", "WebAuthenticationDetails", "(HttpServletRequest)", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "getAuthorities", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "getPassword", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "getUsername", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "isAccountNonExpired", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "isAccountNonLocked", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "isCredentialsNonExpired", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetails", "isEnabled", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetailsService", "fromSpring", "(UserDetailsService)", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UserDetailsService", "toSpring", "()", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UsernameNotFoundException", "UsernameNotFoundException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UsernameNotFoundException", "UsernameNotFoundException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity.userdetails", "UsernameNotFoundException", "fromSpring", "(UsernameNotFoundException)", "summary", "df-generated"] + - ["org.acegisecurity.util", "FieldUtils", "getProtectedFieldValue", "(String,Object)", "summary", "df-generated"] + - ["org.acegisecurity.util", "FieldUtils", "setProtectedFieldValue", "(String,Object,Object)", "summary", "df-generated"] + - ["org.acegisecurity", "AccessDeniedException", "AccessDeniedException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "AccessDeniedException", "AccessDeniedException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "AccountExpiredException", "AccountExpiredException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "AccountExpiredException", "AccountExpiredException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "AccountExpiredException", "fromSpring", "(AccountExpiredException)", "summary", "df-generated"] + - ["org.acegisecurity", "AcegiSecurityException", "toSpring", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "getAuthorities", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "getCredentials", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "getDetails", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "getPrincipal", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "isAuthenticated", "()", "summary", "df-generated"] + - ["org.acegisecurity", "Authentication", "setAuthenticated", "(boolean)", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationException", "clearExtraInformation", "()", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationManager", "fromSpring", "(AuthenticationManager)", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationManager", "toSpring", "()", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationServiceException", "AuthenticationServiceException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationServiceException", "AuthenticationServiceException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "AuthenticationServiceException", "fromSpring", "(AuthenticationServiceException)", "summary", "df-generated"] + - ["org.acegisecurity", "BadCredentialsException", "BadCredentialsException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "BadCredentialsException", "BadCredentialsException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "BadCredentialsException", "fromSpring", "(AuthenticationException)", "summary", "df-generated"] + - ["org.acegisecurity", "CredentialsExpiredException", "CredentialsExpiredException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "CredentialsExpiredException", "CredentialsExpiredException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "CredentialsExpiredException", "fromSpring", "(CredentialsExpiredException)", "summary", "df-generated"] + - ["org.acegisecurity", "DisabledException", "DisabledException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "DisabledException", "DisabledException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "DisabledException", "fromSpring", "(DisabledException)", "summary", "df-generated"] + - ["org.acegisecurity", "GrantedAuthority", "fromSpring", "(Collection)", "summary", "df-generated"] + - ["org.acegisecurity", "GrantedAuthority", "fromSpring", "(GrantedAuthority)", "summary", "df-generated"] + - ["org.acegisecurity", "GrantedAuthority", "toSpring", "()", "summary", "df-generated"] + - ["org.acegisecurity", "GrantedAuthority", "toSpring", "(GrantedAuthority[])", "summary", "df-generated"] + - ["org.acegisecurity", "InsufficientAuthenticationException", "InsufficientAuthenticationException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "InsufficientAuthenticationException", "InsufficientAuthenticationException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "InsufficientAuthenticationException", "fromSpring", "(InsufficientAuthenticationException)", "summary", "df-generated"] + - ["org.acegisecurity", "LockedException", "LockedException", "(String)", "summary", "df-generated"] + - ["org.acegisecurity", "LockedException", "LockedException", "(String,Throwable)", "summary", "df-generated"] + - ["org.acegisecurity", "LockedException", "fromSpring", "(LockedException)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", "isBuildStatus", "()", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "BuildStatusIcon", "isInProgress", "()", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "Icon", "isSvgSprite", "()", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "getSymbol", "(String,String,String,String,String,String,String)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "initPageVariables", "(JellyContext)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "toNormalizedIconNameClass", "(Object)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "toNormalizedIconSizeClass", "(Object)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "toNormalizedIconUrl", "(Object)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "tryTranslateTangoIconToSymbol", "(String)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSet", "tryTranslateTangoIconToSymbol", "(String,Supplier)", "summary", "df-generated"] + - ["org.jenkins.ui.icon", "IconSpec", "getIconClassName", "()", "summary", "df-generated"] + - ["org.jenkins.ui.symbol", "Symbol", "get", "(SymbolRequest)", "summary", "df-generated"] + - ["org.springframework.dao", "DataAccessException", "DataAccessException", "(String)", "summary", "df-generated"] + - ["org.springframework.dao", "DataAccessException", "DataAccessException", "(String,Throwable)", "summary", "df-generated"] + - ["org.springframework.dao", "DataAccessException", "toSpring", "()", "summary", "df-generated"] + - ["org.springframework.dao", "DataAccessResourceFailureException", "DataAccessResourceFailureException", "(String)", "summary", "df-generated"] + - ["org.springframework.dao", "DataAccessResourceFailureException", "DataAccessResourceFailureException", "(String,Throwable)", "summary", "df-generated"] + - ["org.springframework.dao", "DataRetrievalFailureException", "DataRetrievalFailureException", "(String)", "summary", "df-generated"] + - ["org.springframework.dao", "DataRetrievalFailureException", "DataRetrievalFailureException", "(String,Throwable)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/org.apache.commons.lang.model.yml b/java/ql/lib/ext/generated/org.apache.commons.lang.model.yml new file mode 100644 index 00000000000..56f9c251388 --- /dev/null +++ b/java/ql/lib/ext/generated/org.apache.commons.lang.model.yml @@ -0,0 +1,1695 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +# Definitions of models for the org.apache.commons.lang framework. + +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(Object,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(Object,Object,Comparator)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(Object[],Object[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(Object[],Object[],Comparator)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(boolean,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(boolean[],boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(byte,byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(byte[],byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(char,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(char[],char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(double,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(double[],double[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(float,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(float[],float[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(int[],int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(long,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(long[],long[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(short,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "append", "(short[],short[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", true, "appendSuper", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(Object,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(Object[],Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(boolean,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(boolean[],boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(byte,byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(byte[],byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(char,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(char[],char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(double,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(double[],double[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(float,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(float[],float[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(int[],int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(long,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(long[],long[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(short,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "append", "(short[],short[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", true, "appendSuper", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(double[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(float[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(long[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "append", "(short[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", true, "appendSuper", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "ReflectionToStringBuilder", "(Object,ToStringStyle,StringBuffer,Class,boolean,boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "getExcludeFieldNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "reflectionAppendArray", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "setExcludeFieldNames", "(String[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "ToStringBuilder", "(Object,ToStringStyle,StringBuffer)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(Object[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object,boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[],boolean)", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,Object[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,boolean[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,byte[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,char[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,double[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,float[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,int[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,long[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short[],boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(String,short[],boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(boolean[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(byte)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(double)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(double[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(float)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(float[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(int[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(long)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(long[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(short)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "append", "(short[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "appendAsObjectToString", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "appendSuper", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "appendSuper", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "appendToString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "appendToString", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "getStringBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "getStyle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object,Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object,Boolean)", "", "Argument[2]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object,Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object[],Boolean)", "", "Argument[2].ArrayElement", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,Object[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,boolean[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,boolean[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,byte)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,byte)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,byte[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,byte[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,char)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,char)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,char[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,char[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,double)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,double)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,double[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,double[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,float)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,float)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,float[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,float[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,int)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,int)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,int[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,int[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,long)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,long)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,long[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,long[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,short)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,short)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,short[],Boolean)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "append", "(StringBuffer,String,short[],Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendEnd", "(StringBuffer,Object)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendStart", "(StringBuffer,Object)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendSuper", "(StringBuffer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendSuper", "(StringBuffer,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendToString", "(StringBuffer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "appendToString", "(StringBuffer,String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getArrayEnd", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getArraySeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getArrayStart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getContentEnd", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getContentStart", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getFieldNameValueSeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getFieldSeparator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getNullText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getSizeEndText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getSizeStartText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getSummaryObjectEndText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "getSummaryObjectStartText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setArrayEnd", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setArraySeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setArrayStart", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setContentEnd", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setContentStart", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setFieldNameValueSeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setFieldSeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setNullText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setSizeEndText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setSizeStartText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setSummaryObjectEndText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", true, "setSummaryObjectStartText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.enums", "Enum", true, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.enums", "Enum", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.enums", "ValuedEnum", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getCause", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getCause", "(Throwable,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getMessage", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getRootCause", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getRootCauseMessage", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getRootCauseStackTrace", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getThrowableList", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", true, "getThrowables", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", true, "getCause", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", true, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", true, "getMessage", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", true, "getThrowable", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", true, "getThrowables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "NestableDelegate", "(Nestable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "getMessage", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "getMessage", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "getMessages", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "getThrowable", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", true, "getThrowables", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableError", true, "NestableError", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableError", true, "NestableError", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableException", true, "NestableException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableException", true, "NestableException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableException", true, "NestableException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableException", true, "NestableException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableRuntimeException", true, "NestableRuntimeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableRuntimeException", true, "NestableRuntimeException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableRuntimeException", true, "NestableRuntimeException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableRuntimeException", true, "NestableRuntimeException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.math", "DoubleRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.math", "FloatRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", false, "abs", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", false, "pow", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", false, "reduce", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.math", "NumberRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.mutable", "Mutable", true, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.mutable", "Mutable", true, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableObject", true, "MutableObject", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", true, "getAccessibleConstructor", "(Constructor)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", true, "getAccessibleMethod", "(Method)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "CompositeFormat", true, "CompositeFormat", "(Format,Format)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "CompositeFormat", true, "CompositeFormat", "(Format,Format)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "CompositeFormat", true, "getFormatter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "CompositeFormat", true, "getParser", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String,Locale)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String,Locale,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String,Locale,Map)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String,Map)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "ExtendedMessageFormat", true, "ExtendedMessageFormat", "(String,Map)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "StrBuilder", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StrBuilder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StrBuilder)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StrBuilder,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StrBuilder,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(String,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(String,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StringBuffer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StringBuffer)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StringBuffer,int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(StringBuffer,int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(char[],int,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(float)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "append", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendAll", "(Collection)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendAll", "(Iterator)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendAll", "(Object[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendFixedWidthPadLeft", "(Object,int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendFixedWidthPadLeft", "(int,int,char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendFixedWidthPadRight", "(Object,int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendFixedWidthPadRight", "(int,int,char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendNewLine", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendNull", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendPadding", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(String,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendSeparator", "(char,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Collection,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Collection,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Iterator,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Iterator,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Object[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendWithSeparators", "(Object[],String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(float)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "appendln", "(long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "clear", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "delete", "(int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteAll", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteAll", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteAll", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteCharAt", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteFirst", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteFirst", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "deleteFirst", "(char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "ensureCapacity", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getChars", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getChars", "(char[])", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getChars", "(char[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getChars", "(int,int,char[],int)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getNewLineText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "getNullText", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,char[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,char[],int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,char[],int,int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,double)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,float)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "insert", "(int,long)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "leftString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "midString", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "minimizeCapacity", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replace", "(StrMatcher,String,int,int,int)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replace", "(StrMatcher,String,int,int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replace", "(StrMatcher,String,int,int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replace", "(int,int,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replace", "(int,int,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(StrMatcher,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(StrMatcher,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(StrMatcher,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceAll", "(char,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(StrMatcher,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(StrMatcher,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(StrMatcher,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(String,String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "replaceFirst", "(char,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "reverse", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "rightString", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setCharAt", "(int,char)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setLength", "(int)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setNewLineText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setNewLineText", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setNullText", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "setNullText", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "substring", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "substring", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "toCharArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "toCharArray", "(int,int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "toStringBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", true, "trim", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrLookup", true, "mapLookup", "(Map)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", true, "charSetMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", true, "charSetMatcher", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", true, "stringMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String,char)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String,char)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(Map,String,String,char)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,StrMatcher,StrMatcher,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,StrMatcher,StrMatcher,char)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,StrMatcher,StrMatcher,char)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,String,String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,String,String,char)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "StrSubstitutor", "(StrLookup,String,String,char)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "getVariablePrefixMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "getVariableResolver", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "getVariableSuffixMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(StrBuilder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(StrBuilder,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(StringBuffer)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(StringBuffer,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "replace", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefix", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefixMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariablePrefixMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableResolver", "(StrLookup)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffix", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffix", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffix", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffixMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", true, "setVariableSuffixMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,StrMatcher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,StrMatcher,StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,StrMatcher,StrMatcher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,StrMatcher,StrMatcher)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(String,char,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],StrMatcher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],StrMatcher,StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],StrMatcher,StrMatcher)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],StrMatcher,StrMatcher)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "StrTokenizer", "(char[],char,char)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getCSVInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getCSVInstance", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getContent", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getDelimiterMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getIgnoredMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getQuoteMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getTSVInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getTSVInstance", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getTokenArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getTokenList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "getTrimmerMatcher", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "nextToken", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "previousToken", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "reset", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "reset", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "reset", "(String)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "reset", "(char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "reset", "(char[])", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterChar", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterString", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setDelimiterString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setEmptyTokenAsNull", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setIgnoreEmptyTokens", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setIgnoredChar", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setIgnoredMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setIgnoredMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setQuoteChar", "(char)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setQuoteMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setQuoteMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setTrimmerMatcher", "(StrMatcher)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "setTrimmerMatcher", "(StrMatcher)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", true, "iterator", "(Calendar,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", true, "iterator", "(Object,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", true, "round", "(Calendar,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", true, "truncate", "(Calendar,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "format", "(Calendar,StringBuffer)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "format", "(Date,StringBuffer)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "format", "(long,StringBuffer)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateInstance", "(int,TimeZone)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateInstance", "(int,TimeZone,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateInstance", "(int,TimeZone,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateTimeInstance", "(int,int,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateTimeInstance", "(int,int,TimeZone)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateTimeInstance", "(int,int,TimeZone,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getDateTimeInstance", "(int,int,TimeZone,Locale)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,TimeZone)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,TimeZone)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,TimeZone,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,TimeZone,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getInstance", "(String,TimeZone,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getLocale", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getPattern", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getTimeInstance", "(int,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getTimeInstance", "(int,TimeZone)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getTimeInstance", "(int,TimeZone,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getTimeInstance", "(int,TimeZone,Locale)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "getTimeZone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(Object[],Object)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(Object[],Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(Object[],int,Object)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(byte[],byte)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(byte[],int,byte)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(char[],char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "add", "(char[],int,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(Object[],Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(Object[],Object[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(byte[],byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(byte[],byte[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(char[],char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "addAll", "(char[],char[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "clone", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "clone", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "clone", "(char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "remove", "(Object[],int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "remove", "(byte[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "remove", "(char[],int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "removeElement", "(Object[],Object)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "removeElement", "(byte[],byte)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "removeElement", "(char[],char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "subarray", "(Object[],int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "subarray", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "subarray", "(char[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "toMap", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "toString", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "toString", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", true, "toString", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", true, "toString", "(Boolean,String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", true, "toString", "(Boolean,String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", true, "toString", "(Boolean,String,String,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", true, "toString", "(boolean,String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", true, "toString", "(boolean,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharRange", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSet", true, "getCharRanges", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", true, "delete", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", true, "delete", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", true, "squeeze", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", true, "squeeze", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", true, "translate", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getPackageCanonicalName", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getPackageCanonicalName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getPackageName", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getPackageName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getShortCanonicalName", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getShortCanonicalName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getShortClassName", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "getShortClassName", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "primitivesToWrappers", "(Class[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", true, "wrappersToPrimitives", "(Class[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "IllegalClassException", true, "IllegalClassException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "IncompleteArgumentException", true, "IncompleteArgumentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "IncompleteArgumentException", true, "IncompleteArgumentException", "(String,String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", true, "localeLookupList", "(Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", true, "localeLookupList", "(Locale,Locale)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", true, "localeLookupList", "(Locale,Locale)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "NotImplementedException", true, "NotImplementedException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "NotImplementedException", true, "NotImplementedException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "NotImplementedException", true, "NotImplementedException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "NotImplementedException", true, "NotImplementedException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "NullArgumentException", true, "NullArgumentException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "appendIdentityToString", "(StringBuffer,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "defaultIfNull", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "defaultIfNull", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "max", "(Comparable,Comparable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "max", "(Comparable,Comparable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "min", "(Comparable,Comparable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "min", "(Comparable,Comparable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", true, "toString", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationException", true, "SerializationException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationException", true, "SerializationException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationException", true, "SerializationException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationException", true, "SerializationException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationUtils", true, "deserialize", "(InputStream)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "SerializationUtils", true, "deserialize", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "escapeSql", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeCsv", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeCsv", "(Writer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeHtml", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeHtml", "(Writer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeXml", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", true, "unescapeXml", "(Writer,String)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "abbreviate", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "abbreviate", "(String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "capitalise", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "capitaliseAllWords", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "capitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "center", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "center", "(String,int,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "center", "(String,int,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "center", "(String,int,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chomp", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chomp", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chompLast", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chompLast", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chop", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "chopNewline", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "clean", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "concatenate", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "defaultIfEmpty", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "defaultIfEmpty", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "defaultString", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "defaultString", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "defaultString", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "deleteSpaces", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "deleteWhitespace", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "difference", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "difference", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getChomp", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getChomp", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getCommonPrefix", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getNestedString", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getNestedString", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "getPrechomp", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Collection,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Collection,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Collection,char)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Iterator,String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Iterator,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Iterator,char)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],String)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],String,int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],String,int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],char)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "join", "(Object[],char,int,int)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "left", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "leftPad", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "leftPad", "(String,int,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "leftPad", "(String,int,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "leftPad", "(String,int,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "lowerCase", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "mid", "(String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "overlay", "(String,String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "overlay", "(String,String,int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "overlayString", "(String,String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "overlayString", "(String,String,int,int)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "prechomp", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "remove", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "remove", "(String,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "removeEnd", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "removeEndIgnoreCase", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "removeStart", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "removeStartIgnoreCase", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "repeat", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replace", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replace", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replace", "(String,String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replace", "(String,String,String,int)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceChars", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceChars", "(String,char,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceEach", "(String,String[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceEach", "(String,String[],String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceEachRepeatedly", "(String,String[],String[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceEachRepeatedly", "(String,String[],String[])", "", "Argument[2].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceOnce", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "replaceOnce", "(String,String,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "reverse", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "reverseDelimited", "(String,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "reverseDelimitedString", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "reverseDelimitedString", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "right", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "rightPad", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "rightPad", "(String,int,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "rightPad", "(String,int,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "rightPad", "(String,int,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "split", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "split", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "split", "(String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "split", "(String,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByCharacterType", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByCharacterTypeCamelCase", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByWholeSeparator", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByWholeSeparator", "(String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByWholeSeparatorPreserveAllTokens", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitByWholeSeparatorPreserveAllTokens", "(String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitPreserveAllTokens", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitPreserveAllTokens", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitPreserveAllTokens", "(String,String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "splitPreserveAllTokens", "(String,char)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "strip", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "strip", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripAll", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripAll", "(String[],String)", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripEnd", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripStart", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripToEmpty", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "stripToNull", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substring", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substring", "(String,int,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringAfter", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringAfterLast", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringBefore", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringBeforeLast", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringBetween", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringBetween", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "substringsBetween", "(String,String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "swapCase", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "trim", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "trimToEmpty", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "trimToNull", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "uncapitalise", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "uncapitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", true, "upperCase", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "UnhandledException", true, "UnhandledException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "UnhandledException", true, "UnhandledException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "UnhandledException", true, "UnhandledException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "abbreviate", "(String,int,int,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "abbreviate", "(String,int,int,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "capitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "capitalize", "(String,char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "capitalizeFully", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "capitalizeFully", "(String,char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "initials", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "initials", "(String,char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "swapCase", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "uncapitalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "uncapitalize", "(String,char[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "wrap", "(String,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "wrap", "(String,int,String,boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.apache.commons.lang", "WordUtils", true, "wrap", "(String,int,String,boolean)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + + + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object,Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "reflectionCompare", "(Object,Object,boolean,Class,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "CompareToBuilder", "toComparison", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "isEquals", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object,Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "EqualsBuilder", "reflectionEquals", "(Object,Object,boolean,Class,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "HashCodeBuilder", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(Object,Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(Object,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(int,int,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(int,int,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(int,int,Object,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "reflectionHashCode", "(int,int,Object,boolean,Class,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "HashCodeBuilder", "toHashCode", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "getUpToClass", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "isAppendStatics", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "isAppendTransients", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "setAppendStatics", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "setAppendTransients", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "setUpToClass", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object,ToStringStyle)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object,ToStringStyle,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object,ToStringStyle,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object,ToStringStyle,boolean,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toString", "(Object,ToStringStyle,boolean,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toStringExclude", "(Object,Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toStringExclude", "(Object,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ReflectionToStringBuilder", "toStringExclude", "(Object,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "getDefaultStyle", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "reflectionToString", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "reflectionToString", "(Object,ToStringStyle)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "reflectionToString", "(Object,ToStringStyle,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "reflectionToString", "(Object,ToStringStyle,boolean,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringBuilder", "setDefaultStyle", "(ToStringStyle)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isArrayContentDetail", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isDefaultFullDetail", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isFieldSeparatorAtEnd", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isFieldSeparatorAtStart", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isShortClassName", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isUseClassName", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isUseFieldNames", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isUseIdentityHashCode", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "isUseShortClassName", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setArrayContentDetail", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setDefaultFullDetail", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setFieldSeparatorAtEnd", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setFieldSeparatorAtStart", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setShortClassName", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setUseClassName", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setUseFieldNames", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setUseIdentityHashCode", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.builder", "ToStringStyle", "setUseShortClassName", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "Enum", "getEnumClass", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "EnumUtils", "getEnum", "(Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "EnumUtils", "getEnum", "(Class,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "EnumUtils", "getEnumList", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "EnumUtils", "getEnumMap", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "EnumUtils", "iterator", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.enums", "ValuedEnum", "getValue", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "addCauseMethodName", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "getFullStackTrace", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "getStackFrames", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "getStackTrace", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "getThrowableCount", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "indexOfThrowable", "(Throwable,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "indexOfThrowable", "(Throwable,Class,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "indexOfType", "(Throwable,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "indexOfType", "(Throwable,Class,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "isCauseMethodName", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "isNestedThrowable", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "isThrowableNested", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "printRootCauseStackTrace", "(Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "printRootCauseStackTrace", "(Throwable,PrintStream)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "printRootCauseStackTrace", "(Throwable,PrintWriter)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "removeCauseMethodName", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "removeCommonFrames", "(List,List)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "ExceptionUtils", "setCause", "(Throwable,Throwable)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "getMessages", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "getThrowableCount", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "indexOfThrowable", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "indexOfThrowable", "(Class,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "printPartialStackTrace", "(PrintWriter)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "printStackTrace", "(PrintStream)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "Nestable", "printStackTrace", "(PrintWriter)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", "getThrowableCount", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", "indexOfThrowable", "(Class,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", "printStackTrace", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", "printStackTrace", "(PrintStream)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableDelegate", "printStackTrace", "(PrintWriter)", "summary", "df-generated"] + - ["org.apache.commons.lang.exception", "NestableError", "NestableError", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "DoubleRange", "DoubleRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "DoubleRange", "DoubleRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "DoubleRange", "DoubleRange", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "DoubleRange", "DoubleRange", "(double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "FloatRange", "FloatRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "FloatRange", "FloatRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "FloatRange", "FloatRange", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "FloatRange", "FloatRange", "(float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "add", "(Fraction)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "divideBy", "(Fraction)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getDenominator", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getFraction", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getFraction", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getFraction", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getFraction", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getNumerator", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getProperNumerator", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getProperWhole", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "getReducedFraction", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "invert", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "multiplyBy", "(Fraction)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "negate", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "subtract", "(Fraction)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "toProperString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Fraction", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(double,double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(float,float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "max", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(double,double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(float,float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IEEE754rUtils", "min", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", "IntRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", "IntRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", "IntRange", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", "IntRange", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "IntRange", "toArray", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "JVMRandom", "nextLong", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", "LongRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", "LongRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", "LongRange", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", "LongRange", "(long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "LongRange", "toArray", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberRange", "NumberRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberRange", "NumberRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "compare", "(double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "compare", "(float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createBigDecimal", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createBigInteger", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createDouble", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createFloat", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createInteger", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createLong", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "createNumber", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "isDigits", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "isNumber", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(byte,byte,byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(double,double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(float,float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(long,long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(short,short,short)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "max", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(byte,byte,byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(double,double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(float,float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(long,long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(short,short,short)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "min", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "stringToInt", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "stringToInt", "(String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toDouble", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toDouble", "(String,double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toFloat", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toFloat", "(String,float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toInt", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toInt", "(String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toLong", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "NumberUtils", "toLong", "(String,long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextBoolean", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextBoolean", "(Random)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextDouble", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextDouble", "(Random)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextFloat", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextFloat", "(Random)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextInt", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextInt", "(Random)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextInt", "(Random,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextInt", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextLong", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "RandomUtils", "nextLong", "(Random)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsDouble", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsDouble", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsFloat", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsFloat", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsInteger", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsInteger", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsLong", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsLong", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsNumber", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "containsRange", "(Range)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMaximumDouble", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMaximumFloat", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMaximumInteger", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMaximumLong", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMaximumNumber", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMinimumDouble", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMinimumFloat", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMinimumInteger", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMinimumLong", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "getMinimumNumber", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "overlapsRange", "(Range)", "summary", "df-generated"] + - ["org.apache.commons.lang.math", "Range", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "Mutable", "getValue", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "Mutable", "setValue", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableBoolean", "MutableBoolean", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableBoolean", "MutableBoolean", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableBoolean", "booleanValue", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableBoolean", "setValue", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableBoolean", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "MutableByte", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "MutableByte", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "add", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "setValue", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "subtract", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "toByte", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableByte", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "MutableDouble", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "MutableDouble", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "add", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "isInfinite", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "isNaN", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "setValue", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "subtract", "(double)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "toDouble", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableDouble", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "MutableFloat", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "MutableFloat", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "add", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "isInfinite", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "isNaN", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "setValue", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "subtract", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "toFloat", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableFloat", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "MutableInt", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "MutableInt", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "add", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "setValue", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "subtract", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "toInteger", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableInt", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "MutableLong", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "MutableLong", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "add", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "setValue", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "subtract", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "toLong", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableLong", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableObject", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "MutableShort", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "MutableShort", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "add", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "add", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "decrement", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "increment", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "setValue", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "subtract", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "subtract", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "toShort", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.mutable", "MutableShort", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "getAccessibleConstructor", "(Class,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "getAccessibleConstructor", "(Class,Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "getMatchingAccessibleConstructor", "(Class,Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeConstructor", "(Class,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeConstructor", "(Class,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeConstructor", "(Class,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeExactConstructor", "(Class,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeExactConstructor", "(Class,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "ConstructorUtils", "invokeExactConstructor", "(Class,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "getDeclaredField", "(Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "getDeclaredField", "(Class,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "getField", "(Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "getField", "(Class,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readDeclaredField", "(Object,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readDeclaredField", "(Object,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readDeclaredStaticField", "(Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readDeclaredStaticField", "(Class,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readField", "(Field,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readField", "(Field,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readField", "(Object,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readField", "(Object,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readStaticField", "(Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readStaticField", "(Class,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readStaticField", "(Field)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "readStaticField", "(Field,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeDeclaredField", "(Object,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeDeclaredField", "(Object,String,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeDeclaredStaticField", "(Class,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeDeclaredStaticField", "(Class,String,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeField", "(Field,Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeField", "(Field,Object,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeField", "(Object,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeField", "(Object,String,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeStaticField", "(Class,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeStaticField", "(Class,String,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeStaticField", "(Field,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "FieldUtils", "writeStaticField", "(Field,Object,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "clearCache", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "getAccessibleMethod", "(Class,String,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "getAccessibleMethod", "(Class,String,Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "getMatchingAccessibleMethod", "(Class,String,Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactMethod", "(Object,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactMethod", "(Object,String,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactMethod", "(Object,String,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactStaticMethod", "(Class,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactStaticMethod", "(Class,String,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeExactStaticMethod", "(Class,String,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeMethod", "(Object,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeMethod", "(Object,String,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeMethod", "(Object,String,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeStaticMethod", "(Class,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeStaticMethod", "(Class,String,Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "invokeStaticMethod", "(Class,String,Object[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang.reflect", "MethodUtils", "setCacheMethods", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "CompositeFormat", "reformat", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "StrBuilder", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(StrBuilder)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(StrBuilder,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(String,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(StringBuffer)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(StringBuffer,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(char[])", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "appendln", "(char[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "asReader", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "asTokenizer", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "asWriter", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "capacity", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "charAt", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "contains", "(StrMatcher)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "contains", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "contains", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "endsWith", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "equals", "(StrBuilder)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "equalsIgnoreCase", "(StrBuilder)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(StrMatcher)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(StrMatcher,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "indexOf", "(char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "isEmpty", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(StrMatcher)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(StrMatcher,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "lastIndexOf", "(char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "length", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "size", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrBuilder", "startsWith", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrLookup", "lookup", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrLookup", "noneLookup", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrLookup", "systemPropertiesLookup", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "charMatcher", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "commaMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "doubleQuoteMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "isMatch", "(char[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "isMatch", "(char[],int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "noneMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "quoteMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "singleQuoteMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "spaceMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "splitMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "tabMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrMatcher", "trimMatcher", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "getEscapeChar", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replace", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replace", "(Object,Map)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replace", "(Object,Map,String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replaceIn", "(StrBuilder)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replaceIn", "(StrBuilder,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replaceIn", "(StringBuffer)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replaceIn", "(StringBuffer,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "replaceSystemProperties", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrSubstitutor", "setEscapeChar", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", "getCSVInstance", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", "getTSVInstance", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", "isEmptyTokenAsNull", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", "isIgnoreEmptyTokens", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.text", "StrTokenizer", "size", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Calendar,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Calendar,String,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Calendar,String,TimeZone)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Calendar,String,TimeZone,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Date,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Date,String,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Date,String,TimeZone)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(Date,String,TimeZone,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(long,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(long,String,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(long,String,TimeZone)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "format", "(long,String,TimeZone,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "formatUTC", "(Date,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "formatUTC", "(Date,String,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "formatUTC", "(long,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateFormatUtils", "formatUTC", "(long,String,Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "add", "(Date,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addDays", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addHours", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addMilliseconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addMinutes", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addMonths", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addSeconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addWeeks", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "addYears", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInDays", "(Calendar,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInDays", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInHours", "(Calendar,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInHours", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInMilliseconds", "(Calendar,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInMilliseconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInMinutes", "(Calendar,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInMinutes", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInSeconds", "(Calendar,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "getFragmentInSeconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "isSameDay", "(Calendar,Calendar)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "isSameDay", "(Date,Date)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "isSameInstant", "(Calendar,Calendar)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "isSameInstant", "(Date,Date)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "isSameLocalTime", "(Calendar,Calendar)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "iterator", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "parseDate", "(String,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "round", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "round", "(Object,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setDays", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setHours", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setMilliseconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setMinutes", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setMonths", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setSeconds", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "setYears", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "truncate", "(Date,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DateUtils", "truncate", "(Object,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatDuration", "(long,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatDuration", "(long,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatDurationHMS", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatDurationISO", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatDurationWords", "(long,boolean,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatPeriod", "(long,long,String)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatPeriod", "(long,long,String,boolean,TimeZone)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "DurationFormatUtils", "formatPeriodISO", "(long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "format", "(Calendar)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "format", "(Date)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "format", "(long)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getDateInstance", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getDateTimeInstance", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getInstance", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getMaxLengthEstimate", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getTimeInstance", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "FastDateFormat", "getTimeZoneOverridesCalendar", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "getSplitTime", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "getStartTime", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "getTime", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "reset", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "resume", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "split", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "start", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "stop", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "suspend", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "toSplitString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang.time", "StopWatch", "unsplit", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(boolean[],int,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(double[],int,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(float[],int,float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(int[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(long[],int,long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(short[],int,short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "add", "(short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(boolean[],boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(double[],double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(float[],float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(int[],int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(long[],long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "addAll", "(short[],short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "clone", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(Object[],Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(byte[],byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(char[],char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(double[],double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "contains", "(short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "getLength", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "hashCode", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(Object[],Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(Object[],Object,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(boolean[],boolean,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(byte[],byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(byte[],byte,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(char[],char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(char[],char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(double[],double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(double[],double,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(double[],double,int,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(float[],float,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(int[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(long[],long,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "indexOf", "(short[],short,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEmpty", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isEquals", "(Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(Object[],Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(boolean[],boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(byte[],byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(char[],char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(double[],double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(float[],float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(int[],int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(long[],long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameLength", "(short[],short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "isSameType", "(Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(Object[],Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(Object[],Object,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(boolean[],boolean,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(byte[],byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(byte[],byte,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(char[],char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(char[],char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(double[],double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(double[],double,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(double[],double,int,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(float[],float,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(int[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(long[],long,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "lastIndexOf", "(short[],short,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(boolean[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(double[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(float[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(long[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "remove", "(short[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(int[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "removeElement", "(short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "reverse", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(boolean[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(double[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(float[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(int[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(long[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "subarray", "(short[],int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(int[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toObject", "(short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Boolean[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Byte[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Byte[],byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Character[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Character[],char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Double[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Double[],double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Float[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Float[],float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Integer[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Integer[],int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Long[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Long[],long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Short[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ArrayUtils", "toPrimitive", "(Short[],short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "BitField", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "clear", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "clearByte", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "clearShort", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "getRawValue", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "getShortRawValue", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "getShortValue", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "getValue", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "isAllSet", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "isSet", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "set", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setBoolean", "(int,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setByte", "(byte)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setByteBoolean", "(byte,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setShort", "(short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setShortBoolean", "(short,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setShortValue", "(short,short)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BitField", "setValue", "(int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "isFalse", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "isNotFalse", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "isNotTrue", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "isTrue", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "negate", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(Integer,Integer,Integer)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(String,String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBoolean", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanDefaultIfNull", "(Boolean,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(Integer)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(Integer,Integer,Integer,Integer)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(String,String,String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toBooleanObject", "(int,int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toInteger", "(Boolean,int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toInteger", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toInteger", "(boolean,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toIntegerObject", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toIntegerObject", "(Boolean,Integer,Integer,Integer)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toIntegerObject", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toIntegerObject", "(boolean,Integer,Integer)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringOnOff", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringOnOff", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringTrueFalse", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringTrueFalse", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringYesNo", "(Boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "toStringYesNo", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "xor", "(Boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "BooleanUtils", "xor", "(boolean[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharEncoding", "isSupported", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "CharRange", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "CharRange", "(char,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "CharRange", "(char,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "CharRange", "(char,char,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "contains", "(CharRange)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "contains", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "getEnd", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "getStart", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharRange", "isNegated", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSet", "contains", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSet", "getInstance", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSet", "getInstance", "(String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSet", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", "count", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", "count", "(String,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", "evaluateSet", "(String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", "keep", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharSetUtils", "keep", "(String,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAscii", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiAlpha", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiAlphaLower", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiAlphaUpper", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiAlphanumeric", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiControl", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiNumeric", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "isAsciiPrintable", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toChar", "(Character)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toChar", "(Character,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toChar", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toChar", "(String,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toCharacterObject", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toCharacterObject", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toIntValue", "(Character)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toIntValue", "(Character,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toIntValue", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toIntValue", "(char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toString", "(Character)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "toString", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "unicodeEscaped", "(Character)", "summary", "df-generated"] + - ["org.apache.commons.lang", "CharUtils", "unicodeEscaped", "(char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "convertClassNamesToClasses", "(List)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "convertClassesToClassNames", "(List)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getAllInterfaces", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getAllSuperclasses", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getClass", "(ClassLoader,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getClass", "(ClassLoader,String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getClass", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getClass", "(String,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getPackageCanonicalName", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getPackageName", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getPublicMethod", "(Class,String,Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getShortCanonicalName", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "getShortClassName", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "isAssignable", "(Class,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "isAssignable", "(Class,Class,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "isAssignable", "(Class[],Class[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "isAssignable", "(Class[],Class[],boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "isInnerClass", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "primitiveToWrapper", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "toClass", "(Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "ClassUtils", "wrapperToPrimitive", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "IllegalClassException", "IllegalClassException", "(Class,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "IllegalClassException", "IllegalClassException", "(Class,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "availableLocaleList", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "availableLocaleSet", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "countriesByLanguage", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "isAvailableLocale", "(Locale)", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "languagesByCountry", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "LocaleUtils", "toLocale", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NotImplementedException", "NotImplementedException", "(Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "NumberRange", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "NumberRange", "(Number,Number)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "getMaximum", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "getMinimum", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "includesNumber", "(Number)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "includesRange", "(NumberRange)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "overlaps", "(NumberRange)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberRange", "toString", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "compare", "(double,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "compare", "(float,float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createBigDecimal", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createBigInteger", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createDouble", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createFloat", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createInteger", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createLong", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "createNumber", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "isDigits", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "isNumber", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "maximum", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "maximum", "(long,long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "minimum", "(int,int,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "minimum", "(long,long,long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "stringToInt", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "NumberUtils", "stringToInt", "(String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", "equals", "(Object,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", "hashCode", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", "identityToString", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", "identityToString", "(StringBuffer,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "ObjectUtils", "toString", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,boolean,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,int,int,boolean,boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,int,int,boolean,boolean,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "random", "(int,int,int,boolean,boolean,char[],Random)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "randomAlphabetic", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "randomAlphanumeric", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "randomAscii", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "RandomStringUtils", "randomNumeric", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "SerializationUtils", "clone", "(Serializable)", "summary", "df-generated"] + - ["org.apache.commons.lang", "SerializationUtils", "serialize", "(Serializable)", "summary", "df-generated"] + - ["org.apache.commons.lang", "SerializationUtils", "serialize", "(Serializable,OutputStream)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeCsv", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeCsv", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeHtml", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeHtml", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeJava", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeJava", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeJavaScript", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeJavaScript", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeXml", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "escapeXml", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "unescapeJava", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "unescapeJava", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "unescapeJavaScript", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringEscapeUtils", "unescapeJavaScript", "(Writer,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "contains", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "contains", "(String,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsAny", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsAny", "(String,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsIgnoreCase", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsNone", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsNone", "(String,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsOnly", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "containsOnly", "(String,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "countMatches", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "endsWith", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "endsWithIgnoreCase", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "equals", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "equalsIgnoreCase", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "escape", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "getLevenshteinDistance", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOf", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOf", "(String,String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOf", "(String,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOf", "(String,char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfAny", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfAny", "(String,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfAny", "(String,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfAnyBut", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfAnyBut", "(String,char[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfDifference", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "indexOfDifference", "(String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isAlpha", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isAlphaSpace", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isAlphanumeric", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isAlphanumericSpace", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isAsciiPrintable", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isBlank", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isEmpty", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isNotBlank", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isNotEmpty", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isNumeric", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isNumericSpace", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "isWhitespace", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "lastIndexOf", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "lastIndexOf", "(String,String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "lastIndexOf", "(String,char)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "lastIndexOf", "(String,char,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "lastIndexOfAny", "(String,String[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "length", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "ordinalIndexOf", "(String,String,int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "startsWith", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "StringUtils", "startsWithIgnoreCase", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "getJavaHome", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "getJavaIoTmpDir", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "getJavaVersion", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "getUserDir", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "getUserHome", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "isJavaAwtHeadless", "()", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "isJavaVersionAtLeast", "(float)", "summary", "df-generated"] + - ["org.apache.commons.lang", "SystemUtils", "isJavaVersionAtLeast", "(int)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "allElementsOfType", "(Collection,Class)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "allElementsOfType", "(Collection,Class,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "isTrue", "(boolean)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "isTrue", "(boolean,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "isTrue", "(boolean,String,Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "isTrue", "(boolean,String,double)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "isTrue", "(boolean,String,long)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "noNullElements", "(Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "noNullElements", "(Collection,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "noNullElements", "(Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "noNullElements", "(Object[],String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Collection)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Collection,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Map)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Map,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Object[])", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(Object[],String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notEmpty", "(String,String)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notNull", "(Object)", "summary", "df-generated"] + - ["org.apache.commons.lang", "Validate", "notNull", "(Object,String)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/generated/stapler.model.yml b/java/ql/lib/ext/generated/stapler.model.yml new file mode 100644 index 00000000000..a82d01328d6 --- /dev/null +++ b/java/ql/lib/ext/generated/stapler.model.yml @@ -0,0 +1,679 @@ +# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. +# Definitions of models for the Stapler framework. +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["org.kohsuke.stapler.bind", "Bound", true, "getProxyScript", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.bind", "Bound", true, "getTarget", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.bind", "Bound", true, "getURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable$Table", true, "getDynamic", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable", true, "bind", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.compression", "FilterServletOutputStream", true, "FilterServletOutputStream", "(OutputStream,ServletOutputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.compression", "FilterServletOutputStream", true, "FilterServletOutputStream", "(OutputStream,ServletOutputStream)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ClassAttributeBehaviour", true, "simple", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ClassAttributeBehaviour", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", true, "getExportConfig", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", true, "name", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", true, "value", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "getClassAttribute", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "getExportInterceptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withClassAttribute", "(ClassAttributeBehaviour)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withClassAttribute", "(ClassAttributeBehaviour)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withExportInterceptor", "(ExportInterceptor)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withExportInterceptor", "(ExportInterceptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withFlavor", "(Flavor)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withPrettyPrint", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", true, "withSkipIfFail", "(boolean)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "Flavor", true, "createDataWriter", "(Object,StaplerResponse)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Flavor", true, "createDataWriter", "(Object,Writer)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Flavor", true, "createDataWriter", "(Object,Writer,ExportConfig)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Flavor", true, "createDataWriter", "(Object,Writer,ExportConfig)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Model", true, "getProperties", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Model", true, "writeTo", "(Object,DataWriter)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Model", true, "writeTo", "(Object,TreePruner,DataWriter)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Model", true, "writeTo", "(Object,int,DataWriter)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ModelBuilder", true, "get", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ModelBuilder", true, "get", "(Class,Class,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "ModelBuilder", true, "getOrNull", "(Class,Class,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", true, "NotExportableException", "(Class,Class,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", true, "NotExportableException", "(String,Class)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", true, "getJavadoc", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", true, "writeTo", "(Object,TreePruner,DataWriter)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", true, "writeTo", "(Object,int,DataWriter)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Range", true, "apply", "(Collection)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Range", true, "apply", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Range", true, "apply", "(List)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "Range", true, "apply", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "SchemaGenerator", true, "SchemaGenerator", "(Model)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner", true, "accept", "(Object,Property)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner", true, "accept", "(Object,Property)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner", true, "getRange", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "TypeUtil", true, "getBaseClass", "(Type,Class)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.export", "TypeUtil", true, "getTypeArgument", "(Type,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "Adjunct", true, "Adjunct", "(AdjunctManager,String,ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "Adjunct", true, "Adjunct", "(AdjunctManager,String,ClassLoader)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "Adjunct", true, "getPackageUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String,long)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String,long)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "AdjunctManager", "(ServletContext,ClassLoader,String,long)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "doDynamic", "(StaplerRequest,StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "get", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "get", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", true, "get", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "assumeIncluded", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "assumeIncluded", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "generate", "(XMLOutput,String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "get", "(StaplerRequest)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "getIncluded", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", true, "spool", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "NoSuchAdjunctException", true, "NoSuchAdjunctException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "NoSuchAdjunctException", true, "NoSuchAdjunctException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.errors", "ErrorObject", true, "getMessage", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.errors", "NoHomeDirError", true, "NoHomeDirError", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "AtomicFileWriter", true, "AtomicFileWriter", "(File)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "AtomicFileWriter", true, "getTemporaryFile", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "ByteBuffer", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "ByteBuffer", true, "writeTo", "(OutputStream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "CharSpool", false, "writeTo", "(Writer)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "IOException2", true, "IOException2", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "IOException2", true, "IOException2", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "WriterOutputStream", true, "WriterOutputStream", "(Writer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "WriterOutputStream", true, "WriterOutputStream", "(Writer,Charset)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.framework", "AbstractWebAppMain", true, "getInitializer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "Interceptor", true, "setTarget", "(Function)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "JsonOutputFilter$FilterPropertyFilter", true, "FilterPropertyFilter", "(Set,Set)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "JsonOutputFilter$FilterPropertyFilter", true, "FilterPropertyFilter", "(Set,Set)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "JsonOutputFilter$FilterPropertyFilter", true, "FilterPropertyFilter", "(String[],String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "JsonOutputFilter$FilterPropertyFilter", true, "FilterPropertyFilter", "(String[],String[])", "", "Argument[1].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovierJellyScript", true, "GroovierJellyScript", "(Class,URL)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassLoaderTearOff", true, "GroovyClassLoaderTearOff", "(MetaClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassLoaderTearOff", true, "parse", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassLoaderTearOff", true, "parseGSP", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassTearOff", false, "GroovyClassTearOff", "(MetaClass)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassTearOff", false, "createDispatcher", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClassTearOff", false, "createDispatcher", "(Object,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClosureScript", true, "getDelegate", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyClosureScript", true, "setDelegate", "(GroovyObject)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyServerPageScript", true, "getOut", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyServerPageTearOff", true, "GroovyServerPageTearOff", "(MetaClass)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyServerPageTearOff", true, "createDispatcher", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovyServerPageTearOff", true, "createDispatcher", "(Object,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "JellyBuilder", "(JellyContext,XMLOutput)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "JellyBuilder", "(JellyContext,XMLOutput)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getBuilder", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getOutput", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getRequest", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getResponse", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "getRootURL", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "jelly", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "namespace", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "namespace", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "namespace", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "namespace", "(String,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "namespace", "(String,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "res", "(Object,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "res", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "setOutput", "(XMLOutput)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "setOutput", "(XMLOutput)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", false, "with", "(XMLOutput,Closure)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "StaplerClosureScript", true, "gettext", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "StaplerClosureScript", true, "gettext", "(String,Object[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AdjunctTag", true, "setAssumes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AdjunctTag", true, "setIncludes", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "BindTag", true, "setValue", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "BindTag", true, "setVar", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ContentTypeTag", true, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CopyStreamTag", true, "setInputStream", "(InputStream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CopyStreamTag", true, "setReader", "(Reader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CustomTagLibrary", false, "CustomTagLibrary", "(JellyContext,ClassLoader,String,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CustomTagLibrary", false, "CustomTagLibrary", "(JellyContext,ClassLoader,String,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CustomTagLibrary", false, "CustomTagLibrary", "(JellyContext,ClassLoader,String,String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CustomTagLibrary", false, "CustomTagLibrary", "(JellyContext,ClassLoader,String,String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "DoctypeTag", true, "setPublicId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "DoctypeTag", true, "setSystemId", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "FindAncestorTag", true, "setTag", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "FindAncestorTag", true, "setVar", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "HeaderTag", true, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "HeaderTag", true, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", true, "setFrom", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", true, "setIt", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", true, "setPage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "InternationalizedStringExpression$RawHtmlArgument", false, "RawHtmlArgument", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "InternationalizedStringExpression", true, "InternationalizedStringExpression", "(ResourceBundle,String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "InternationalizedStringExpression", true, "InternationalizedStringExpression", "(ResourceBundle,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "InternationalizedStringExpression", true, "getArguments", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IsUserInRoleTag", true, "setRole", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassLoaderTearOff", true, "JellyClassLoaderTearOff", "(MetaClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassTearOff", true, "JellyClassTearOff", "(MetaClass)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassTearOff", true, "createDispatcher", "(Object,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassTearOff", true, "createDispatcher", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassTearOff", true, "createDispatcher", "(Object,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyRequestDispatcher", false, "JellyRequestDispatcher", "(Object,Script)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyRequestDispatcher", false, "JellyRequestDispatcher", "(Object,Script)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "JellyViewScript", "(Class,URL,Script)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "JellyViewScript", "(Class,URL,Script)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "JellyViewScript", "(Klass,URL,Script)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "JellyViewScript", "(Klass,URL,Script)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "JellyViewScript", "(Klass,URL,Script)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyViewScript", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "OutTag", true, "setValue", "(Expression)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "RedirectTag", true, "setUrl", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "ResourceBundle", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "format", "(Locale,String,Object[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "getBaseName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "getFormatString", "(Locale,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "getFormatStringWithoutDefaulting", "(Locale,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "load", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundle", true, "load", "(URL)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ResourceBundleFactory", true, "create", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "SetHeaderTag", true, "setName", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "SetHeaderTag", true, "setValue", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "StructuredMessageFormatTag", true, "addArgument", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "StructuredMessageFormatTag", true, "setKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ThisTagLibrary", true, "ThisTagLibrary", "(Expression)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.json", "JsonHttpResponse", true, "JsonHttpResponse", "(JSONObject)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.json", "JsonHttpResponse", true, "JsonHttpResponse", "(JSONObject,int)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", false, "Klass", "(Object,KlassNavigator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", false, "Klass", "(Object,KlassNavigator)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", false, "getArrayElement", "(Object,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", false, "getMapElement", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", true, "getArrayElement", "(Object,int)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", true, "getMapElement", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler.tags", "Include", true, "setIt", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.tags", "Include", true, "setPage", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler.util", "IllegalReflectiveAccessLogHandler", true, "get", "(IllegalAccessException)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AbstractTearOff", true, "resolveScript", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AcceptHeader", false, "AcceptHeader", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AcceptHeader", false, "select", "(Iterable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AcceptHeader", false, "select", "(String[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AcceptHeader", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getFullUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getNext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getNextToken", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getPrev", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getRestOfUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", true, "getUrl", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", true, "AttributeKey", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "CachingScriptLoader", true, "findScript", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "CachingScriptLoader", true, "findScript", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "EvaluationTrace", true, "trace", "(StaplerResponse,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "buildIndexDispatchers", "(MetaClass,List)", "", "Argument[this]", "Argument[1].Element", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "buildIndexDispatchers", "(MetaClass,List)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "buildViewDispatchers", "(MetaClass,List)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "createRequestDispatcher", "(RequestImpl,Class,Object,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "createRequestDispatcher", "(RequestImpl,Klass,Object,String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "createRequestDispatcher", "(RequestImpl,Klass,Object,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Facet", true, "createRequestDispatcher", "(RequestImpl,Klass,Object,String)", "", "Argument[3]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "optional", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "with", "(Map)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "with", "(Map)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "with", "(String,Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "with", "(String,Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", true, "with", "(String,Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ForwardingFunction", true, "ForwardingFunction", "(Function)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Function$InstanceFunction", true, "InstanceFunction", "(Method)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Function", true, "contextualize", "(Object)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] + - ["org.kohsuke.stapler", "Function", true, "getParameterNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "FunctionList", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "FunctionList", "(Function[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "annotated", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "name", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "prefix", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "signature", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "signatureStartsWith", "(Class[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "union", "(FunctionList)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "union", "(FunctionList)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList", false, "webMethodsLegacy", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpRedirect", false, "HttpRedirect", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpRedirect", false, "HttpRedirect", "(int,String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses$HttpResponseException", true, "HttpResponseException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses$HttpResponseException", true, "HttpResponseException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses$HttpResponseException", true, "HttpResponseException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses$HttpResponseException", true, "HttpResponseException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", true, "error", "(Throwable)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", true, "error", "(int,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", true, "error", "(int,Throwable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", true, "redirectTo", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", true, "redirectTo", "(int,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "JavaScriptMethodContext", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "MetaClass", true, "getPostConstructMethods", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "MetaClass", true, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "MetaClassLoader", true, "MetaClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "MetaClassLoader", true, "get", "(ClassLoader)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "NoStaplerConstructorException", true, "NoStaplerConstructorException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RawHtmlArgument", true, "RawHtmlArgument", "(Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RawHtmlArgument", true, "getValue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ReflectionUtils", true, "union", "(Annotation[],Annotation[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ReflectionUtils", true, "union", "(Annotation[],Annotation[])", "", "Argument[1].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RequestImpl", true, "RequestImpl", "(Stapler,HttpServletRequest,List,TokenList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RequestImpl", true, "RequestImpl", "(Stapler,HttpServletRequest,List,TokenList)", "", "Argument[2].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RequestImpl", true, "RequestImpl", "(Stapler,HttpServletRequest,List,TokenList)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RequestImpl", true, "getView", "(Klass,Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "RequestImpl", true, "getView", "(Klass,Object,String)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ResponseImpl", true, "ResponseImpl", "(Stapler,HttpServletResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ResponseImpl", true, "ResponseImpl", "(Stapler,HttpServletResponse)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ResponseImpl", true, "encode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ScriptLoadException", true, "ScriptLoadException", "(String,Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ScriptLoadException", true, "ScriptLoadException", "(String,Throwable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "ScriptLoadException", true, "ScriptLoadException", "(Throwable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "SingleLinkedList", true, "SingleLinkedList", "(Object,SingleLinkedList)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "SingleLinkedList", true, "SingleLinkedList", "(Object,SingleLinkedList)", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "SingleLinkedList", true, "grow", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "SingleLinkedList", true, "grow", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "escape", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "getViewURL", "(Class,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "getWebApp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "htmlSafeArgument", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", true, "htmlSafeArguments", "(Object[])", "", "Argument[0].ArrayElement", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "bindJSON", "(Type,Class,Object)", "", "Argument[2]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "findAncestor", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "findAncestor", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getAncestors", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getBindInterceptor", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getFileItem", "(String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getOriginalRequestURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getOriginalRestOfPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getRestOfPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getStapler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getSubmittedForm", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getView", "(Class,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getView", "(Klass,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getView", "(Object,String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getView", "(Object,String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "getWebApp", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindInterceptor", "(BindInterceptor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindInterceptor", "(BindInterceptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindInterceptpr", "(BindInterceptor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindInterceptpr", "(BindInterceptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindListener", "(BindInterceptor)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", true, "setBindListener", "(BindInterceptor)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", true, "getCompressedOutputStream", "(HttpServletRequest)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", true, "getCompressedWriter", "(HttpServletRequest)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", true, "getJsonConfig", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", true, "setJsonConfig", "(JsonConfig)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponseWrapper", true, "StaplerResponseWrapper", "(StaplerResponse)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponseWrapper", true, "getWrapped", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaticViewFacet", true, "StaticViewFacet", "(Collection)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaticViewFacet", true, "StaticViewFacet", "(String[])", "", "Argument[0].ArrayElement", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "StaticViewFacet", true, "addExtension", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "assembleOriginalRestOfPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "assembleRestOfPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "decode", "(String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "get", "(int)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "next", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "peek", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "prev", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", false, "toString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "TraversalMethodContext", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "WebApp", "(ServletContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "get", "(ServletContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getClassLoader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getCrumbIssuer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getDispatchValidator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getDispatchersFilter", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilterForDoActions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilterForFields", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilterForGetMethods", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilteredDispatchTriggerListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilteredDoActionTriggerListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilteredFieldTriggerListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getFilteredGetterTriggerListener", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getJsonInErrorMessageSanitizer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getMetaClass", "(Class)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getMetaClass", "(Klass)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getMetaClass", "(Klass)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getMetaClass", "(Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getResponseRenderers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "getSomeStapler", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setClassLoader", "(ClassLoader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setCrumbIssuer", "(CrumbIssuer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setDispatchValidator", "(DispatchValidator)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setDispatchersFilter", "(DispatchersFilter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilterForDoActions", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilterForFields", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilterForGetMethods", "(Filter)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilteredDispatchTriggerListener", "(FilteredDispatchTriggerListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilteredDoActionTriggerListener", "(FilteredDoActionTriggerListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilteredFieldTriggerListener", "(FilteredFieldTriggerListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setFilteredGetterTriggerListener", "(FilteredGetterTriggerListener)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", true, "setJsonInErrorMessageSanitizer", "(JsonInErrorMessageSanitizer)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WebMethodContext", false, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["org.kohsuke.stapler", "WrongTypeException", true, "WrongTypeException", "(String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["org.kohsuke.stapler.bind", "Bound", "getTarget", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "Bound", "getURL", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "Bound", "release", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable$Table", "doEnableLogging", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable", "bindWeak", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable", "getTable", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.bind", "BoundObjectTable", "releaseMe", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionFilter", "activate", "(ServletRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionFilter", "getUncaughtExceptionHandler", "(ServletContext)", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionFilter", "has", "(ServletRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionFilter", "setUncaughtExceptionHandler", "(ServletContext,UncaughtExceptionHandler)", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionServletResponse", "CompressionServletResponse", "(HttpServletResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionServletResponse", "activate", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "CompressionServletResponse", "close", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.compression", "UncaughtExceptionHandler", "reportException", "(Throwable,ServletContext,HttpServletRequest,HttpServletResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "as", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "from", "(File)", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "from", "(Map)", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "from", "(Properties)", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "fromEnvironmentVariables", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.config", "ConfigurationLoader", "fromSystemProperties", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.event", "FilteredDispatchTriggerListener", "onDispatchTrigger", "(StaplerRequest,StaplerResponse,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.event", "FilteredDoActionTriggerListener", "onDoActionTrigger", "(Function,StaplerRequest,StaplerResponse,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.event", "FilteredFieldTriggerListener", "onFieldTrigger", "(FieldRef,StaplerRequest,StaplerResponse,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.event", "FilteredGetterTriggerListener", "onGetterTrigger", "(Function,StaplerRequest,StaplerResponse,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "endArray", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "endObject", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "getExportConfig", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "name", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "startArray", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "startObject", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "type", "(Type,Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "value", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "valueNull", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "DataWriter", "valuePrimitive", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", "getFlavor", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", "isPrettyPrint", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportConfig", "isSkipIfFail", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "ExportInterceptor", "getValue", "(Property,Object,ExportConfig)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Flavor", "createDataWriter", "(Object,Writer,ExportConfig)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "NamedPathPruner", "NamedPathPruner", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", "NotExportableException", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", "NotExportableException", "(String,Throwable,Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", "NotExportableException", "(Throwable,Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "NotExportableException", "getType", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", "getGenericType", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", "getJavadoc", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", "getType", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Property", "getValue", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "Range", "Range", "(int,int)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "SchemaGenerator", "add", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "SchemaGenerator", "generateSchema", "(Result)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "SchemaGenerator", "getXmlTypeName", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner$ByDepth", "ByDepth", "(int)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner", "accept", "(Object,Property)", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "TreePruner", "getRange", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.export", "TypeUtil", "erasure", "(Type)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "Adjunct", "has", "(Kind)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "Adjunct", "write", "(StaplerRequest,XMLOutput)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctManager", "get", "(ServletContext)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", "get", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", "isIncluded", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "AdjunctsInPage", "writeSpooled", "(XMLOutput)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.adjunct", "NoSuchAdjunctException", "NoSuchAdjunctException", "(Throwable)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.errors", "ErrorObject", "getMessage", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "AtomicFileWriter", "commit", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "ByteBuffer", "length", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "ByteBuffer", "newInputStream", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "IOException2", "IOException2", "(Throwable)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(ByteBuffer,Charset,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(ByteBuffer,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(File,Charset,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(File,Charset,boolean,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(File,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "LargeText", "(File,boolean,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "doProgressText", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "isComplete", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "length", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "markAsComplete", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "readAll", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "writeLogTo", "(long,OutputStream)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LargeText", "writeLogTo", "(long,Writer)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework.io", "LineEndNormalizingWriter", "LineEndNormalizingWriter", "(Writer)", "summary", "df-generated"] + - ["org.kohsuke.stapler.framework", "AbstractWebAppMain", "getApplication", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.interceptor", "Interceptor", "invoke", "(StaplerRequest,StaplerResponse,Object,Object[])", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "GroovierJellyScript", "run", "(JellyBuilder)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "adjunct", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "getMy", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "getServletContext", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "img", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "include", "(Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "include", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "methodMissing", "(String,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "namespace", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "raw", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "redirectToDom", "(Closure)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "set", "(String,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "taglib", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "JellyBuilder", "text", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "Namespace", "createInvoker", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "Namespace", "endPrefixMapping", "(XMLOutput)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly.groovy", "Namespace", "startPrefixMapping", "(XMLOutput)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeConstraintsTag", "setExpr", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeTag", "setDeprecated", "(boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeTag", "setName", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeTag", "setSince", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeTag", "setType", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "AttributeTag", "setUse", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CopyStreamTag", "setFile", "(File)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "CopyStreamTag", "setUrl", "(URL)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "HTMLWriterOutput", "create", "(OutputStream)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "HTMLWriterOutput", "create", "(Writer,boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "HTMLWriterOutput", "useHTML", "(boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", "setClass", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", "setClazz", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "IncludeTag", "setOptional", "(boolean)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "InternationalizedStringExpression", "makeEscapingExpression", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassLoaderTearOff", "createContext", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassLoaderTearOff", "getTagLibrary", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyClassTearOff", "serveIndexJelly", "(StaplerRequest,StaplerResponse,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyCompatibleFacet", "getClassTearOffTypes", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyCompatibleFacet", "getScriptExtensions", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyFacet", "setExpressionFactory", "(ServletContextEvent,ExpressionFactory)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyTagFileLoader", "discover", "(ClassLoader)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "JellyTagFileLoader", "load", "(CustomTagLibrary,String,ClassLoader)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ReallyStaticTagLibrary", "createTagScript", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ScriptInvoker", "invokeScript", "(StaplerRequest,StaplerResponse,Script,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "ScriptInvoker", "invokeScript", "(StaplerRequest,StaplerResponse,Script,Object,XMLOutput)", "summary", "df-generated"] + - ["org.kohsuke.stapler.jelly", "StatusCodeTag", "setValue", "(int)", "summary", "df-generated"] + - ["org.kohsuke.stapler.json", "JsonHttpResponse", "JsonHttpResponse", "(Throwable,int)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang.util", "FieldRefFilter", "wrap", "(Field)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang.util", "MethodRefFilter", "wrap", "(Method)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "AnnotatedRef", "getAnnotation", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "AnnotatedRef", "hasAnnotation", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef$Filter", "keep", "(FieldRef)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "get", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "getName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "getQualifiedName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "getReturnType", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "getSignature", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "isRoutable", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "isStatic", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "FieldRef", "wrap", "(Field)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getAncestors", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getDeclaredFields", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getDeclaredMethods", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getFields", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getFunctions", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getResource", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "getSuperClass", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "isArray", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "isMap", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "java", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "toJavaClass", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "Klass", "toString", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getAncestors", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getDeclaredFields", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getDeclaredMethods", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getFunctions", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getResource", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "getSuperClass", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "isArray", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "isMap", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "KlassNavigator", "toJavaClass", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "MethodRef", "getName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "MethodRef", "invoke", "(Object,Object[])", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "MethodRef", "isRoutable", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler.lang", "MethodRef", "wrap", "(Method)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Ancestor", "getRelativePath", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AnnotationHandler", "parse", "(StaplerRequest,Annotation,Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "appScoped", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "get", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "get", "(HttpServletRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "remove", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "remove", "(HttpServletRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "requestScoped", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "sessionScoped", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "set", "(HttpServletRequest,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "AttributeKey", "set", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "BindInterceptor", "instantiate", "(Class,JSONObject)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "BindInterceptor", "onConvert", "(Type,Class,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "CachingScriptLoader", "clearScripts", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ClassDescriptor", "ClassDescriptor", "(Class,Class[])", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ClassDescriptor", "loadConstructorParamNames", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ClassDescriptor", "loadParameterNames", "(Constructor)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ClassDescriptor", "loadParameterNames", "(Method)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "CrumbIssuer", "doCrumb", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "CrumbIssuer", "issueCrumb", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "CrumbIssuer", "issueCrumb", "(StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "CrumbIssuer", "validateCrumb", "(StaplerRequest,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "DispatchValidator", "allowDispatch", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "DispatchValidator", "isDispatchAllowed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "DispatchValidator", "isDispatchAllowed", "(StaplerRequest,StaplerResponse,String,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "DispatchValidator", "requireDispatchAllowed", "(StaplerRequest,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "anonymizedTraceEval", "(StaplerRequest,StaplerResponse,Object,String,String[])", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "dispatch", "(RequestImpl,ResponseImpl,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "isTraceEnabled", "(StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "toString", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "trace", "(StaplerRequest,StaplerResponse,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "trace", "(StaplerRequest,StaplerResponse,String,Object[])", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "traceEval", "(StaplerRequest,StaplerResponse,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "traceEval", "(StaplerRequest,StaplerResponse,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "traceEval", "(StaplerRequest,StaplerResponse,Object,String,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Dispatcher", "traceable", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "EvaluationTrace$ApplicationTracer", "trace", "(StaplerRequest,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "EvaluationTrace", "get", "(StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "EvaluationTrace", "printHtml", "(PrintWriter)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "buildFallbackDispatchers", "(MetaClass,List)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "buildIndexDispatchers", "(MetaClass,List)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "buildViewDispatchers", "(MetaClass,List)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "createRequestDispatcher", "(RequestImpl,Klass,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "discover", "(ClassLoader)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "discoverExtensions", "(Class,ClassLoader[])", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "getKlass", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Facet", "handleIndexRequest", "(RequestImpl,ResponseImpl,Object,MetaClass)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", "ForwardToView", "(Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", "ForwardToView", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ForwardToView", "ForwardToView", "(RequestDispatcher)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getAnnotation", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getAnnotations", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getCheckedExceptionTypes", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getDeclaringClass", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getDisplayName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getGenericParameterTypes", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getParameterAnnotations", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getParameterNames", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getParameterTypes", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getQualifiedName", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getReturnType", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "getSignature", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "invoke", "(StaplerRequest,StaplerResponse,Object,Object[])", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "isStatic", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Function", "returnNull", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "FunctionList$Filter", "keep", "(Function)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpRedirect", "fromContextPath", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponse", "generateResponse", "(StaplerRequest,StaplerResponse,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponseRenderer", "generateResponse", "(StaplerRequest,StaplerResponse,Object,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "errorWithoutStack", "(int,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "forbidden", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "forwardToPreviousPage", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "forwardToView", "(Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "forwardToView", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "html", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "literalHtml", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "notFound", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "ok", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "plainText", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "redirectToContextRoot", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "redirectToDot", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "redirectViaContextPath", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "redirectViaContextPath", "(int,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "staticResource", "(URL)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "staticResource", "(URL,long)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "status", "(int)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "HttpResponses", "text", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "LocaleDrivenResourceProvider", "lookup", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "MethodHandleFactory", "get", "(Method)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "NoStaplerConstructorException", "NoStaplerConstructorException", "(String,Throwable)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "NoStaplerConstructorException", "NoStaplerConstructorException", "(Throwable)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "RawHtmlArgument", "toString", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "ReflectionUtils", "getVmDefaultValueFor", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "SingleLinkedList", "empty", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "buildResourcePaths", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "forward", "(RequestDispatcher,StaplerRequest,HttpServletResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "getClassLoader", "(ServletContext)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "getCurrent", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "getCurrentRequest", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "getCurrentResponse", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "invoke", "(HttpServletRequest,HttpServletResponse,Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "isSocketException", "(Throwable)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "lookupConverter", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "setClassLoader", "(ServletContext,ClassLoader)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "Stapler", "setRoot", "(ServletContextEvent,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerFallback", "getStaplerFallback", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindJSON", "(Class,JSONObject)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindJSON", "(Object,JSONObject)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindJSONToList", "(Class,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindParameters", "(Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindParameters", "(Class,String,int)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindParameters", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindParameters", "(Object,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "bindParametersToList", "(Class,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "checkIfModified", "(Calendar,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "checkIfModified", "(Date,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "checkIfModified", "(long,StaplerResponse)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "checkIfModified", "(long,StaplerResponse,long)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "createJavaScriptProxy", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "findAncestorObject", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "getBoundObjectTable", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "getReferer", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "getRequestURIWithQueryString", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "getRequestURLWithQueryString", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "getRootPath", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "hasParameter", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerRequest", "isJavaScriptProxyCall", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "forward", "(Object,String,StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "forwardToPreviousPage", "(StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "reverseProxyTo", "(URL,StaplerRequest)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "sendRedirect2", "(String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "sendRedirect", "(int,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveExposedBean", "(StaplerRequest,Object,ExportConfig)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveExposedBean", "(StaplerRequest,Object,Flavor)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,InputStream,long,int,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,InputStream,long,long,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,InputStream,long,long,int,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,InputStream,long,long,long,String)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,URL)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveFile", "(StaplerRequest,URL,long)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveLocalizedFile", "(StaplerRequest,URL)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "StaplerResponse", "serveLocalizedFile", "(StaplerRequest,URL,long)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TearOffSupport", "getTearOff", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TearOffSupport", "loadTearOff", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TearOffSupport", "setTearOff", "(Class,Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", "countRemainingTokens", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", "hasMore", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", "length", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", "nextAsInt", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "TokenList", "nextAsLong", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "clearMetaClassCache", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "clearScripts", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "getApp", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "getCurrent", "()", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "getFacet", "(Class)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "getKlass", "(Object)", "summary", "df-generated"] + - ["org.kohsuke.stapler", "WebApp", "setApp", "(Object)", "summary", "df-generated"] diff --git a/java/ql/lib/ext/hudson.model.model.yml b/java/ql/lib/ext/hudson.model.model.yml index 023265b2c3d..95aebc69028 100644 --- a/java/ql/lib/ext/hudson.model.model.yml +++ b/java/ql/lib/ext/hudson.model.model.yml @@ -16,3 +16,9 @@ extensions: data: - ["hudson.model", "Node", True, "createPath", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["hudson.model", "DirectoryBrowserSupport$Path", False, "Path", "(String,String,boolean,long,boolean,long)", "", "Argument[0]", "Argument[this].SyntheticField[hudson.model.DirectoryBrowserSupport$Path.href]", "taint", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["hudson.model", "Descriptor", True, "configure", "", "", "Parameter", "remote", "manual"] + - ["hudson.model", "Descriptor", True, "newInstance", "", "", "Parameter", "remote", "manual"] diff --git a/java/ql/lib/ext/hudson.model.yml b/java/ql/lib/ext/hudson.model.yml index 5ba20fce0c6..08d56be275e 100644 --- a/java/ql/lib/ext/hudson.model.yml +++ b/java/ql/lib/ext/hudson.model.yml @@ -3,24 +3,68 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["hudson", "FilePath", False, "copyFrom", "(FilePath)", "", "Argument[0]", "path-injection", "manual"] - - ["hudson", "FilePath", False, "copyFrom", "(URL)", "", "Argument[0]", "path-injection", "manual"] - - ["hudson", "FilePath", False, "copyFrom", "(FileItem)", "", "Argument[0]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "copyRecursiveTo", "(DirScanner,FilePath,String,TarCompression)", "", "Argument[1]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "copyRecursiveTo", "(DirScanner,FilePath,String)", "", "Argument[1]", "file-content-store", "ai-manual"] - - ["hudson", "FilePath", False, "copyRecursiveTo", "(String,FilePath)", "", "Argument[1]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[2]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "copyTo", "(FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", False, "installIfNecessaryFrom", "(URL,TaskListener,String)", "", "Argument[0]", "request-forgery", "ai-manual"] - - ["hudson", "FilePath", False, "newInputStreamDenyingSymlinkAsNeeded", "(File,String,boolean)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyFrom", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "copyFrom", "(FilePath)", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "copyFrom", "(URL)", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "copyFrom", "(FileItem)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "", "", "Argument[this]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(DirScanner,FilePath,String,TarCompression)", "", "Argument[1]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(DirScanner,FilePath,String)", "", "Argument[1]", "file-content-store", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,FilePath)", "", "Argument[1]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[2]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyTo", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "copyTo", "(FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "copyToWithPermission", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "copyToWithPermission", "(FilePath)", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "installIfNecessaryFrom", "(URL,TaskListener,String)", "", "Argument[0]", "request-forgery", "ai-manual"] + - ["hudson", "FilePath", True, "newInputStreamDenyingSymlinkAsNeeded", "(File,String,boolean)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson", "FilePath", True, "openInputStream", "(File,OpenOption[])", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "read", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "read", "(FilePath,OpenOption[])", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "readFromOffset", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "readToString", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "renameTo", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "renameTo", "", "", "Argument[0]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "write", "", "", "Argument[this]", "path-injection", "manual"] + - ["hudson", "FilePath", True, "write", "(String,String)", "", "Argument[0]", "file-content-store", "manual"] + - ["hudson", "Launcher$ProcStarter", False, "cmds", "", "", "Argument[0]", "command-injection", "manual"] + - ["hudson", "Launcher$ProcStarter", False, "cmdAsSingleString", "", "", "Argument[0]", "command-injection", "manual"] + - ["hudson", "Launcher", True, "launch", "", "", "Argument[0]", "command-injection", "manual"] + - ["hudson", "Launcher", True, "launchChannel", "", "", "Argument[0]", "command-injection", "manual"] + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["hudson", "Plugin", True, "configure", "", "", "Parameter", "remote", "manual"] + - ["hudson", "Plugin", True, "newInstance", "", "", "Parameter", "remote", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel data: - - ["hudson", "FilePath", False, "child", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - - ["hudson", "FilePath", False, "list", "(String,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["hudson", "FilePath", False, "list", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["hudson", "FilePath", False, "list", "(String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - - ["hudson", "FilePath", False, "normalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - - ["hudson", "FilePath", False, "sibling", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "FilePath", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["hudson", "FilePath", True, "FilePath", "(FilePath,String)", "", "Argument[0..1]", "Argument[this]", "taint", "manual"] + - ["hudson", "FilePath", True, "FilePath", "(VirtualChannel,String)", "", "Argument[1]", "Argument[this]", "taint", "manual"] + - ["hudson", "FilePath", True, "child", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "list", "(String,String,boolean)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "list", "(String,String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "list", "(String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "normalize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "FilePath", True, "sibling", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["hudson", "Util", True, "nullify", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "fixNull", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "fixEmpty", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "fixEmptyAndTrim", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "getFileName", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "join", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "encodeRFC2396", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "wrapToErrorSpan", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "fileToPath", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "xmlEscape", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "escape", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "singleQuote", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "rawEncode", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "encode", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "fromHexString", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "toHexString", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["hudson", "Util", True, "tokenize", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/ext/hudson.util.model.yml b/java/ql/lib/ext/hudson.util.model.yml index 39c5b55f349..1ac3aa8c10a 100644 --- a/java/ql/lib/ext/hudson.util.model.yml +++ b/java/ql/lib/ext/hudson.util.model.yml @@ -7,6 +7,10 @@ extensions: - ["hudson.util", "AtomicFileWriter", True, "AtomicFileWriter", "(Path,Charset,boolean,boolean)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson.util", "AtomicFileWriter", True, "AtomicFileWriter", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson.util", "ClasspathBuilder", True, "add", "(FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["hudson.util", "FormValidation", True, "errorWithMarkup", "", "", "Argument[0]", "html-injection", "manual"] + - ["hudson.util", "FormValidation", True, "okWithMarkup", "", "", "Argument[0]", "html-injection", "manual"] + - ["hudson.util", "FormValidation", True, "respond", "", "", "Argument[1]", "html-injection", "manual"] + - ["hudson.util", "FormValidation", True, "warningWithMarkup", "", "", "Argument[0]", "html-injection", "manual"] - ["hudson.util", "IOUtils", True, "mkdirs", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson.util", "StreamTaskListener", True, "StreamTaskListener", "(File,boolean,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson.util", "TextFile", True, "delete", "()", "", "Argument[this]", "path-injection", "manual"] @@ -15,10 +19,28 @@ extensions: - ["hudson.util", "TextFile", True, "lines", "()", "", "Argument[this]", "path-injection", "manual"] - ["hudson.util", "TextFile", True, "read", "()", "", "Argument[this]", "path-injection", "manual"] - ["hudson.util", "TextFile", True, "readTrim", "()", "", "Argument[this]", "path-injection", "manual"] + - ["hudson.util", "TextFile", True, "write", "(String)", "", "Argument[this]", "path-injection", "manual"] - ["hudson.util", "TextFile", True, "write", "(String)", "", "Argument[0]", "file-content-store", "manual"] + - ["hudson.util", "HttpResponses", True, "staticResource", "(File)", "", "Argument[0]", "path-injection", "manual"] - addsTo: pack: codeql/java-all extensible: summaryModel data: + - ["hudson.util", "ArgumentListBuilder", True, "ArgumentListBuilder", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "add", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "clone", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "prepend", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "toCommandArray", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "toList", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "toWindowsCommand", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + # ArgumentListBuilder fluent methods + - ["hudson.util", "ArgumentListBuilder", True, "add", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addKeyValuePair", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addKeyValuePairs", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addKeyValuePairsFromPropertyString", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addMasked", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addQuoted", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "addTokenized", "", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["hudson.util", "ArgumentListBuilder", True, "prepend", "", "", "Argument[this]", "ReturnValue", "value", "manual"] - ["hudson.util", "QuotedStringTokenizer", True, "tokenize", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["hudson.util", "TextFile", True, "TextFile", "(File)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 8625a68caa0..012fb65baab 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -8,30 +8,30 @@ extensions: - ["java.lang", "ClassLoader", True, "getSystemResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "ClassLoader", True, "getSystemResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Module", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "command", "(List)", "", "Argument[0]", "command-injection", "manual"] + - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String[],String[])", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String[],String[],File)", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String[],String[],File)", "", "Argument[2]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String,String[])", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String,String[],File)", "", "Argument[0]", "command-injection", "ai-manual"] + - ["java.lang", "Runtime", True, "exec", "(String,String[],File)", "", "Argument[2]", "command-injection", "ai-manual"] # These are potential vulnerabilities, but not for command-injection. No query for this kind of vulnerability currently exists. # - ["java.lang", "Runtime", False, "load", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] # - ["java.lang", "Runtime", False, "loadLibrary", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] - # These are modeled in plain CodeQL. TODO: migrate them. - # - ["java.lang", "ProcessBuilder", False, "command", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "ProcessBuilder", False, "directory", "(File)", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String,String[])", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String[],String[])", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String,String[],File)", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String,String[],File)", "", "Argument[2]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String[],String[],File)", "", "Argument[0]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String[],String[],File)", "", "Argument[2]", "command-injection", "ai-manual"] - # - ["java.lang", "Runtime", True, "exec", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "String", False, "matches", "(String)", "", "Argument[0]", "regex-use[f-1]", "manual"] - ["java.lang", "String", False, "replaceAll", "(String,String)", "", "Argument[0]", "regex-use[-1]", "manual"] - ["java.lang", "String", False, "replaceFirst", "(String,String)", "", "Argument[0]", "regex-use[-1]", "manual"] - ["java.lang", "String", False, "split", "(String)", "", "Argument[0]", "regex-use[-1]", "manual"] - ["java.lang", "String", False, "split", "(String,int)", "", "Argument[0]", "regex-use[-1]", "manual"] - # These are modeled in plain CodeQL. TODO: migrate them. - # - ["java.lang", "System", False, "load", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] # This is actually injecting a library. - # - ["java.lang", "System", False, "loadLibrary", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] # This is actually injecting a library. + # These are potential vulnerabilities, but not for command-injection. No query for this kind of vulnerability currently exists. + # - ["java.lang", "System", False, "load", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] + # - ["java.lang", "System", False, "loadLibrary", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "System$Logger", True, "log", "(Level,Object)", "", "Argument[1]", "log-injection", "manual"] - ["java.lang", "System$Logger", True, "log", "(Level,ResourceBundle,String,Object[])", "", "Argument[2..3]", "log-injection", "manual"] - ["java.lang", "System$Logger", True, "log", "(Level,ResourceBundle,String,Throwable)", "", "Argument[2]", "log-injection", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 39a4c484112..24591459432 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -45,7 +45,8 @@ extensions: - ["java.net", "URI", False, "toURL", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URL", False, "URL", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] # @atorralba: review for consistency + - ["java.net", "URL", False, "URL", "(URL,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URL", False, "toExternalForm", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URL", False, "toURI", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.net", "URL", False, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URLDecoder", False, "decode", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/java/ql/lib/ext/java.sql.model.yml b/java/ql/lib/ext/java.sql.model.yml index c93a89cfd2c..58985c886b5 100644 --- a/java/ql/lib/ext/java.sql.model.yml +++ b/java/ql/lib/ext/java.sql.model.yml @@ -21,7 +21,6 @@ extensions: extensible: summaryModel data: - ["java.sql", "Connection", True, "nativeSQL", "(String)", "", "Argument[0]", "ReturnValue", "taint", "hq-manual"] - - ["java.sql", "PreparedStatement", True, "setString", "(int,String)", "", "Argument[1]", "Argument[this]", "value", "manual"] - ["java.sql", "ResultSet", True, "getString", "(String)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - addsTo: @@ -31,13 +30,14 @@ extensions: - ["java.sql", "Connection", "createStatement", "()", "summary", "manual"] - ["java.sql", "PreparedStatement", "executeUpdate", "()", "summary", "manual"] - ["java.sql", "PreparedStatement", "executeQuery", "()", "summary", "manual"] + - ["java.sql", "PreparedStatement", "setInt", "(int,int)", "summary", "manual"] + - ["java.sql", "PreparedStatement", "setLong", "(int,long)", "summary", "manual"] + - ["java.sql", "PreparedStatement", "setString", "(int,String)", "summary", "manual"] - ["java.sql", "ResultSet", "next", "()", "summary", "manual"] - ["java.sql", "Statement", "close", "()", "summary", "manual"] # The below APIs have numeric flow and are currently being stored as neutral models. # These may be changed to summary models with kinds "value-numeric" and "taint-numeric" (or similar) in the future. - - ["java.sql", "PreparedStatement", "setInt", "(int,int)", "summary", "manual"] # value-numeric - - ["java.sql", "PreparedStatement", "setLong", "(int,long)", "summary", "manual"] # value-numeric - ["java.sql", "ResultSet", "getInt", "(int)", "summary", "manual"] # taint-numeric - ["java.sql", "ResultSet", "getInt", "(String)", "summary", "manual"] # taint-numeric - ["java.sql", "ResultSet", "getLong", "(String)", "summary", "manual"] # taint-numeric diff --git a/java/ql/lib/ext/org.apache.commons.exec.model.yml b/java/ql/lib/ext/org.apache.commons.exec.model.yml new file mode 100644 index 00000000000..314b0996194 --- /dev/null +++ b/java/ql/lib/ext/org.apache.commons.exec.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.commons.exec", "CommandLine", True, "parse", "(String)", "", "Argument[0]", "command-injection", "manual"] + - ["org.apache.commons.exec", "CommandLine", True, "parse", "(String,Map)", "", "Argument[0]", "command-injection", "manual"] + - ["org.apache.commons.exec", "CommandLine", True, "addArguments", "(String)", "", "Argument[0]", "command-injection", "manual"] + - ["org.apache.commons.exec", "CommandLine", True, "addArguments", "(String,boolean)", "", "Argument[0]", "command-injection", "manual"] + - ["org.apache.commons.exec", "CommandLine", True, "addArguments", "(String[])", "", "Argument[0]", "command-injection", "manual"] + - ["org.apache.commons.exec", "CommandLine", True, "addArguments", "(String[],boolean)", "", "Argument[0]", "command-injection", "manual"] diff --git a/java/ql/lib/ext/org.kohsuke.stapler.bind.model.yml b/java/ql/lib/ext/org.kohsuke.stapler.bind.model.yml new file mode 100644 index 00000000000..9152eb7b55b --- /dev/null +++ b/java/ql/lib/ext/org.kohsuke.stapler.bind.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["org.kohsuke.stapler.bind", "JavaScriptMethod", True, "", "", "Annotated", "Parameter", "remote", "manual"] diff --git a/java/ql/lib/ext/org.kohsuke.stapler.json.model.yml b/java/ql/lib/ext/org.kohsuke.stapler.json.model.yml new file mode 100644 index 00000000000..a06683144e0 --- /dev/null +++ b/java/ql/lib/ext/org.kohsuke.stapler.json.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["org.kohsuke.stapler.json", "SubmittedForm", True, "", "", "Annotated", "Parameter", "remote", "manual"] + - ["org.kohsuke.stapler.json", "JsonBody", True, "", "", "Annotated", "Parameter", "remote", "manual"] diff --git a/java/ql/lib/ext/org.kohsuke.stapler.model.yml b/java/ql/lib/ext/org.kohsuke.stapler.model.yml index 7a242051485..63bbdbfd52a 100644 --- a/java/ql/lib/ext/org.kohsuke.stapler.model.yml +++ b/java/ql/lib/ext/org.kohsuke.stapler.model.yml @@ -4,4 +4,46 @@ extensions: extensible: sinkModel data: - ["org.kohsuke.stapler", "HttpResponses", True, "redirectTo", "(String)", "", "Argument[0]", "url-redirection", "ai-manual"] + - ["org.kohsuke.stapler", "HttpResponses", True, "redirectTo", "(int,String)", "", "Argument[1]", "url-redirection", "manual"] - ["org.kohsuke.stapler", "HttpResponses", True, "staticResource", "(URL)", "", "Argument[0]", "request-forgery", "ai-manual"] + - ["org.kohsuke.stapler", "HttpResponses", True, "staticResource", "(URL,long)", "", "Argument[0]", "request-forgery", "manual"] + - ["org.kohsuke.stapler", "HttpResponses", True, "html", "(String)", "", "Argument[0]", "html-injection", "manual"] + - ["org.kohsuke.stapler", "HttpResponses", True, "literalHtml", "(String)", "", "Argument[0]", "html-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "forward", "(Object,String,StaplerRequest)", "", "Argument[1]", "request-forgery", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect2", "(String)", "", "Argument[0]", "url-redirection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(int,String)", "", "Argument[1]", "url-redirection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "sendRedirect", "(String)", "", "Argument[0]", "url-redirection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,URL)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,URL,long)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveLocalizedFile", "(StaplerRequest,URL)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveLocalizedFile", "(StaplerRequest,URL,long)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,InputStream,long,long,long,String)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,InputStream,long,long,int,String)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,InputStream,long,long,String)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "serveFile", "(StaplerRequest,InputStream,long,int,String)", "", "Argument[1]", "path-injection", "manual"] + - ["org.kohsuke.stapler", "StaplerResponse", True, "reverseProxyTo", "(URL,StaplerRequest)", "", "Argument[0]", "request-forgery", "manual"] + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["org.kohsuke.stapler", "StaplerRequest", True, "getRequestURIWithQueryString", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getRequestURLWithQueryString", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getReferer", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getOriginalRequestURI", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getSubmittedForm", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getFileItem", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindParametersToList", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindParameters", "", "", "Argument[0]", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindParameters", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindJSON", "", "", "Argument[0]", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindJSON", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "bindJSONToList", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getParameter", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getParameterMap", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getParameterNames", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getParameterValues", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "StaplerRequest", True, "getRestOfPath", "", "", "ReturnValue", "remote", "manual"] + - ["org.kohsuke.stapler", "QueryParameter", True, "", "", "Annotated", "Parameter", "remote", "manual"] + - ["org.kohsuke.stapler", "Header", True, "", "", "Annotated", "Parameter", "remote", "manual"] + - ["org.kohsuke.stapler", "DataBoundConstructor", True, "", "", "Annotated", "Parameter", "remote", "manual"] + - ["org.kohsuke.stapler", "DataBoundSetter", True, "", "", "Annotated", "Parameter", "remote", "manual"] diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index f7c9a607d33..6a87f245283 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,11 +1,12 @@ name: codeql/java-all -version: 0.6.4 +version: 0.7.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java library: true upgrades: upgrades dependencies: + codeql/mad: ${workspace} codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/typetracking: ${workspace} diff --git a/java/ql/lib/semmle/code/java/Constants.qll b/java/ql/lib/semmle/code/java/Constants.qll index e9ace210d70..9e35a925be3 100644 --- a/java/ql/lib/semmle/code/java/Constants.qll +++ b/java/ql/lib/semmle/code/java/Constants.qll @@ -17,7 +17,6 @@ signature int getIntValSig(Expr e); */ module CalculateConstants { /** Gets the value of a constant boolean expression. */ - pragma[assume_small_delta] boolean calculateBooleanValue(Expr e) { // No casts relevant to booleans. // `!` is the only unary operator that evaluates to a boolean. @@ -99,7 +98,6 @@ module CalculateConstants } /** Gets the value of a constant integer expression. */ - pragma[assume_small_delta] int calculateIntValue(Expr e) { exists(IntegralType t | e.getType() = t | t.getName().toLowerCase() != "long") and ( diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index f94658e1372..229c526d270 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -365,7 +365,6 @@ private module ControlFlowGraphImpl { /** * Gets a non-overridable method that always throws an exception or calls `exit`. */ - pragma[assume_small_delta] private Method nonReturningMethod() { result instanceof MethodExit or @@ -382,7 +381,6 @@ private module ControlFlowGraphImpl { /** * Gets a virtual method that always throws an exception or calls `exit`. */ - pragma[assume_small_delta] private EffectivelyNonVirtualMethod likelyNonReturningMethod() { result.getReturnType() instanceof VoidType and not exists(ReturnStmt ret | ret.getEnclosingCallable() = result) and @@ -402,7 +400,6 @@ private module ControlFlowGraphImpl { /** * Gets a statement that always throws an exception or calls `exit`. */ - pragma[assume_small_delta] private Stmt nonReturningStmt() { result instanceof ThrowStmt or @@ -424,7 +421,6 @@ private module ControlFlowGraphImpl { /** * Gets an expression that always throws an exception or calls `exit`. */ - pragma[assume_small_delta] private Expr nonReturningExpr() { result = nonReturningMethodAccess() or diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 92c81650bc3..312d7767ac2 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -131,7 +131,6 @@ private predicate primitiveOrString(Type t) { * See JLS v8, section 15.28 (Constant Expressions). */ class CompileTimeConstantExpr extends Expr { - pragma[assume_small_delta] CompileTimeConstantExpr() { primitiveOrString(this.getType()) and ( @@ -181,7 +180,6 @@ class CompileTimeConstantExpr extends Expr { /** * Gets the string value of this expression, where possible. */ - pragma[assume_small_delta] pragma[nomagic] string getStringValue() { result = this.(StringLiteral).getValue() @@ -207,7 +205,6 @@ class CompileTimeConstantExpr extends Expr { /** * Gets the boolean value of this expression, where possible. */ - pragma[assume_small_delta] pragma[nomagic] boolean getBooleanValue() { // Literal value. @@ -1910,7 +1907,6 @@ class TypeAccess extends Expr, Annotatable, @typeaccess { override CompilationUnit getCompilationUnit() { result = Expr.super.getCompilationUnit() } /** Gets a printable representation of this expression. */ - pragma[assume_small_delta] override string toString() { result = this.getQualifier().toString() + "." + this.getType().toString() or diff --git a/java/ql/lib/semmle/code/java/JDK.qll b/java/ql/lib/semmle/code/java/JDK.qll index 78f7defc32f..156cbbc0f93 100644 --- a/java/ql/lib/semmle/code/java/JDK.qll +++ b/java/ql/lib/semmle/code/java/JDK.qll @@ -199,18 +199,18 @@ class TypeFile extends Class { // --- Standard methods --- /** - * Any constructor of class `java.lang.ProcessBuilder`. + * DEPRECATED: Any constructor of class `java.lang.ProcessBuilder`. */ -class ProcessBuilderConstructor extends Constructor, ExecCallable { +deprecated class ProcessBuilderConstructor extends Constructor, ExecCallable { ProcessBuilderConstructor() { this.getDeclaringType() instanceof TypeProcessBuilder } override int getAnExecutedArgument() { result = 0 } } /** - * Any of the methods named `command` on class `java.lang.ProcessBuilder`. + * DEPRECATED: Any of the methods named `command` on class `java.lang.ProcessBuilder`. */ -class MethodProcessBuilderCommand extends Method, ExecCallable { +deprecated class MethodProcessBuilderCommand extends Method, ExecCallable { MethodProcessBuilderCommand() { this.hasName("command") and this.getDeclaringType() instanceof TypeProcessBuilder @@ -220,9 +220,9 @@ class MethodProcessBuilderCommand extends Method, ExecCallable { } /** - * Any method named `exec` on class `java.lang.Runtime`. + * DEPRECATED: Any method named `exec` on class `java.lang.Runtime`. */ -class MethodRuntimeExec extends Method, ExecCallable { +deprecated class MethodRuntimeExec extends Method, ExecCallable { MethodRuntimeExec() { this.hasName("exec") and this.getDeclaringType() instanceof TypeRuntime diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index d09fa9042d9..565da1b6d97 100644 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -736,7 +736,6 @@ class FieldDeclaration extends ExprParent, @fielddecl, Annotatable { /** Gets the number of fields declared in this declaration. */ int getNumField() { result = max(int idx | fieldDeclaredIn(_, this, idx) | idx) + 1 } - pragma[assume_small_delta] override string toString() { if this.getNumField() = 1 then result = this.getTypeAccess() + " " + this.getField(0) + ";" diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index fcf31e3be0d..e8e9c2bf916 100644 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -309,7 +309,6 @@ private predicate hasSubtypeStar1(RefType t, RefType sub) { /** * Holds if `hasSubtype*(t, sub)`, but manual-magic'ed with `getAWildcardLowerBound(sub)`. */ -pragma[assume_small_delta] pragma[nomagic] private predicate hasSubtypeStar2(RefType t, RefType sub) { sub = t and getAWildcardLowerBound(sub) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index bb8485cd601..c04126d5f7f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -87,6 +87,7 @@ private import internal.FlowSummaryImplSpecific as FlowSummaryImplSpecific private import internal.AccessPathSyntax private import ExternalFlowExtensions as Extensions private import FlowSummary +private import codeql.mad.ModelValidation as SharedModelVal /** * A class for activating additional model rows. @@ -265,86 +266,17 @@ module ModelValidation { ) } - private class OutdatedSinkKind extends string { - OutdatedSinkKind() { - this = - [ - "sql", "url-redirect", "xpath", "ssti", "logging", "groovy", "jexl", "mvel", "xslt", - "ldap", "pending-intent-sent", "intent-start", "set-hostname-verifier", - "header-splitting", "xss", "write-file", "create-file", "read-file", "open-url", - "jdbc-url" - ] - } + private module KindValConfig implements SharedModelVal::KindValidationConfigSig { + predicate summaryKind(string kind) { summaryModel(_, _, _, _, _, _, _, _, kind, _) } - private string replacementKind() { - this = ["sql", "xpath", "groovy", "jexl", "mvel", "xslt", "ldap"] and - result = this + "-injection" - or - this = "url-redirect" and result = "url-redirection" - or - this = "ssti" and result = "template-injection" - or - this = "logging" and result = "log-injection" - or - this = "pending-intent-sent" and result = "pending-intents" - or - this = "intent-start" and result = "intent-redirection" - or - this = "set-hostname-verifier" and result = "hostname-verification" - or - this = "header-splitting" and result = "response-splitting" - or - this = "xss" and result = "html-injection\" or \"js-injection" - or - this = "write-file" and result = "file-content-store" - or - this = ["create-file", "read-file"] and result = "path-injection" - or - this = ["open-url", "jdbc-url"] and result = "request-forgery" - } + predicate sinkKind(string kind) { sinkModel(_, _, _, _, _, _, _, kind, _) } - string outdatedMessage() { - result = - "The kind \"" + this + "\" is outdated. Use \"" + this.replacementKind() + "\" instead." - } + predicate sourceKind(string kind) { sourceModel(_, _, _, _, _, _, _, kind, _) } + + predicate neutralKind(string kind) { neutralModel(_, _, _, _, kind, _) } } - private string getInvalidModelKind() { - exists(string kind | summaryModel(_, _, _, _, _, _, _, _, kind, _) | - not kind = ["taint", "value"] and - result = "Invalid kind \"" + kind + "\" in summary model." - ) - or - exists(string kind, string msg | sinkModel(_, _, _, _, _, _, _, kind, _) | - not kind = - [ - "request-forgery", "jndi-injection", "ldap-injection", "sql-injection", "log-injection", - "mvel-injection", "xpath-injection", "groovy-injection", "html-injection", "js-injection", - "ognl-injection", "intent-redirection", "pending-intents", "url-redirection", - "path-injection", "file-content-store", "hostname-verification", "response-splitting", - "information-leak", "xslt-injection", "jexl-injection", "bean-validation", - "template-injection", "fragment-injection", "command-injection" - ] and - not kind.matches("regex-use%") and - not kind.matches("qltest%") and - msg = "Invalid kind \"" + kind + "\" in sink model." and - // The part of this message that refers to outdated sink kinds can be deleted after June 1st, 2024. - if kind instanceof OutdatedSinkKind - then result = msg + " " + kind.(OutdatedSinkKind).outdatedMessage() - else result = msg - ) - or - exists(string kind | sourceModel(_, _, _, _, _, _, _, kind, _) | - not kind = ["remote", "contentprovider", "android-external-storage-dir"] and - not kind.matches("qltest%") and - result = "Invalid kind \"" + kind + "\" in source model." - ) - or - exists(string kind | neutralModel(_, _, _, _, kind, _) | - not kind = ["summary", "source", "sink"] and - result = "Invalid kind \"" + kind + "\" in neutral model." - ) - } + private module KindVal = SharedModelVal::KindValidation; private string getInvalidModelSignature() { exists( @@ -387,7 +319,7 @@ module ModelValidation { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - getInvalidModelKind() + KindVal::getInvalidModelKind() ] } } diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll index d26aa5d35f6..f049a0cb37b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll @@ -36,6 +36,14 @@ abstract class RemoteFlowSource extends DataFlow::Node { abstract string getSourceType(); } +/** + * A module for importing frameworks that define flow sources. + */ +private module FlowSources { + private import semmle.code.java.frameworks.hudson.Hudson + private import semmle.code.java.frameworks.stapler.Stapler +} + private class ExternalRemoteFlowSource extends RemoteFlowSource { ExternalRemoteFlowSource() { sourceNode(this, "remote") } diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index 9a187c027ff..1619965f0f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -23,6 +23,7 @@ private module Frameworks { private import semmle.code.java.frameworks.Properties private import semmle.code.java.frameworks.Protobuf private import semmle.code.java.frameworks.ratpack.RatpackExec + private import semmle.code.java.frameworks.stapler.Stapler private import semmle.code.java.JDK } diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll index 6d6af4f82b4..e45ba0be27e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll @@ -149,8 +149,9 @@ class SummarizedCallableBase extends TSummarizedCallableBase { or result = this.asSyntheticCallable().getParameterType(pos) or - exists(SyntheticCallable sc | sc = this.asSyntheticCallable() | - Impl::Private::summaryParameterNodeRange(this, pos) and + exists(SyntheticCallable sc, Impl::Private::SummaryNode p | sc = this.asSyntheticCallable() | + Impl::Private::summaryParameterNode(p, pos) and + this = p.getSummarizedCallable() and not exists(sc.getParameterType(pos)) and result instanceof TypeObject ) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index 25b39458656..011932bc48b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -42,7 +42,6 @@ EqualityTest varEqualityTestExpr(SsaVariable v1, SsaVariable v2, boolean isEqual } /** Gets an expression that is provably not `null`. */ -pragma[assume_small_delta] Expr clearlyNotNullExpr(Expr reason) { result instanceof ClassInstanceExpr and reason = result or @@ -237,7 +236,6 @@ Expr directNullGuard(SsaVariable v, boolean branch, boolean isnull) { * If `result` evaluates to `branch`, then `v` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ -pragma[assume_small_delta] Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { result = directNullGuard(v, branch, isnull) or exists(boolean branch0 | implies_v3(result, branch, nullGuard(v, branch0, isnull), branch0)) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index dd478b2a869..fb2e87e9bc7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -61,7 +61,6 @@ class SsaSourceVariable extends TSsaSourceVariable { * accessed from nested callables are therefore associated with several * `SsaSourceVariable`s. */ - pragma[assume_small_delta] cached VarAccess getAnAccess() { exists(LocalScopeVariable v, Callable c | @@ -451,7 +450,6 @@ private module SsaImpl { * Holds if `f` is live in `b` at index `i`. The rank of `i` is `rankix` as * defined by `callDefUseRank`. */ - pragma[assume_small_delta] private predicate liveAtRank(TrackedField f, BasicBlock b, int rankix, int i) { callDefUseRank(f, b, rankix, i) and ( @@ -565,7 +563,6 @@ private module SsaImpl { } /** Holds if a phi node for `v` is needed at the beginning of basic block `b`. */ - pragma[assume_small_delta] cached predicate phiNode(TrackedVar v, BasicBlock b) { liveAtEntry(v, b) and diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index add7ebc66d4..6d1946a47f6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -241,7 +241,6 @@ private module ForAll E, TypePropagation T> { * Holds if `t` is a candidate bound for `n` that is also valid for data coming * through the edges into `n` ranked from `1` to `r`. */ - pragma[assume_small_delta] private predicate flowJoin(int r, Node n, T::Typ t) { ( r = 1 and candJoinType(n, t) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 6e41c803553..f4af8f506d6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -151,7 +151,6 @@ private module SsaImpl { } /** Holds if a phi node for `v` is needed at the beginning of basic block `b`. */ - pragma[assume_small_delta] cached predicate phiNode(BaseSsaSourceVariable v, BasicBlock b) { liveAtEntry(v, b) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index ddf98ac0f2f..410543e0fc9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -460,7 +460,6 @@ module Impl { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 22d79d7da15..8c44e7df5b0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -54,12 +54,7 @@ private module Cached { fa.getField() instanceof InstanceField and ia.isImplicitFieldQualifier(fa) ) } or - TSummaryInternalNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { - FlowSummaryImpl::Private::summaryNodeRange(c, state) - } or - TSummaryParameterNode(SummarizedCallable c, int pos) { - FlowSummaryImpl::Private::summaryParameterNodeRange(c, pos) - } or + TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or TFieldValueNode(Field f) cached @@ -132,8 +127,6 @@ module Public { or result = this.(ImplicitPostUpdateNode).getPreUpdateNode().getType() or - result = this.(SummaryParameterNode).getTypeImpl() - or result = this.(FieldValueNode).getField().getType() } @@ -378,8 +371,7 @@ module Private { result.asCallable() = n.(ImplicitInstanceAccess).getInstanceAccess().getEnclosingCallable() or result.asCallable() = n.(MallocNode).getClassInstanceExpr().getEnclosingCallable() or result = nodeGetEnclosingCallable(n.(ImplicitPostUpdateNode).getPreUpdateNode()) or - n = TSummaryInternalNode(result.asSummarizedCallable(), _) or - n = TSummaryParameterNode(result.asSummarizedCallable(), _) or + result.asSummarizedCallable() = n.(FlowSummaryNode).getSummarizedCallable() or result.asFieldScope() = n.(FieldValueNode).getField() } @@ -407,7 +399,7 @@ module Private { or this = getInstanceArgument(_) or - this.(SummaryNode).isArgumentOf(_, _) + this.(FlowSummaryNode).isArgumentOf(_, _) } /** @@ -424,7 +416,7 @@ module Private { or pos = -1 and this = getInstanceArgument(call.asCall()) or - this.(SummaryNode).isArgumentOf(call, pos) + this.(FlowSummaryNode).isArgumentOf(call, pos) } /** Gets the call in which this node is an argument. */ @@ -435,7 +427,7 @@ module Private { class ReturnNode extends Node { ReturnNode() { exists(ReturnStmt ret | this.asExpr() = ret.getResult()) or - this.(SummaryNode).isReturn() + this.(FlowSummaryNode).isReturn() } /** Gets the kind of this returned value. */ @@ -447,61 +439,57 @@ module Private { OutNode() { this.asExpr() instanceof MethodAccess or - this.(SummaryNode).isOut(_) + this.(FlowSummaryNode).isOut(_) } /** Gets the underlying call. */ DataFlowCall getCall() { result.asCall() = this.asExpr() or - this.(SummaryNode).isOut(result) + this.(FlowSummaryNode).isOut(result) } } /** * A data-flow node used to model flow summaries. */ - class SummaryNode extends Node, TSummaryInternalNode { - private SummarizedCallable c; - private FlowSummaryImpl::Private::SummaryNodeState state; + class FlowSummaryNode extends Node, TFlowSummaryNode { + FlowSummaryImpl::Private::SummaryNode getSummaryNode() { this = TFlowSummaryNode(result) } - SummaryNode() { this = TSummaryInternalNode(c, state) } + SummarizedCallable getSummarizedCallable() { + result = this.getSummaryNode().getSummarizedCallable() + } - override Location getLocation() { result = c.getLocation() } + override Location getLocation() { result = this.getSummarizedCallable().getLocation() } - override string toString() { result = "[summary] " + state + " in " + c } + override string toString() { result = this.getSummaryNode().toString() } /** Holds if this summary node is the `i`th argument of `call`. */ predicate isArgumentOf(DataFlowCall call, int i) { - FlowSummaryImpl::Private::summaryArgumentNode(call, this, i) + FlowSummaryImpl::Private::summaryArgumentNode(call, this.getSummaryNode(), i) } /** Holds if this summary node is a return node. */ - predicate isReturn() { FlowSummaryImpl::Private::summaryReturnNode(this, _) } + predicate isReturn() { FlowSummaryImpl::Private::summaryReturnNode(this.getSummaryNode(), _) } /** Holds if this summary node is an out node for `call`. */ - predicate isOut(DataFlowCall call) { FlowSummaryImpl::Private::summaryOutNode(call, this, _) } + predicate isOut(DataFlowCall call) { + FlowSummaryImpl::Private::summaryOutNode(call, this.getSummaryNode(), _) + } } - SummaryNode getSummaryNode(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNodeState state) { - result = TSummaryInternalNode(c, state) - } - - class SummaryParameterNode extends ParameterNode, TSummaryParameterNode { - private SummarizedCallable sc; - private int pos_; - - SummaryParameterNode() { this = TSummaryParameterNode(sc, pos_) } - - override Location getLocation() { result = sc.getLocation() } - - override string toString() { result = "[summary param] " + pos_ + " in " + sc } - - override predicate isParameterOf(DataFlowCallable c, int pos) { - c.asSummarizedCallable() = sc and pos = pos_ + class SummaryParameterNode extends ParameterNode, FlowSummaryNode { + SummaryParameterNode() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), _) } - Type getTypeImpl() { result = sc.getParameterType(pos_) } + private int getPosition() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), result) + } + + override predicate isParameterOf(DataFlowCallable c, int pos) { + c.asSummarizedCallable() = this.getSummarizedCallable() and pos = this.getPosition() + } } } @@ -523,10 +511,12 @@ private class MallocNode extends Node, TMallocNode { ClassInstanceExpr getClassInstanceExpr() { result = cie } } -private class SummaryPostUpdateNode extends SummaryNode, PostUpdateNode { - private Node pre; +private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { + private FlowSummaryNode pre; - SummaryPostUpdateNode() { FlowSummaryImpl::Private::summaryPostUpdateNode(this, pre) } + SummaryPostUpdateNode() { + FlowSummaryImpl::Private::summaryPostUpdateNode(this.getSummaryNode(), pre.getSummaryNode()) + } override Node getPreUpdateNode() { result = pre } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 22f84241c96..216523023d9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -85,7 +85,8 @@ predicate jumpStep(Node node1, Node node2) { any(AdditionalValueStep a).step(node1, node2) and node1.getEnclosingCallable() != node2.getEnclosingCallable() or - FlowSummaryImpl::Private::Steps::summaryJumpStep(node1, node2) + FlowSummaryImpl::Private::Steps::summaryJumpStep(node1.(FlowSummaryNode).getSummaryNode(), + node2.(FlowSummaryNode).getSummaryNode()) } /** @@ -114,7 +115,8 @@ predicate storeStep(Node node1, Content f, Node node2) { or f instanceof ArrayContent and arrayStoreStep(node1, node2) or - FlowSummaryImpl::Private::Steps::summaryStoreStep(node1, f, node2) + FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), f, + node2.(FlowSummaryNode).getSummaryNode()) } /** @@ -145,7 +147,8 @@ predicate readStep(Node node1, Content f, Node node2) { or f instanceof CollectionContent and collectionReadStep(node1, node2) or - FlowSummaryImpl::Private::Steps::summaryReadStep(node1, f, node2) + FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), f, + node2.(FlowSummaryNode).getSummaryNode()) } /** @@ -160,7 +163,7 @@ predicate clearsContent(Node n, Content c) { c.(FieldContent).getField() = fa.getField() ) or - FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) } /** @@ -168,7 +171,7 @@ predicate clearsContent(Node n, Content c) { * at node `n`. */ predicate expectsContent(Node n, ContentSet c) { - FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) } /** @@ -176,7 +179,7 @@ predicate expectsContent(Node n, ContentSet c) { * possible flow. A single type is used for all numeric types to account for * numeric conversions, and otherwise the erasure is used. */ -DataFlowType getErasedRepr(Type t) { +RefType getErasedRepr(Type t) { exists(Type e | e = t.getErasure() | if e instanceof NumericOrCharType then result.(BoxedType).getPrimitiveType().getName() = "double" @@ -189,11 +192,18 @@ DataFlowType getErasedRepr(Type t) { t instanceof NullType and result instanceof TypeObject } +class DataFlowType extends SrcRefType { + DataFlowType() { this = getErasedRepr(_) } +} + +pragma[nomagic] +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { t1.getASourceSupertype+() = t2 } + pragma[noinline] DataFlowType getNodeType(Node n) { result = getErasedRepr(n.getTypeBound()) or - result = FlowSummaryImpl::Private::summaryNodeType(n) + result = FlowSummaryImpl::Private::summaryNodeType(n.(FlowSummaryNode).getSummaryNode()) } /** Gets a string representation of a type returned by `getErasedRepr`. */ @@ -232,6 +242,12 @@ class CastNode extends ExprNode { CastNode() { this.getExpr() instanceof CastingExpr } } +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { none() } + private newtype TDataFlowCallable = TSrcCallable(Callable c) or TSummarizedCallable(SummarizedCallable c) or @@ -259,11 +275,9 @@ class DataFlowCallable extends TDataFlowCallable { class DataFlowExpr = Expr; -class DataFlowType = RefType; - private newtype TDataFlowCall = TCall(Call c) or - TSummaryCall(SummarizedCallable c, Node receiver) { + TSummaryCall(SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } @@ -313,12 +327,12 @@ class SrcCall extends DataFlowCall, TCall { /** A synthesized call inside a `SummarizedCallable`. */ class SummaryCall extends DataFlowCall, TSummaryCall { private SummarizedCallable c; - private Node receiver; + private FlowSummaryImpl::Private::SummaryNode receiver; SummaryCall() { this = TSummaryCall(c, receiver) } /** Gets the data flow node that this call targets. */ - Node getReceiver() { result = receiver } + FlowSummaryImpl::Private::SummaryNode getReceiver() { result = receiver } override DataFlowCallable getEnclosingCallable() { result.asSummarizedCallable() = c } @@ -378,10 +392,7 @@ predicate forceHighPrecision(Content c) { } /** Holds if `n` should be hidden from path explanations. */ -predicate nodeIsHidden(Node n) { - n instanceof SummaryNode or - n instanceof SummaryParameterNode -} +predicate nodeIsHidden(Node n) { n instanceof FlowSummaryNode } class LambdaCallKind = Method; // the "apply" method in the functional interface @@ -399,7 +410,7 @@ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) /** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { - receiver = call.(SummaryCall).getReceiver() and + receiver.(FlowSummaryNode).getSummaryNode() = call.(SummaryCall).getReceiver() and getNodeDataFlowType(receiver) .getSourceDeclaration() .(FunctionalInterface) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index ff064cc8405..29758d4b972 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -183,7 +183,8 @@ private predicate simpleLocalFlowStep0(Node node1, Node node2) { node1.(ArgumentNode).argumentOf(any(DataFlowCall c | c.asCall() = ma), argNo) ) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(node1, node2, true) + FlowSummaryImpl::Private::Steps::summaryLocalStep(node1.(FlowSummaryNode).getSummaryNode(), + node2.(FlowSummaryNode).getSummaryNode(), true) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index e6379f6a170..7977e18120f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -23,29 +23,30 @@ module Public { * content type, or a return kind. */ class SummaryComponent extends TSummaryComponent { - /** Gets a textual representation of this summary component. */ - string toString() { - exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) - or - exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) - or - exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + /** Gets a textual representation of this component used for MaD models. */ + string getMadRepresentation() { + result = getMadRepresentationSpecific(this) or exists(ArgumentPosition pos | - this = TParameterSummaryComponent(pos) and result = "parameter " + pos + this = TParameterSummaryComponent(pos) and + result = "Parameter[" + getArgumentPosition(pos) + "]" ) or exists(ParameterPosition pos | - this = TArgumentSummaryComponent(pos) and result = "argument " + pos + this = TArgumentSummaryComponent(pos) and + result = "Argument[" + getParameterPosition(pos) + "]" ) or - exists(ReturnKind rk | this = TReturnSummaryComponent(rk) and result = "return (" + rk + ")") - or - exists(SummaryComponent::SyntheticGlobal sg | - this = TSyntheticGlobalSummaryComponent(sg) and - result = "synthetic global (" + sg + ")" + exists(string synthetic | + this = TSyntheticGlobalSummaryComponent(synthetic) and + result = "SyntheticGlobal[" + synthetic + "]" ) + or + this = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" } + + /** Gets a textual representation of this summary component. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing summary components. */ @@ -110,7 +111,6 @@ module Public { } /** Gets the stack obtained by dropping the first `i` elements, if any. */ - pragma[assume_small_delta] SummaryComponentStack drop(int i) { i = 0 and result = this or @@ -125,19 +125,22 @@ module Public { this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() } - /** Gets a textual representation of this stack. */ - string toString() { + /** Gets a textual representation of this stack used for MaD models. */ + string getMadRepresentation() { exists(SummaryComponent head, SummaryComponentStack tail | head = this.head() and tail = this.tail() and - result = tail + "." + head + result = tail.getMadRepresentation() + "." + head.getMadRepresentation() ) or exists(SummaryComponent c | this = TSingletonSummaryComponentStack(c) and - result = c.toString() + result = c.getMadRepresentation() ) } + + /** Gets a textual representation of this stack. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing stacks of summary components. */ @@ -166,37 +169,6 @@ module Public { SummaryComponentStack return(ReturnKind rk) { result = singleton(SummaryComponent::return(rk)) } } - /** Gets a textual representation of this component used for flow summaries. */ - private string getComponent(SummaryComponent sc) { - result = getComponentSpecific(sc) - or - exists(ArgumentPosition pos | - sc = TParameterSummaryComponent(pos) and - result = "Parameter[" + getArgumentPosition(pos) + "]" - ) - or - exists(ParameterPosition pos | - sc = TArgumentSummaryComponent(pos) and - result = "Argument[" + getParameterPosition(pos) + "]" - ) - or - sc = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" - } - - /** Gets a textual representation of this stack used for flow summaries. */ - string getComponentStack(SummaryComponentStack stack) { - exists(SummaryComponent head, SummaryComponentStack tail | - head = stack.head() and - tail = stack.tail() and - result = getComponentStack(tail) + "." + getComponent(head) - ) - or - exists(SummaryComponent c | - stack = TSingletonSummaryComponentStack(c) and - result = getComponent(c) - ) - } - /** * A class that exists for QL technical reasons only (the IPA type used * to represent component stacks needs to be bounded). @@ -505,6 +477,9 @@ module Private { or // Add the post-update node corresponding to the requested argument node outputState(c, s) and isCallbackParameter(s) + or + // Add the parameter node for parameter side-effects + outputState(c, s) and s = SummaryComponentStack::argument(_) } private newtype TSummaryNodeState = @@ -530,7 +505,7 @@ module Private { * this state represents that the components in `s` _remain to be written_ to * the output. */ - class SummaryNodeState extends TSummaryNodeState { + private class SummaryNodeState extends TSummaryNodeState { /** Holds if this state is a valid input state for `c`. */ pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { @@ -559,6 +534,42 @@ module Private { } } + private newtype TSummaryNode = + TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { + summaryNodeRange(c, state) + } or + TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { + summaryParameterNodeRange(c, pos) + } + + abstract class SummaryNode extends TSummaryNode { + abstract string toString(); + + abstract SummarizedCallable getSummarizedCallable(); + } + + private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { + private SummarizedCallable c; + private SummaryNodeState state; + + SummaryInternalNode() { this = TSummaryInternalNode(c, state) } + + override string toString() { result = "[summary] " + state + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + + private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { + private SummarizedCallable c; + private ParameterPosition pos; + + SummaryParamNode() { this = TSummaryParameterNode(c, pos) } + + override string toString() { result = "[summary param] " + pos + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + /** * Holds if `state` represents having read from a parameter at position * `pos` in `c`. In this case we are not synthesizing a data-flow node, @@ -574,7 +585,7 @@ module Private { * Holds if a synthesized summary node is needed for the state `state` in summarized * callable `c`. */ - predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { state.isInputState(c, _) and not parameterReadState(c, state, _) or @@ -582,22 +593,22 @@ module Private { } pragma[noinline] - private Node summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isInputState(c, s) | - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) or exists(ParameterPosition pos | parameterReadState(c, state, pos) and - result.(ParamNode).isParameterOf(inject(c), pos) + result = TSummaryParameterNode(c, pos) ) ) } pragma[noinline] - private Node summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isOutputState(c, s) and - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) ) } @@ -605,12 +616,14 @@ module Private { * Holds if a write targets `post`, which is a post-update node for a * parameter at position `pos` in `c`. */ - private predicate isParameterPostUpdate(Node post, SummarizedCallable c, ParameterPosition pos) { + private predicate isParameterPostUpdate( + SummaryNode post, SummarizedCallable c, ParameterPosition pos + ) { post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) } /** Holds if a parameter node at position `pos` is required for `c`. */ - predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { parameterReadState(c, _, pos) or // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context @@ -618,7 +631,7 @@ module Private { } private predicate callbackOutput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ReturnKind rk + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and @@ -626,7 +639,7 @@ module Private { } private predicate callbackInput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ArgumentPosition pos + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and @@ -634,7 +647,7 @@ module Private { } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ - predicate summaryCallbackRange(SummarizedCallable c, Node receiver) { + predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { callbackOutput(c, _, receiver, _) or callbackInput(c, _, receiver, _) @@ -647,10 +660,10 @@ module Private { * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and * `getCallbackReturnType()`. */ - DataFlowType summaryNodeType(Node n) { - exists(Node pre | + DataFlowType summaryNodeType(SummaryNode n) { + exists(SummaryNode pre | summaryPostUpdateNode(n, pre) and - result = getNodeType(pre) + result = summaryNodeType(pre) ) or exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | @@ -662,12 +675,12 @@ module Private { ) or head = TWithoutContentSummaryComponent(_) and - result = getNodeType(summaryNodeInputState(c, s.tail())) + result = summaryNodeType(summaryNodeInputState(c, s.tail())) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = - getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), rk) ) or @@ -675,6 +688,11 @@ module Private { head = TSyntheticGlobalSummaryComponent(sg) and result = getSyntheticGlobalType(sg) ) + or + exists(ParameterPosition pos | + head = TArgumentSummaryComponent(pos) and + result = getParameterType(c, pos) + ) ) or n = summaryNodeOutputState(c, s) and @@ -691,7 +709,7 @@ module Private { or exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = - getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), pos) ) or @@ -703,9 +721,14 @@ module Private { ) } + /** Holds if summary node `p` is a parameter with position `pos`. */ + predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { + p = TSummaryParameterNode(_, pos) + } + /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ - predicate summaryOutNode(DataFlowCall c, Node out, ReturnKind rk) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryOutNode(DataFlowCall c, SummaryNode out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackOutput(callable, s, receiver, rk) and out = summaryNodeInputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -713,8 +736,8 @@ module Private { } /** Holds if summary node `arg` is at position `pos` in the call `c`. */ - predicate summaryArgumentNode(DataFlowCall c, Node arg, ArgumentPosition pos) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryArgumentNode(DataFlowCall c, SummaryNode arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackInput(callable, s, receiver, pos) and arg = summaryNodeOutputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -722,10 +745,10 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, Node pre) { + predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and - pre.(ParamNode).isParameterOf(inject(c), pos) + pre = TSummaryParameterNode(c, pos) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -736,7 +759,7 @@ module Private { } /** Holds if summary node `ret` is a return node of kind `rk`. */ - predicate summaryReturnNode(Node ret, ReturnKind rk) { + predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { exists(SummaryComponentStack s | ret = summaryNodeOutputState(_, s) and s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) @@ -748,7 +771,9 @@ module Private { * node, and back out to `p`. */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { - exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(inject(c), ppos) | + exists(SummarizedCallable c, ParameterPosition ppos | + p.isParameterOf(inject(c), pragma[only_bind_into](ppos)) + | exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -763,7 +788,7 @@ module Private { * Holds if there is a local step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryLocalStep(Node pred, Node succ, boolean preservesValue) { + predicate summaryLocalStep(SummaryNode pred, SummaryNode succ, boolean preservesValue) { exists( SummarizedCallable c, SummaryComponentStack inputContents, SummaryComponentStack outputContents @@ -789,7 +814,7 @@ module Private { * Holds if there is a read step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryReadStep(Node pred, ContentSet c, Node succ) { + predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and @@ -801,7 +826,7 @@ module Private { * Holds if there is a store step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { + predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and succ = summaryNodeOutputState(sc, s.tail()) and @@ -813,7 +838,7 @@ module Private { * Holds if there is a jump step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryJumpStep(Node pred, Node succ) { + predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { exists(SummaryComponentStack s | s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and pred = summaryNodeOutputState(_, s) and @@ -840,9 +865,9 @@ module Private { * `a` on line 2 to the post-update node for `a` on that line (via an intermediate * node where field `b` is cleared). */ - predicate summaryClearsContent(Node n, ContentSet c) { + predicate summaryClearsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withoutContent(c) ) @@ -852,9 +877,9 @@ module Private { * Holds if the value that is being tracked is expected to be stored inside * content `c` at `n`. */ - predicate summaryExpectsContent(Node n, ContentSet c) { + predicate summaryExpectsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withContent(c) ) @@ -862,17 +887,17 @@ module Private { pragma[noinline] private predicate viableParam( - DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p ) { exists(DataFlowCallable c | c = inject(sc) and - p.isParameterOf(c, ppos) and + p = TSummaryParameterNode(sc, ppos) and c = viableCallable(call) ) } pragma[nomagic] - private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { + private SummaryParamNode summaryArgParam(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { exists(ParameterPosition ppos | argumentPositionMatch(call, arg, ppos) and viableParam(call, sc, ppos, result) @@ -884,12 +909,12 @@ module Private { * local steps. `clearsOrExpects` records whether any node on the path from `p` to * `n` either clears or expects contents. */ - private predicate paramReachesLocal(ParamNode p, Node n, boolean clearsOrExpects) { + private predicate paramReachesLocal(SummaryParamNode p, SummaryNode n, boolean clearsOrExpects) { viableParam(_, _, _, p) and n = p and clearsOrExpects = false or - exists(Node mid, boolean clearsOrExpectsMid | + exists(SummaryNode mid, boolean clearsOrExpectsMid | paramReachesLocal(p, mid, clearsOrExpectsMid) and summaryLocalStep(mid, n, true) and if @@ -909,21 +934,33 @@ module Private { */ pragma[nomagic] predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { - exists(ParamNode p, ParameterPosition ppos, Node ret | + exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | paramReachesLocal(p, ret, true) and - p = summaryArgParam0(_, arg, sc) and - p.isParameterOf(_, pragma[only_bind_into](ppos)) and + p = summaryArgParam(_, arg, sc) and + p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) ) } + pragma[nomagic] + private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { + summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) + or + exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | + paramReachesLocal(p, pre, _) and + summaryPostUpdateNode(ret, pre) and + p = TSummaryParameterNode(_, pos) and + rk.(ParamUpdateReturnKind).getPosition() = pos + ) + } + bindingset[ret] - private ParamNode summaryArgParam( - ArgNode arg, ReturnNodeExt ret, OutNodeExt out, SummarizedCallable sc + private SummaryParamNode summaryArgParamRetOut( + ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc ) { exists(DataFlowCall call, ReturnKindExt rk | - result = summaryArgParam0(call, arg, sc) and - ret.getKind() = pragma[only_bind_into](rk) and + result = summaryArgParam(call, arg, sc) and + summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and out = pragma[only_bind_into](rk).getAnOutNode(call) ) } @@ -936,9 +973,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnKind rk, ReturnNode ret, DataFlowCall call | - summaryLocalStep(summaryArgParam0(call, arg, sc), ret, true) and - ret.getKind() = pragma[only_bind_into](rk) and + exists(ReturnKind rk, SummaryNode ret, DataFlowCall call | + summaryLocalStep(summaryArgParam(call, arg, sc), ret, true) and + summaryReturnNode(ret, pragma[only_bind_into](rk)) and out = getAnOutNode(call, pragma[only_bind_into](rk)) ) } @@ -951,7 +988,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnNodeExt ret | summaryLocalStep(summaryArgParam(arg, ret, out, sc), ret, false)) + exists(SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), ret, false) + ) } /** @@ -962,8 +1001,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryReadStep(summaryArgParam(arg, ret, out, sc), c, mid) and + exists(SummaryNode mid, SummaryNode ret | + summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and summaryLocalStep(mid, ret, _) ) } @@ -976,8 +1015,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, ret, out, sc), mid, _) and + exists(SummaryNode mid, SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), mid, _) and summaryStoreStep(mid, c, ret) ) } @@ -1310,8 +1349,8 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() // Callable information - + getComponentStack(input) + ";" // input - + getComponentStack(output) + ";" // output + + input.getMadRepresentation() + ";" // input + + output.getMadRepresentation() + ";" // output + renderKind(preservesValue) + ";" // kind + renderProvenance(c) // provenance ) @@ -1344,11 +1383,11 @@ module Private { } private newtype TNodeOrCall = - MkNode(Node n) { + MkNode(SummaryNode n) { exists(RelevantSummarizedCallable c | - n = summaryNode(c, _) + n = TSummaryInternalNode(c, _) or - n.(ParamNode).isParameterOf(inject(c), _) + n = TSummaryParameterNode(c, _) ) } or MkCall(DataFlowCall call) { @@ -1357,7 +1396,7 @@ module Private { } private class NodeOrCall extends TNodeOrCall { - Node asNode() { this = MkNode(result) } + SummaryNode asNode() { this = MkNode(result) } DataFlowCall asCall() { this = MkCall(result) } @@ -1377,9 +1416,11 @@ module Private { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - or - this.asCall().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll index 1a0e06553d4..d9782c2eecf 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImplSpecific.qll @@ -26,15 +26,17 @@ DataFlowCallable inject(SummarizedCallable c) { result.asSummarizedCallable() = /** Gets the parameter position of the instance parameter. */ ArgumentPosition callbackSelfParameterPosition() { result = -1 } -/** Gets the synthesized summary data-flow node for the given values. */ -Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = getSummaryNode(c, state) } - /** Gets the synthesized data-flow call for `receiver`. */ -SummaryCall summaryDataFlowCall(Node receiver) { result.getReceiver() = receiver } +SummaryCall summaryDataFlowCall(SummaryNode receiver) { result.getReceiver() = receiver } /** Gets the type of content `c`. */ DataFlowType getContentType(Content c) { result = c.getType() } +/** Gets the type of the parameter at the given position. */ +DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos) { + result = getErasedRepr(c.getParameterType(pos)) +} + /** Gets the return type of kind `rk` for callable `c`. */ DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { result = getErasedRepr(c.getReturnType()) and @@ -191,8 +193,8 @@ private string getContentSpecific(Content c) { c instanceof MapValueContent and result = "MapValue" } -/** Gets the textual representation of the content in the format used for flow summaries. */ -string getComponentSpecific(SummaryComponent sc) { +/** Gets the textual representation of the content in the format used for MaD models. */ +string getMadRepresentationSpecific(SummaryComponent sc) { exists(Content c | sc = TContentSummaryComponent(c) and result = getContentSpecific(c)) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index af8f2273cbe..c992f92ee8a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -86,6 +86,7 @@ module LocalTaintFlow { cached private module Cached { private import DataFlowImplCommon as DataFlowImplCommon + private import DataFlowPrivate as DataFlowPrivate cached predicate forceCachingInSameStage() { DataFlowImplCommon::forceCachingInSameStage() } @@ -136,7 +137,8 @@ private module Cached { ) ) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(src, sink, false) + FlowSummaryImpl::Private::Steps::summaryLocalStep(src.(DataFlowPrivate::FlowSummaryNode) + .getSummaryNode(), sink.(DataFlowPrivate::FlowSummaryNode).getSummaryNode(), false) } /** @@ -615,7 +617,6 @@ private MethodAccess callReturningSameType(Expr ref) { result.getMethod().getReturnType() = ref.getType() } -pragma[assume_small_delta] private SrcRefType entrypointType() { exists(RemoteFlowSource s, RefType t | s instanceof DataFlow::ExplicitParameterNode and diff --git a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll index c6419f4c26b..e3eb298dd13 100644 --- a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll @@ -31,7 +31,6 @@ private Callable dispatchCand(Call c) { /** * Holds if `t` and all its enclosing types are public. */ -pragma[assume_small_delta] private predicate veryPublic(RefType t) { t.isPublic() and ( diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index d4c0d7e5ab5..14ea6e81718 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -206,7 +206,6 @@ private predicate relevantNodeBack(ObjNode n) { exists(ObjNode mid | objStep(n, mid) and relevantNodeBack(mid)) } -pragma[assume_small_delta] private predicate relevantNode(ObjNode n) { source(_, n) and relevantNodeBack(n) or diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 5c20af2f457..54b41f28a08 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -53,7 +53,6 @@ private predicate hasPathAnnotation(Annotatable annotatable) { * A method which is annotated with one or more JaxRS resource type annotations e.g. `@GET`, `@POST` etc. */ class JaxRsResourceMethod extends Method { - pragma[assume_small_delta] JaxRsResourceMethod() { exists(AnnotationType a | a = this.getAnAnnotation().getType() and @@ -92,7 +91,6 @@ class JaxRsResourceMethod extends Method { * This class contains resource methods, which are executed in response to requests. */ class JaxRsResourceClass extends Class { - pragma[assume_small_delta] JaxRsResourceClass() { // A root resource class has a @Path annotation on the class. hasPathAnnotation(this) diff --git a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll index 7cff44a69ff..922f90bccb6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll @@ -12,7 +12,6 @@ class RemoteCallableMethod extends Method { RemoteCallableMethod() { remoteCallableMethod(this) } } -pragma[assume_small_delta] private predicate remoteCallableMethod(Method method) { method.getDeclaringType().getASupertype() instanceof TypeRemote or diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Exec.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Exec.qll deleted file mode 100644 index d6876bfae70..00000000000 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Exec.qll +++ /dev/null @@ -1,29 +0,0 @@ -/** Definitions related to the Apache Commons Exec library. */ - -import semmle.code.java.Type -import semmle.code.java.security.ExternalProcess - -/** The class `org.apache.commons.exec.CommandLine`. */ -private class TypeCommandLine extends Class { - TypeCommandLine() { this.hasQualifiedName("org.apache.commons.exec", "CommandLine") } -} - -/** The `parse()` method of the class `org.apache.commons.exec.CommandLine`. */ -private class MethodCommandLineParse extends Method, ExecCallable { - MethodCommandLineParse() { - this.getDeclaringType() instanceof TypeCommandLine and - this.hasName("parse") - } - - override int getAnExecutedArgument() { result = 0 } -} - -/** The `addArguments()` method of the class `org.apache.commons.exec.CommandLine`. */ -private class MethodCommandLineAddArguments extends Method, ExecCallable { - MethodCommandLineAddArguments() { - this.getDeclaringType() instanceof TypeCommandLine and - this.hasName("addArguments") - } - - override int getAnExecutedArgument() { result = 0 } -} diff --git a/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll index f7de80daaf4..8a286c93a16 100644 --- a/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll @@ -45,7 +45,6 @@ private class FieldReferencedGsonDeserializableType extends GsonDeserializableTy /** A field that may be deserialized using the Gson JSON framework. */ private class GsonDeserializableField extends DeserializableField { - pragma[assume_small_delta] GsonDeserializableField() { exists(GsonDeserializableType superType | superType = this.getDeclaringType().getAnAncestor() and diff --git a/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll new file mode 100644 index 00000000000..c283c23a046 --- /dev/null +++ b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll @@ -0,0 +1,38 @@ +/** Provides classes and predicates related to the Hudson framework. */ + +import java +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.frameworks.stapler.Stapler +private import semmle.code.java.security.XSS + +/** A method declared in a subtype of `hudson.model.Descriptor` that returns an `HttpResponse`. */ +class HudsonWebMethod extends Method { + HudsonWebMethod() { + this.getReturnType().(RefType).getASourceSupertype*() instanceof HttpResponse and + this.getDeclaringType().getASourceSupertype*().hasQualifiedName("hudson.model", "Descriptor") + } +} + +private class FilePathRead extends LocalUserInput { + FilePathRead() { + this.asExpr() + .(MethodAccess) + .getMethod() + .hasQualifiedName("hudson", "FilePath", + [ + "newInputStreamDenyingSymlinkAsNeeded", "openInputStream", "read", "readFromOffset", + "readToString" + ]) + } +} + +private class HudsonUtilXssSanitizer extends XssSanitizer { + HudsonUtilXssSanitizer() { + this.asExpr() + .(MethodAccess) + .getMethod() + // Not including xmlEscape because it only accounts for >, <, and &. + // It does not account for ", or ', which makes it an incomplete XSS sanitizer. + .hasQualifiedName("hudson", "Util", "escape") + } +} diff --git a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll index f1395431a3c..4f857afb660 100644 --- a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll @@ -146,7 +146,6 @@ class JacksonSerializableField extends SerializableField { /** A field that may be deserialized using the Jackson JSON framework. */ class JacksonDeserializableField extends DeserializableField { - pragma[assume_small_delta] JacksonDeserializableField() { exists(JacksonDeserializableType superType | superType = this.getDeclaringType().getAnAncestor() and diff --git a/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll b/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll new file mode 100644 index 00000000000..f17090ed307 --- /dev/null +++ b/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll @@ -0,0 +1,124 @@ +/** Provides classes and predicates related to the Stapler framework. */ + +import java +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.FlowSources +private import semmle.code.java.dataflow.FlowSteps +private import semmle.code.java.dataflow.TypeFlow +private import semmle.code.java.frameworks.hudson.Hudson +private import semmle.code.java.frameworks.JavaxAnnotations + +/** + * A callable annotated with a Stapler `DataBound` annotation, + * or that has the `@stapler-constructor` Javadoc annotation. + */ +class DataBoundAnnotated extends Callable { + DataBoundAnnotated() { + exists(Annotation an | + an.getType() + .hasQualifiedName("org.kohsuke.stapler", ["DataBoundConstructor", "DataBoundSetter"]) + | + this = an.getAnnotatedElement() + ) + or + exists(Javadoc doc | doc.getAChild().getText().matches("%@stapler-constructor%") | + doc.getCommentedElement() = this + ) + } +} + +/** The interface `org.kohsuke.stapler.HttpResponse`. */ +class HttpResponse extends Interface { + HttpResponse() { this.hasQualifiedName("org.kohsuke.stapler", "HttpResponse") } +} + +/** + * A remote flow source for parameters annotated with an annotation + * that is itself annotated with `InjectedParameter`. + * + * Such parameters are populated with user-provided data by Stapler. + */ +private class InjectedParameterSource extends RemoteFlowSource { + InjectedParameterSource() { + this.asParameter().getAnAnnotation().getType() instanceof InjectedParameterAnnotatedType + } + + override string getSourceType() { result = "Stapler injected parameter" } +} + +/** + * A dataflow step from the `HttpResponse` return value of a `HudsonWebMethod` + * to the instance parameter of the `generateResponse` method of the appropriate subtype of `HttpResponse`. + * + * This models the rendering process of an `HttpResponse` by Stapler. + */ +private class HttpResponseGetDescriptionStep extends AdditionalValueStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists(ReturnStmt s, GenerateResponseMethod m | + s.getEnclosingCallable() instanceof HudsonWebMethod and + boundOrStaticType(s.getResult(), m.getDeclaringType().getADescendant()) + | + n1.asExpr() = s.getResult() and + n2.(DataFlow::InstanceParameterNode).getCallable() = m + ) + } +} + +/** + * A dataflow step from the post-update node of an instance access in a `DataBoundAnnotated` method + * to the instance parameter of a `PostConstruct` method of the same type. + * + * This models the construction process of a `DataBound` object in Stapler. + */ +private class PostConstructDataBoundAdditionalStep extends AdditionalValueStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists(PostConstructDataBoundMethod postConstruct, DataBoundAnnotated input | + postConstruct.getDeclaringType() = input.getDeclaringType() + | + n1.(DataFlow::PostUpdateNode) + .getPreUpdateNode() + .(DataFlow::InstanceAccessNode) + .getEnclosingCallable() = input and + n2.(DataFlow::InstanceParameterNode).getCallable() = postConstruct + ) + } +} + +/** An annotation type annotated with the `InjectedParameter` annotation. */ +private class InjectedParameterAnnotatedType extends AnnotationType { + InjectedParameterAnnotatedType() { + this.getAnAnnotation().getType().hasQualifiedName("org.kohsuke.stapler", "InjectedParameter") + } +} + +/** The `generateResponse` method of `org.kohsuke.stapler.HttpResponse` or its subtypes. */ +private class GenerateResponseMethod extends Method { + GenerateResponseMethod() { + this.getDeclaringType().getASourceSupertype*() instanceof HttpResponse and + this.hasName("generateResponse") + } +} + +/** Holds if `t` is the static type of `e`, or an upper bound of the runtime type of `e`. */ +private predicate boundOrStaticType(Expr e, RefType t) { + exprTypeFlow(e, t, false) + or + t = e.getType() +} + +/** + * A method called after the construction of a `DataBound` object. + * + * That is, either the `bindResolve` method of a subtype of `org.kohsuke.stapler.DataBoundResolvable`, + * or a method annotated with `javax.annotation.PostConstruct`. + */ +private class PostConstructDataBoundMethod extends Method { + PostConstructDataBoundMethod() { + this.getDeclaringType() + .getASourceSupertype*() + .hasQualifiedName("org.kohsuke.stapler", "DataBoundResolvable") and + this.hasName("bindResolve") + or + this.getAnAnnotation() instanceof PostConstructAnnotation + } +} diff --git a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll index b6e3f5b188a..c0d09a9eeab 100644 --- a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll @@ -10,8 +10,8 @@ import java private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.ExternalFlow -private import semmle.code.java.security.ExternalProcess private import semmle.code.java.security.CommandArguments +private import semmle.code.java.security.ExternalProcess /** A sink for command injection vulnerabilities. */ abstract class CommandInjectionSink extends DataFlow::Node { } @@ -33,9 +33,7 @@ class CommandInjectionAdditionalTaintStep extends Unit { } private class DefaultCommandInjectionSink extends CommandInjectionSink { - DefaultCommandInjectionSink() { - this.asExpr() instanceof ArgumentToExec or sinkNode(this, "command-injection") - } + DefaultCommandInjectionSink() { sinkNode(this, "command-injection") } } private class DefaultCommandInjectionSanitizer extends CommandInjectionSanitizer { @@ -100,7 +98,7 @@ predicate execIsTainted( RemoteUserInputToArgumentToExecFlow::PathNode sink, Expr execArg ) { RemoteUserInputToArgumentToExecFlow::flowPath(source, sink) and - sink.getNode().asExpr() = execArg + argumentToExec(execArg, sink.getNode()) } /** @@ -112,7 +110,7 @@ predicate execIsTainted( */ deprecated predicate execTainted(DataFlow::PathNode source, DataFlow::PathNode sink, Expr execArg) { exists(RemoteUserInputToArgumentToExecFlowConfig conf | - conf.hasFlowPath(source, sink) and sink.getNode().asExpr() = execArg + conf.hasFlowPath(source, sink) and argumentToExec(execArg, sink.getNode()) ) } diff --git a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll index 9a061c7a419..385d2f6c548 100644 --- a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll +++ b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll @@ -1,16 +1,13 @@ /** Definitions related to external processes. */ import semmle.code.java.Member - -private module Instances { - private import semmle.code.java.JDK - private import semmle.code.java.frameworks.apache.Exec -} +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.security.CommandLineQuery /** - * A callable that executes a command. + * DEPRECATED: A callable that executes a command. */ -abstract class ExecCallable extends Callable { +abstract deprecated class ExecCallable extends Callable { /** * Gets the index of an argument that will be part of the command that is executed. */ @@ -23,13 +20,19 @@ abstract class ExecCallable extends Callable { * to be executed. */ class ArgumentToExec extends Expr { - ArgumentToExec() { - exists(Call execCall, ExecCallable execCallable, int i | - execCall.getArgument(pragma[only_bind_into](i)) = this and - execCallable = execCall.getCallee() and - i = execCallable.getAnExecutedArgument() - ) - } + ArgumentToExec() { argumentToExec(this, _) } +} + +/** + * Holds if `e` is an expression used as an argument to a call that executes an external command. + * For calls to varargs method calls, this only includes the first argument, which will be the command + * to be executed. + */ +predicate argumentToExec(Expr e, CommandInjectionSink s) { + s.asExpr() = e + or + e.(Argument).isNthVararg(0) and + s.(DataFlow::ImplicitVarargsArray).getCall() = e.(Argument).getCall() } /** diff --git a/java/ql/lib/semmle/code/java/security/LogInjection.qll b/java/ql/lib/semmle/code/java/security/LogInjection.qll index 2314d807a60..7fb85f6d8f1 100644 --- a/java/ql/lib/semmle/code/java/security/LogInjection.qll +++ b/java/ql/lib/semmle/code/java/security/LogInjection.qll @@ -46,16 +46,33 @@ private class LineBreaksLogInjectionSanitizer extends LogInjectionSanitizer { } } +private predicate stringMethodAccess( + MethodAccess ma, CompileTimeConstantExpr arg0, CompileTimeConstantExpr arg1 +) { + ma.getMethod().getDeclaringType() instanceof TypeString and + arg0 = ma.getArgument(0) and + arg1 = ma.getArgument(1) +} + +private predicate stringMethodArgument(CompileTimeConstantExpr arg) { + stringMethodAccess(_, arg, _) or stringMethodAccess(_, _, arg) +} + +bindingset[match] +pragma[inline_late] +private predicate stringMethodArgumentValueMatches(CompileTimeConstantExpr const, string match) { + stringMethodArgument(const) and + const.getStringValue().matches(match) +} + /** * Holds if the return value of `ma` is sanitized against log injection attacks * by removing line breaks from it. */ private predicate logInjectionSanitizer(MethodAccess ma) { exists(CompileTimeConstantExpr target, CompileTimeConstantExpr replacement | - ma.getMethod().getDeclaringType() instanceof TypeString and - target = ma.getArgument(0) and - replacement = ma.getArgument(1) and - not replacement.getStringValue().matches(["%\n%", "%\r%"]) + stringMethodAccess(ma, target, replacement) and + not stringMethodArgumentValueMatches(replacement, ["%\n%", "%\r%"]) | ma.getMethod().hasName("replace") and not replacement.getIntValue() = [10, 13] and @@ -68,7 +85,7 @@ private predicate logInjectionSanitizer(MethodAccess ma) { ( // Replace anything not in an allow list target.getStringValue().matches("[^%]") and - not target.getStringValue().matches("%" + ["\n", "\r", "\\n", "\\r", "\\R"] + "%") + not stringMethodArgumentValueMatches(target, "%" + ["\n", "\r", "\\n", "\\r", "\\R"] + "%") or // Replace line breaks target.getStringValue() = ["\n", "\r", "\\n", "\\r", "\\R"] diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index 984c9f6fcaa..eb40a045c1f 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -5,7 +5,6 @@ private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.SensitiveActions import semmle.code.java.frameworks.android.Compose -import DataFlow /** A variable that may hold sensitive information, judging by its name. */ class CredentialExpr extends Expr { @@ -45,7 +44,7 @@ deprecated class SensitiveLoggerConfiguration extends TaintTracking::Configurati sanitizer.getType() instanceof TypeType } - override predicate isSanitizerIn(Node node) { this.isSource(node) } + override predicate isSanitizerIn(DataFlow::Node node) { this.isSource(node) } } /** A data-flow configuration for identifying potentially-sensitive data flowing to a log output. */ @@ -62,7 +61,7 @@ module SensitiveLoggerConfig implements DataFlow::ConfigSig { sanitizer.getType() instanceof TypeType } - predicate isBarrierIn(Node node) { isSource(node) } + predicate isBarrierIn(DataFlow::Node node) { isSource(node) } } module SensitiveLoggerFlow = TaintTracking::Global; diff --git a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll index 7e995e5cbaf..550b778d8db 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll @@ -28,6 +28,20 @@ private class ObjectInputStreamReadObjectMethod extends Method { } } +/** + * A type extending `ObjectInputStream` that makes it safe to deserialize untrusted data. + * + * * See https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/serialization/ValidatingObjectInputStream.html + * * See https://github.com/ikkisoft/SerialKiller + */ +private class SafeObjectInputStreamType extends RefType { + SafeObjectInputStreamType() { + this.getASourceSupertype*() + .hasQualifiedName("org.apache.commons.io.serialization", "ValidatingObjectInputStream") or + this.getASourceSupertype*().hasQualifiedName("org.nibblesec.tools", "SerialKiller") + } +} + private class XmlDecoderReadObjectMethod extends Method { XmlDecoderReadObjectMethod() { this.getDeclaringType().hasQualifiedName("java.beans", "XMLDecoder") and @@ -135,9 +149,7 @@ predicate unsafeDeserialization(MethodAccess ma, Expr sink) { sink = ma.getQualifier() and not exists(DataFlow::ExprNode node | node.getExpr() = sink and - node.getTypeBound() - .(RefType) - .hasQualifiedName("org.apache.commons.io.serialization", "ValidatingObjectInputStream") + node.getTypeBound() instanceof SafeObjectInputStreamType ) or m instanceof XmlDecoderReadObjectMethod and diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index bd968bd5fc3..163696e4489 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -6,6 +6,7 @@ import semmle.code.java.frameworks.android.WebView import semmle.code.java.frameworks.spring.SpringController import semmle.code.java.frameworks.spring.SpringHttp import semmle.code.java.frameworks.javaee.jsf.JSFRenderer +private import semmle.code.java.frameworks.hudson.Hudson import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 9107f8c044f..63dffc3382f 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* New models have been added for `org.apache.commons.lang`. +* The query `java/unsafe-deserialization` has been updated to take into account `SerialKiller`, a library used to prevent deserialization of arbitrary classes. + +### Bug Fixes + +* The query "Arbitrary file write during archive extraction ("Zip Slip")" (`java/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." + ## 0.6.4 No user-facing changes. diff --git a/java/ql/src/Security/CWE/CWE-022/ZipSlip.qhelp b/java/ql/src/Security/CWE/CWE-022/ZipSlip.qhelp index adea1b89c49..2caf0ccc8b0 100644 --- a/java/ql/src/Security/CWE/CWE-022/ZipSlip.qhelp +++ b/java/ql/src/Security/CWE/CWE-022/ZipSlip.qhelp @@ -3,17 +3,15 @@ "qhelp.dtd"> -

    Extracting files from a malicious zip archive (or another archive format) -without validating that the destination file path -is within the destination directory can cause files outside the destination directory to be -overwritten, due to the possible presence of directory traversal elements (..) in -archive paths.

    +

    Extracting files from a malicious zip file, or similar type of archive, +is at risk of directory traversal attacks if filenames from the archive are +not properly validated.

    Zip archives contain archive entries representing each file in the archive. These entries include a file path for the entry, but these file paths are not restricted and may contain unexpected special elements such as the directory traversal element (..). If these -file paths are used to determine an output file to write the contents of the archive item to, then -the file may be written to an unexpected location. This can result in sensitive information being +file paths are used to create a filesystem path, then a file operation may happen in an +unexpected location. This can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

    diff --git a/java/ql/src/Security/CWE/CWE-022/ZipSlip.ql b/java/ql/src/Security/CWE/CWE-022/ZipSlip.ql index 3488c97c057..0d165a73521 100644 --- a/java/ql/src/Security/CWE/CWE-022/ZipSlip.ql +++ b/java/ql/src/Security/CWE/CWE-022/ZipSlip.ql @@ -1,8 +1,8 @@ /** - * @name Arbitrary file write during archive extraction ("Zip Slip") - * @description Extracting files from a malicious archive without validating that the - * destination file path is within the destination directory can cause files outside - * the destination directory to be overwritten. + * @name Arbitrary file access during archive extraction ("Zip Slip") + * @description Extracting files from a malicious ZIP file, or similar type of archive, without + * validating that the destination file path is within the destination directory + * can allow an attacker to unexpectedly gain access to resources. * @kind path-problem * @id java/zipslip * @problem.severity error diff --git a/java/ql/src/Security/CWE/CWE-078/ExecTaintedLocal.ql b/java/ql/src/Security/CWE/CWE-078/ExecTaintedLocal.ql index 08c230cb43a..38b79c468cd 100644 --- a/java/ql/src/Security/CWE/CWE-078/ExecTaintedLocal.ql +++ b/java/ql/src/Security/CWE/CWE-078/ExecTaintedLocal.ql @@ -14,11 +14,14 @@ import java import semmle.code.java.security.CommandLineQuery +import semmle.code.java.security.ExternalProcess import LocalUserInputToArgumentToExecFlow::PathGraph from LocalUserInputToArgumentToExecFlow::PathNode source, - LocalUserInputToArgumentToExecFlow::PathNode sink -where LocalUserInputToArgumentToExecFlow::flowPath(source, sink) -select sink.getNode().asExpr(), source, sink, "This command line depends on a $@.", - source.getNode(), "user-provided value" + LocalUserInputToArgumentToExecFlow::PathNode sink, Expr e +where + LocalUserInputToArgumentToExecFlow::flowPath(source, sink) and + argumentToExec(e, sink.getNode()) +select e, source, sink, "This command line depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql b/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql index 68e3cc2faa7..d50f583bbfe 100644 --- a/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql +++ b/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql @@ -14,6 +14,7 @@ import java import semmle.code.java.security.CommandLineQuery +import semmle.code.java.security.ExternalProcess /** * Strings that are known to be sane by some simple local analysis. Such strings diff --git a/java/ql/src/Telemetry/AutomodelApplicationModeCharacteristics.qll b/java/ql/src/Telemetry/AutomodelApplicationModeCharacteristics.qll new file mode 100644 index 00000000000..51e786eebdc --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelApplicationModeCharacteristics.qll @@ -0,0 +1,444 @@ +/** + * For internal use only. + */ + +private import java +private import semmle.code.Location as Location +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.TaintTracking +private import semmle.code.java.security.PathCreation +private import semmle.code.java.dataflow.ExternalFlow as ExternalFlow +private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl +private import semmle.code.java.security.ExternalAPIs as ExternalAPIs +private import semmle.code.java.Expr as Expr +private import semmle.code.java.security.QueryInjection +private import semmle.code.java.security.RequestForgery +private import semmle.code.java.dataflow.internal.ModelExclusions as ModelExclusions +private import AutomodelJavaUtil as AutomodelJavaUtil +private import semmle.code.java.security.PathSanitizer as PathSanitizer +private import AutomodelSharedGetCallable as AutomodelSharedGetCallable +import AutomodelSharedCharacteristics as SharedCharacteristics +import AutomodelEndpointTypes as AutomodelEndpointTypes + +newtype JavaRelatedLocationType = CallContext() + +/** + * A class representing nodes that are arguments to calls. + */ +private class ArgumentNode extends DataFlow::Node { + ArgumentNode() { this.asExpr() = [any(Call c).getAnArgument(), any(Call c).getQualifier()] } +} + +/** + * A candidates implementation. + * + * Some important notes: + * - This mode is using arguments as endpoints. + * - We use the `CallContext` (the surrounding call expression) as related location. + */ +module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig { + // for documentation of the implementations here, see the QLDoc in the CandidateSig signature module. + class Endpoint = ArgumentNode; + + class EndpointType = AutomodelEndpointTypes::EndpointType; + + class NegativeEndpointType = AutomodelEndpointTypes::NegativeSinkType; + + class RelatedLocation = Location::Top; + + class RelatedLocationType = JavaRelatedLocationType; + + // Sanitizers are currently not modeled in MaD. TODO: check if this has large negative impact. + predicate isSanitizer(Endpoint e, EndpointType t) { + exists(t) and + ( + e.getType() instanceof BoxedType + or + e.getType() instanceof PrimitiveType + or + e.getType() instanceof NumberType + ) + or + t instanceof AutomodelEndpointTypes::PathInjectionSinkType and + e instanceof PathSanitizer::PathInjectionSanitizer + } + + RelatedLocation asLocation(Endpoint e) { result = e.asExpr() } + + predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; + + predicate isSink(Endpoint e, string kind) { + exists(string package, string type, string name, string signature, string ext, string input | + sinkSpec(e, package, type, name, signature, ext, input) and + ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, _) + ) + or + isCustomSink(e, kind) + } + + predicate isNeutral(Endpoint e) { + exists(string package, string type, string name, string signature | + sinkSpec(e, package, type, name, signature, _, _) and + ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) + ) + } + + additional predicate sinkSpec( + Endpoint e, string package, string type, string name, string signature, string ext, string input + ) { + ApplicationModeGetCallable::getCallable(e).hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(ApplicationModeGetCallable::getCallable(e)) and + ext = "" and + ( + exists(Call c, int argIdx | + e.asExpr() = c.getArgument(argIdx) and + input = AutomodelJavaUtil::getArgumentForIndex(argIdx) + ) + or + exists(Call c | + e.asExpr() = c.getQualifier() and input = AutomodelJavaUtil::getArgumentForIndex(-1) + ) + ) + } + + /** + * Gets the related location for the given endpoint. + * + * The only related location we model is the the call expression surrounding to + * which the endpoint is either argument or qualifier (known as the call context). + */ + RelatedLocation getRelatedLocation(Endpoint e, RelatedLocationType type) { + type = CallContext() and + result = any(Call c | e.asExpr() = [c.getAnArgument(), c.getQualifier()]) + } +} + +private class JavaCallable = Callable; + +private module ApplicationModeGetCallable implements AutomodelSharedGetCallable::GetCallableSig { + class Callable = JavaCallable; + + class Endpoint = ApplicationCandidatesImpl::Endpoint; + + /** + * Returns the API callable being modeled. + */ + Callable getCallable(Endpoint e) { + exists(Call c | + e.asExpr() = [c.getAnArgument(), c.getQualifier()] and + result = c.getCallee() + ) + } +} + +/** + * Contains endpoints that are defined in QL code rather than as a MaD model. Ideally this predicate + * should be empty. + */ +private predicate isCustomSink(Endpoint e, string kind) { + e.asExpr() instanceof ArgumentToExec and kind = "command injection" + or + e instanceof RequestForgerySink and kind = "request forgery" + or + e instanceof QueryInjectionSink and kind = "sql" +} + +module CharacteristicsImpl = + SharedCharacteristics::SharedCharacteristics; + +class EndpointCharacteristic = CharacteristicsImpl::EndpointCharacteristic; + +class Endpoint = ApplicationCandidatesImpl::Endpoint; + +/* + * Predicates that are used to surface prompt examples and candidates for classification with an ML model. + */ + +/** + * A MetadataExtractor that extracts metadata for application mode. + */ +class ApplicationModeMetadataExtractor extends string { + ApplicationModeMetadataExtractor() { this = "ApplicationModeMetadataExtractor" } + + predicate hasMetadata( + Endpoint e, string package, string type, string subtypes, string name, string signature, + string input + ) { + exists(Call call, Callable callable, int argIdx | + call.getCallee() = callable and + ( + e.asExpr() = call.getArgument(argIdx) + or + e.asExpr() = call.getQualifier() and argIdx = -1 + ) and + input = AutomodelJavaUtil::getArgumentForIndex(argIdx) and + package = callable.getDeclaringType().getPackage().getName() and + // we're using the erased types because the MaD convention is to not specify type parameters. + // Whether something is or isn't a sink doesn't usually depend on the type parameters. + type = callable.getDeclaringType().getErasure().(RefType).nestedName() and + subtypes = AutomodelJavaUtil::considerSubtypes(callable).toString() and + name = callable.getName() and + signature = ExternalFlow::paramsString(callable) + ) + } +} + +/* + * EndpointCharacteristic classes that are specific to Automodel for Java. + */ + +/** + * A negative characteristic that indicates that an is-style boolean method is unexploitable even if it is a sink. + * + * A sink is highly unlikely to be exploitable if its callable's name starts with `is` and the callable has a boolean return + * type (e.g. `isDirectory`). These kinds of calls normally do only checks, and appear before the proper call that does + * the dangerous/interesting thing, so we want the latter to be modeled as the sink. + * + * TODO: this might filter too much, it's possible that methods with more than one parameter contain interesting sinks + */ +private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { + UnexploitableIsCharacteristic() { this = "unexploitable (is-style boolean method)" } + + override predicate appliesToEndpoint(Endpoint e) { + not ApplicationCandidatesImpl::isSink(e, _) and + ApplicationModeGetCallable::getCallable(e).getName().matches("is%") and + ApplicationModeGetCallable::getCallable(e).getReturnType() instanceof BooleanType + } +} + +/** + * A negative characteristic that indicates that an existence-checking boolean method is unexploitable even if it is a + * sink. + * + * A sink is highly unlikely to be exploitable if its callable's name is `exists` or `notExists` and the callable has a + * boolean return type. These kinds of calls normally do only checks, and appear before the proper call that does the + * dangerous/interesting thing, so we want the latter to be modeled as the sink. + */ +private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { + UnexploitableExistsCharacteristic() { this = "unexploitable (existence-checking boolean method)" } + + override predicate appliesToEndpoint(Endpoint e) { + not ApplicationCandidatesImpl::isSink(e, _) and + exists(Callable callable | + callable = ApplicationModeGetCallable::getCallable(e) and + callable.getName().toLowerCase() = ["exists", "notexists"] and + callable.getReturnType() instanceof BooleanType + ) + } +} + +/** + * A negative characteristic that indicates that an endpoint is an argument to an exception, which is not a sink. + */ +private class ExceptionCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { + ExceptionCharacteristic() { this = "exception" } + + override predicate appliesToEndpoint(Endpoint e) { + ApplicationModeGetCallable::getCallable(e).getDeclaringType().getASupertype*() instanceof + TypeThrowable + } +} + +/** + * A negative characteristic that indicates that an endpoint is a MaD taint step. MaD modeled taint steps are global, + * so they are not sinks for any query. Non-MaD taint steps might be specific to a particular query, so we don't + * filter those out. + */ +private class IsMaDTaintStepCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { + IsMaDTaintStepCharacteristic() { this = "taint step" } + + override predicate appliesToEndpoint(Endpoint e) { + FlowSummaryImpl::Private::Steps::summaryThroughStepValue(e, _, _) or + FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(e, _, _) or + FlowSummaryImpl::Private::Steps::summaryGetterStep(e, _, _, _) or + FlowSummaryImpl::Private::Steps::summarySetterStep(e, _, _, _) + } +} + +/** + * A negative characteristic that filters out qualifiers that are classes (i.e. static calls). These + * are unlikely to have any non-trivial flow going into them. + * + * Technically, an accessed type _could_ come from outside of the source code, but there's not + * much likelihood of that being user-controlled. + */ +private class ClassQualifierCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { + ClassQualifierCharacteristic() { this = "class qualifier" } + + override predicate appliesToEndpoint(Endpoint e) { + exists(Call c | + e.asExpr() = c.getQualifier() and + c.getQualifier() instanceof TypeAccess + ) + } +} + +/** + * A call to a method that's known locally will not be considered as a candidate to model. + * + * The reason is that we would expect data/taint flow into the method implementation to uncover + * any sinks that are present there. + */ +private class ArgumentToLocalCall extends CharacteristicsImpl::UninterestingToModelCharacteristic { + ArgumentToLocalCall() { this = "argument to local call" } + + override predicate appliesToEndpoint(Endpoint e) { + ApplicationModeGetCallable::getCallable(e).fromSource() + } +} + +/** + * A Characteristic that marks endpoints as uninteresting to model, according to the Java ModelExclusions module. + */ +private class ExcludedFromModeling extends CharacteristicsImpl::UninterestingToModelCharacteristic { + ExcludedFromModeling() { this = "excluded from modeling" } + + override predicate appliesToEndpoint(Endpoint e) { + ModelExclusions::isUninterestingForModels(ApplicationModeGetCallable::getCallable(e)) + } +} + +/** + * A negative characteristic that filters out non-public methods. Non-public methods are not interesting to include in + * the standard Java modeling, because they cannot be called from outside the package. + */ +private class NonPublicMethodCharacteristic extends CharacteristicsImpl::UninterestingToModelCharacteristic +{ + NonPublicMethodCharacteristic() { this = "non-public method" } + + override predicate appliesToEndpoint(Endpoint e) { + not ApplicationModeGetCallable::getCallable(e).isPublic() + } +} + +/** + * A negative characteristic that indicates that an endpoint is a non-sink argument to a method whose sinks have already + * been modeled. + * + * WARNING: These endpoints should not be used as negative samples for training, because some sinks may have been missed + * when the method was modeled. Specifically, as we start using ATM to merge in new declarations, we can be less sure + * that a method with one argument modeled as a MaD sink has also had its remaining arguments manually reviewed. The + * ML model might have predicted argument 0 of some method to be a sink but not argument 1, when in fact argument 1 is + * also a sink. + */ +private class OtherArgumentToModeledMethodCharacteristic extends CharacteristicsImpl::LikelyNotASinkCharacteristic +{ + OtherArgumentToModeledMethodCharacteristic() { + this = "other argument to a method that has already been modeled" + } + + override predicate appliesToEndpoint(Endpoint e) { + not ApplicationCandidatesImpl::isSink(e, _) and + exists(DataFlow::Node otherSink | + ApplicationCandidatesImpl::isSink(otherSink, _) and + e.asExpr() = otherSink.asExpr().(Argument).getCall().getAnArgument() and + e != otherSink + ) + } +} + +/** + * A characteristic that marks functional expression as likely not sinks. + * + * These expressions may well _contain_ sinks, but rarely are sinks themselves. + */ +private class FunctionValueCharacteristic extends CharacteristicsImpl::LikelyNotASinkCharacteristic { + FunctionValueCharacteristic() { this = "function value" } + + override predicate appliesToEndpoint(Endpoint e) { e.asExpr() instanceof FunctionalExpr } +} + +/** + * A negative characteristic that indicates that an endpoint is not a `to` node for any known taint step. Such a node + * cannot be tainted, because taint can't flow into it. + * + * WARNING: These endpoints should not be used as negative samples for training, because they may include sinks for + * which our taint tracking modeling is incomplete. + */ +private class CannotBeTaintedCharacteristic extends CharacteristicsImpl::LikelyNotASinkCharacteristic +{ + CannotBeTaintedCharacteristic() { this = "cannot be tainted" } + + override predicate appliesToEndpoint(Endpoint e) { not this.isKnownOutNodeForStep(e) } + + /** + * Holds if the node `n` is known as the predecessor in a modeled flow step. + */ + private predicate isKnownOutNodeForStep(Endpoint e) { + e.asExpr() instanceof Call or // we just assume flow in that case + TaintTracking::localTaintStep(_, e) or + FlowSummaryImpl::Private::Steps::summaryThroughStepValue(_, e, _) or + FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(_, e, _) or + FlowSummaryImpl::Private::Steps::summaryGetterStep(_, _, e, _) or + FlowSummaryImpl::Private::Steps::summarySetterStep(_, _, e, _) + } +} + +/** + * Holds if the given endpoint has a self-contradictory combination of characteristics. Detects errors in our endpoint + * characteristics. Lists the problematic characteristics and their implications for all such endpoints, together with + * an error message indicating why this combination is problematic. + * + * Copied from + * javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/ContradictoryEndpointCharacteristics.ql + */ +predicate erroneousEndpoints( + Endpoint endpoint, EndpointCharacteristic characteristic, + AutomodelEndpointTypes::EndpointType endpointType, float confidence, string errorMessage, + boolean ignoreKnownModelingErrors +) { + // An endpoint's characteristics should not include positive indicators with medium/high confidence for more than one + // sink/source type (including the negative type). + exists( + EndpointCharacteristic characteristic2, AutomodelEndpointTypes::EndpointType endpointClass2, + float confidence2 + | + endpointType != endpointClass2 and + ( + endpointType instanceof AutomodelEndpointTypes::SinkType and + endpointClass2 instanceof AutomodelEndpointTypes::SinkType + or + endpointType instanceof AutomodelEndpointTypes::SourceType and + endpointClass2 instanceof AutomodelEndpointTypes::SourceType + ) and + characteristic.appliesToEndpoint(endpoint) and + characteristic2.appliesToEndpoint(endpoint) and + characteristic.hasImplications(endpointType, true, confidence) and + characteristic2.hasImplications(endpointClass2, true, confidence2) and + confidence > SharedCharacteristics::mediumConfidence() and + confidence2 > SharedCharacteristics::mediumConfidence() and + ( + ignoreKnownModelingErrors = true and + not knownOverlappingCharacteristics(characteristic, characteristic2) + or + ignoreKnownModelingErrors = false + ) + ) and + errorMessage = "Endpoint has high-confidence positive indicators for multiple classes" + or + // An endpoint's characteristics should not include positive indicators with medium/high confidence for some class and + // also include negative indicators with medium/high confidence for this same class. + exists(EndpointCharacteristic characteristic2, float confidence2 | + characteristic.appliesToEndpoint(endpoint) and + characteristic2.appliesToEndpoint(endpoint) and + characteristic.hasImplications(endpointType, true, confidence) and + characteristic2.hasImplications(endpointType, false, confidence2) and + confidence > SharedCharacteristics::mediumConfidence() and + confidence2 > SharedCharacteristics::mediumConfidence() + ) and + ignoreKnownModelingErrors = false and + errorMessage = "Endpoint has high-confidence positive and negative indicators for the same class" +} + +/** + * Holds if `characteristic1` and `characteristic2` are among the pairs of currently known positive characteristics that + * have some overlap in their results. This indicates a problem with the underlying Java modeling. Specifically, + * `PathCreation` is prone to FPs. + */ +private predicate knownOverlappingCharacteristics( + EndpointCharacteristic characteristic1, EndpointCharacteristic characteristic2 +) { + characteristic1 != characteristic2 and + characteristic1 = ["mad taint step", "create path", "read file", "known non-sink"] and + characteristic2 = ["mad taint step", "create path", "read file", "known non-sink"] +} diff --git a/java/ql/src/Telemetry/AutomodelApplicationModeExtractCandidates.ql b/java/ql/src/Telemetry/AutomodelApplicationModeExtractCandidates.ql new file mode 100644 index 00000000000..1e4c9c7e248 --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelApplicationModeExtractCandidates.ql @@ -0,0 +1,49 @@ +/** + * Surfaces the endpoints that are not already known to be sinks, and are therefore used as candidates for + * classification with an ML model. + * + * Note: This query does not actually classify the endpoints using the model. + * + * @name Automodel candidates (application mode) + * @description A query to extract automodel candidates in application mode. + * @kind problem + * @problem.severity recommendation + * @id java/ml/extract-automodel-application-candidates + * @tags internal extract automodel application-mode candidates + */ + +private import AutomodelApplicationModeCharacteristics +private import AutomodelJavaUtil + +from + Endpoint endpoint, string message, ApplicationModeMetadataExtractor meta, DollarAtString package, + DollarAtString type, DollarAtString subtypes, DollarAtString name, DollarAtString signature, + DollarAtString input +where + not exists(CharacteristicsImpl::UninterestingToModelCharacteristic u | + u.appliesToEndpoint(endpoint) + ) and + // If a node is already a known sink for any of our existing ATM queries and is already modeled as a MaD sink, we + // don't include it as a candidate. Otherwise, we might include it as a candidate for query A, but the model will + // label it as a sink for one of the sink types of query B, for which it's already a known sink. This would result in + // overlap between our detected sinks and the pre-existing modeling. We assume that, if a sink has already been + // modeled in a MaD model, then it doesn't belong to any additional sink types, and we don't need to reexamine it. + not CharacteristicsImpl::isSink(endpoint, _) and + meta.hasMetadata(endpoint, package, type, subtypes, name, signature, input) and + // The message is the concatenation of all sink types for which this endpoint is known neither to be a sink nor to be + // a non-sink, and we surface only endpoints that have at least one such sink type. + message = + strictconcat(AutomodelEndpointTypes::SinkType sinkType | + not CharacteristicsImpl::isKnownSink(endpoint, sinkType) and + CharacteristicsImpl::isSinkCandidate(endpoint, sinkType) + | + sinkType, ", " + ) +select endpoint, message + "\nrelated locations: $@." + "\nmetadata: $@, $@, $@, $@, $@, $@.", // + CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, CallContext()), "CallContext", // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // method name + signature, "signature", // + input, "input" // diff --git a/java/ql/src/Telemetry/AutomodelApplicationModeExtractNegativeExamples.ql b/java/ql/src/Telemetry/AutomodelApplicationModeExtractNegativeExamples.ql new file mode 100644 index 00000000000..e8a284dd6c0 --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelApplicationModeExtractNegativeExamples.ql @@ -0,0 +1,73 @@ +/** + * Surfaces endpoints that are non-sinks with high confidence, for use as negative examples in the prompt. + * + * @name Negative examples (application mode) + * @kind problem + * @problem.severity recommendation + * @id java/ml/extract-automodel-application-negative-examples + * @tags internal extract automodel application-mode negative examples + */ + +private import java +private import AutomodelApplicationModeCharacteristics +private import AutomodelEndpointTypes +private import AutomodelJavaUtil + +/** + * Gets a sample of endpoints (of at most `limit` samples) for which the given characteristic applies. + * + * The main purpose of this helper predicate is to avoid selecting too many samples, as this may + * cause the SARIF file to exceed the maximum size limit. + */ +bindingset[limit] +Endpoint getSampleForCharacteristic(EndpointCharacteristic c, int limit) { + exists(int n, int num_endpoints | num_endpoints = count(Endpoint e | c.appliesToEndpoint(e)) | + result = + rank[n](Endpoint e, Location loc | + loc = e.getLocation() and c.appliesToEndpoint(e) + | + e + order by + loc.getFile().getAbsolutePath(), loc.getStartLine(), loc.getStartColumn(), + loc.getEndLine(), loc.getEndColumn() + ) and + // To avoid selecting samples that are too close together (as the ranking above goes by file + // path first), we select `limit` evenly spaced samples from the ranked list of endpoints. By + // default this would always include the first sample, so we add a random-chosen prime offset + // to the first sample index, and reduce modulo the number of endpoints. + // Finally, we add 1 to the result, as ranking results in a 1-indexed relation. + n = 1 + (([0 .. limit - 1] * (num_endpoints / limit).floor() + 46337) % num_endpoints) + ) +} + +from + Endpoint endpoint, EndpointCharacteristic characteristic, float confidence, string message, + ApplicationModeMetadataExtractor meta, DollarAtString package, DollarAtString type, + DollarAtString subtypes, DollarAtString name, DollarAtString signature, DollarAtString input +where + endpoint = getSampleForCharacteristic(characteristic, 100) and + confidence >= SharedCharacteristics::highConfidence() and + characteristic.hasImplications(any(NegativeSinkType negative), true, confidence) and + // Exclude endpoints that have contradictory endpoint characteristics, because we only want examples we're highly + // certain about in the prompt. + not erroneousEndpoints(endpoint, _, _, _, _, false) and + meta.hasMetadata(endpoint, package, type, subtypes, name, signature, input) and + // It's valid for a node to satisfy the logic for both `isSink` and `isSanitizer`, but in that case it will be + // treated by the actual query as a sanitizer, since the final logic is something like + // `isSink(n) and not isSanitizer(n)`. We don't want to include such nodes as negative examples in the prompt, because + // they're ambiguous and might confuse the model, so we explicitly exclude all known sinks from the negative examples. + not exists(EndpointCharacteristic characteristic2, float confidence2, SinkType positiveType | + not positiveType instanceof NegativeSinkType and + characteristic2.appliesToEndpoint(endpoint) and + confidence2 >= SharedCharacteristics::maximalConfidence() and + characteristic2.hasImplications(positiveType, true, confidence2) + ) and + message = characteristic +select endpoint, message + "\nrelated locations: $@." + "\nmetadata: $@, $@, $@, $@, $@, $@.", // + CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, CallContext()), "CallContext", // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // + signature, "signature", // + input, "input" // diff --git a/java/ql/src/Telemetry/AutomodelApplicationModeExtractPositiveExamples.ql b/java/ql/src/Telemetry/AutomodelApplicationModeExtractPositiveExamples.ql new file mode 100644 index 00000000000..c62476377db --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelApplicationModeExtractPositiveExamples.ql @@ -0,0 +1,33 @@ +/** + * Surfaces endpoints that are sinks with high confidence, for use as positive examples in the prompt. + * + * @name Positive examples (application mode) + * @kind problem + * @problem.severity recommendation + * @id java/ml/extract-automodel-application-positive-examples + * @tags internal extract automodel application-mode positive examples + */ + +private import AutomodelApplicationModeCharacteristics +private import AutomodelEndpointTypes +private import AutomodelJavaUtil + +from + Endpoint endpoint, SinkType sinkType, ApplicationModeMetadataExtractor meta, + DollarAtString package, DollarAtString type, DollarAtString subtypes, DollarAtString name, + DollarAtString signature, DollarAtString input +where + // Exclude endpoints that have contradictory endpoint characteristics, because we only want examples we're highly + // certain about in the prompt. + not erroneousEndpoints(endpoint, _, _, _, _, false) and + meta.hasMetadata(endpoint, package, type, subtypes, name, signature, input) and + // Extract positive examples of sinks belonging to the existing ATM query configurations. + CharacteristicsImpl::isKnownSink(endpoint, sinkType) +select endpoint, sinkType + "\nrelated locations: $@." + "\nmetadata: $@, $@, $@, $@, $@, $@.", // + CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, CallContext()), "CallContext", // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // + signature, "signature", // + input, "input" // diff --git a/java/ql/src/Telemetry/AutomodelEndpointTypes.qll b/java/ql/src/Telemetry/AutomodelEndpointTypes.qll index 7414837b605..618fa4bc7dd 100644 --- a/java/ql/src/Telemetry/AutomodelEndpointTypes.qll +++ b/java/ql/src/Telemetry/AutomodelEndpointTypes.qll @@ -40,18 +40,18 @@ class NegativeSinkType extends SinkType { } /** A sink relevant to the SQL injection query */ -class SqlSinkType extends SinkType { - SqlSinkType() { this = "sql" } +class SqlInjectionSinkType extends SinkType { + SqlInjectionSinkType() { this = "sql-injection" } } /** A sink relevant to the tainted path injection query. */ -class TaintedPathSinkType extends SinkType { - TaintedPathSinkType() { this = "tainted-path" } +class PathInjectionSinkType extends SinkType { + PathInjectionSinkType() { this = "path-injection" } } /** A sink relevant to the SSRF query. */ class RequestForgerySinkType extends SinkType { - RequestForgerySinkType() { this = "ssrf" } + RequestForgerySinkType() { this = "request-forgery" } } /** A sink relevant to the command injection query. */ diff --git a/java/ql/src/Telemetry/AutomodelFrameworkModeCharacteristics.qll b/java/ql/src/Telemetry/AutomodelFrameworkModeCharacteristics.qll index 57bd397f7a8..bc5c3b59a91 100644 --- a/java/ql/src/Telemetry/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/src/Telemetry/AutomodelFrameworkModeCharacteristics.qll @@ -14,23 +14,11 @@ private import semmle.code.java.Expr as Expr private import semmle.code.java.security.QueryInjection private import semmle.code.java.security.RequestForgery private import semmle.code.java.dataflow.internal.ModelExclusions as ModelExclusions +private import AutomodelJavaUtil as AutomodelJavaUtil +private import AutomodelSharedGetCallable as AutomodelSharedGetCallable import AutomodelSharedCharacteristics as SharedCharacteristics import AutomodelEndpointTypes as AutomodelEndpointTypes -/** - * A meta data extractor. Any Java extraction mode needs to implement exactly - * one instance of this class. - */ -abstract class MetadataExtractor extends string { - bindingset[this] - MetadataExtractor() { any() } - - abstract predicate hasMetadata( - DataFlow::ParameterNode e, string package, string type, boolean subtypes, string name, - string signature, int input, string parameterName - ); -} - newtype JavaRelatedLocationType = MethodDoc() or ClassDoc() @@ -60,31 +48,7 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { RelatedLocation asLocation(Endpoint e) { result = e.asParameter() } - predicate isKnownKind(string kind, string humanReadableKind, EndpointType type) { - kind = "read-file" and - humanReadableKind = "read file" and - type instanceof AutomodelEndpointTypes::TaintedPathSinkType - or - kind = "create-file" and - humanReadableKind = "create file" and - type instanceof AutomodelEndpointTypes::TaintedPathSinkType - or - kind = "sql" and - humanReadableKind = "mad modeled sql" and - type instanceof AutomodelEndpointTypes::SqlSinkType - or - kind = "open-url" and - humanReadableKind = "open url" and - type instanceof AutomodelEndpointTypes::RequestForgerySinkType - or - kind = "jdbc-url" and - humanReadableKind = "jdbc url" and - type instanceof AutomodelEndpointTypes::RequestForgerySinkType - or - kind = "command-injection" and - humanReadableKind = "command injection" and - type instanceof AutomodelEndpointTypes::CommandInjectionSinkType - } + predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; predicate isSink(Endpoint e, string kind) { exists(string package, string type, string name, string signature, string ext, string input | @@ -96,40 +60,48 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { predicate isNeutral(Endpoint e) { exists(string package, string type, string name, string signature | sinkSpec(e, package, type, name, signature, _, _) and - ExternalFlow::neutralModel(package, type, name, [signature, ""], _, _) + ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) ) } additional predicate sinkSpec( Endpoint e, string package, string type, string name, string signature, string ext, string input ) { - FrameworkCandidatesImpl::getCallable(e).hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(getCallable(e)) and + FrameworkModeGetCallable::getCallable(e).hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(FrameworkModeGetCallable::getCallable(e)) and ext = "" and exists(int paramIdx | e.isParameterOf(_, paramIdx) | - if paramIdx = -1 then input = "Argument[this]" else input = "Argument[" + paramIdx + "]" + input = AutomodelJavaUtil::getArgumentForIndex(paramIdx) ) } /** - * Returns the related location for the given endpoint. + * Gets the related location for the given endpoint. * * Related locations can be JavaDoc comments of the class or the method. */ RelatedLocation getRelatedLocation(Endpoint e, RelatedLocationType type) { type = MethodDoc() and - result = FrameworkCandidatesImpl::getCallable(e).(Documentable).getJavadoc() + result = FrameworkModeGetCallable::getCallable(e).(Documentable).getJavadoc() or type = ClassDoc() and - result = FrameworkCandidatesImpl::getCallable(e).getDeclaringType().(Documentable).getJavadoc() + result = FrameworkModeGetCallable::getCallable(e).getDeclaringType().(Documentable).getJavadoc() } +} + +private class JavaCallable = Callable; + +private module FrameworkModeGetCallable implements AutomodelSharedGetCallable::GetCallableSig { + class Callable = JavaCallable; + + class Endpoint = FrameworkCandidatesImpl::Endpoint; /** * Returns the callable that contains the given endpoint. * * Each Java mode should implement this predicate. */ - additional Callable getCallable(Endpoint e) { result = e.getEnclosingCallable() } + Callable getCallable(Endpoint e) { result = e.getEnclosingCallable() } } module CharacteristicsImpl = SharedCharacteristics::SharedCharacteristics; @@ -145,35 +117,19 @@ class Endpoint = FrameworkCandidatesImpl::Endpoint; /** * A MetadataExtractor that extracts metadata for framework mode. */ -class FrameworkModeMetadataExtractor extends MetadataExtractor { +class FrameworkModeMetadataExtractor extends string { FrameworkModeMetadataExtractor() { this = "FrameworkModeMetadataExtractor" } - /** - * By convention, the subtypes property of the MaD declaration should only be - * true when there _can_ exist any subtypes with a different implementation. - * - * It would technically be ok to always use the value 'true', but this would - * break convention. - */ - boolean considerSubtypes(Callable callable) { - if - callable.isStatic() or - callable.getDeclaringType().isStatic() or - callable.isFinal() or - callable.getDeclaringType().isFinal() - then result = false - else result = true - } - - override predicate hasMetadata( - Endpoint e, string package, string type, boolean subtypes, string name, string signature, - int input, string parameterName + predicate hasMetadata( + Endpoint e, string package, string type, string subtypes, string name, string signature, + string input, string parameterName ) { - exists(Callable callable | - e.asParameter() = callable.getParameter(input) and + exists(Callable callable, int paramIdx | + e.asParameter() = callable.getParameter(paramIdx) and + input = AutomodelJavaUtil::getArgumentForIndex(paramIdx) and package = callable.getDeclaringType().getPackage().getName() and type = callable.getDeclaringType().getErasure().(RefType).nestedName() and - subtypes = this.considerSubtypes(callable) and + subtypes = AutomodelJavaUtil::considerSubtypes(callable).toString() and name = callable.getName() and parameterName = e.asParameter().getName() and signature = ExternalFlow::paramsString(callable) @@ -199,8 +155,8 @@ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASin override predicate appliesToEndpoint(Endpoint e) { not FrameworkCandidatesImpl::isSink(e, _) and - FrameworkCandidatesImpl::getCallable(e).getName().matches("is%") and - FrameworkCandidatesImpl::getCallable(e).getReturnType() instanceof BooleanType + FrameworkModeGetCallable::getCallable(e).getName().matches("is%") and + FrameworkModeGetCallable::getCallable(e).getReturnType() instanceof BooleanType } } @@ -218,7 +174,7 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Not override predicate appliesToEndpoint(Endpoint e) { not FrameworkCandidatesImpl::isSink(e, _) and exists(Callable callable | - callable = FrameworkCandidatesImpl::getCallable(e) and + callable = FrameworkModeGetCallable::getCallable(e) and callable.getName().toLowerCase() = ["exists", "notexists"] and callable.getReturnType() instanceof BooleanType ) @@ -232,7 +188,7 @@ private class ExceptionCharacteristic extends CharacteristicsImpl::NotASinkChara ExceptionCharacteristic() { this = "exception" } override predicate appliesToEndpoint(Endpoint e) { - FrameworkCandidatesImpl::getCallable(e).getDeclaringType().getASupertype*() instanceof + FrameworkModeGetCallable::getCallable(e).getDeclaringType().getASupertype*() instanceof TypeThrowable } } @@ -258,7 +214,7 @@ private class NonPublicMethodCharacteristic extends CharacteristicsImpl::Uninter NonPublicMethodCharacteristic() { this = "non-public method" } override predicate appliesToEndpoint(Endpoint e) { - not FrameworkCandidatesImpl::getCallable(e).isPublic() + not FrameworkModeGetCallable::getCallable(e).isPublic() } } diff --git a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractCandidates.ql b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractCandidates.ql index a64327422a0..4186d1c17b9 100644 --- a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractCandidates.ql +++ b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractCandidates.ql @@ -4,20 +4,21 @@ * * Note: This query does not actually classify the endpoints using the model. * - * @name Automodel candidates - * @description A query to extract automodel candidates. + * @name Automodel candidates (framework mode) + * @description A query to extract automodel candidates in framework mode. * @kind problem - * @severity info - * @id java/ml/extract-automodel-candidates - * @tags internal automodel extract candidates + * @problem.severity recommendation + * @id java/ml/extract-automodel-framework-candidates + * @tags internal extract automodel framework-mode candidates */ private import AutomodelFrameworkModeCharacteristics -private import AutomodelSharedUtil +private import AutomodelJavaUtil from - Endpoint endpoint, string message, MetadataExtractor meta, string package, string type, - boolean subtypes, string name, string signature, int input, string parameterName + Endpoint endpoint, string message, FrameworkModeMetadataExtractor meta, DollarAtString package, + DollarAtString type, DollarAtString subtypes, DollarAtString name, DollarAtString signature, + DollarAtString input, DollarAtString parameterName where not exists(CharacteristicsImpl::UninterestingToModelCharacteristic u | u.appliesToEndpoint(endpoint) @@ -42,10 +43,10 @@ select endpoint, message + "\nrelated locations: $@, $@." + "\nmetadata: $@, $@, $@, $@, $@, $@, $@.", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, MethodDoc()), "MethodDoc", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, ClassDoc()), "ClassDoc", // - package.(DollarAtString), "package", // - type.(DollarAtString), "type", // - subtypes.toString().(DollarAtString), "subtypes", // - name.(DollarAtString), "name", // - signature.(DollarAtString), "signature", // - input.toString().(DollarAtString), "input", // - parameterName.(DollarAtString), "parameterName" // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // + signature, "signature", // + input, "input", // + parameterName, "parameterName" // diff --git a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractNegativeExamples.ql b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractNegativeExamples.ql index f1ba8ee4119..10e1870984d 100644 --- a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractNegativeExamples.ql +++ b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractNegativeExamples.ql @@ -1,21 +1,22 @@ /** * Surfaces endpoints that are non-sinks with high confidence, for use as negative examples in the prompt. * - * @name Negative examples (experimental) + * @name Negative examples (framework mode) * @kind problem - * @severity info - * @id java/ml/non-sink - * @tags internal automodel extract examples negative + * @problem.severity recommendation + * @id java/ml/extract-automodel-framework-negative-examples + * @tags internal extract automodel framework-mode negative examples */ private import AutomodelFrameworkModeCharacteristics private import AutomodelEndpointTypes -private import AutomodelSharedUtil +private import AutomodelJavaUtil from - Endpoint endpoint, EndpointCharacteristic characteristic, float confidence, string message, - MetadataExtractor meta, string package, string type, boolean subtypes, string name, - string signature, int input, string parameterName + Endpoint endpoint, EndpointCharacteristic characteristic, float confidence, + DollarAtString message, FrameworkModeMetadataExtractor meta, DollarAtString package, + DollarAtString type, DollarAtString subtypes, DollarAtString name, DollarAtString signature, + DollarAtString input, DollarAtString parameterName where characteristic.appliesToEndpoint(endpoint) and confidence >= SharedCharacteristics::highConfidence() and @@ -39,10 +40,10 @@ select endpoint, message + "\nrelated locations: $@, $@." + "\nmetadata: $@, $@, $@, $@, $@, $@, $@.", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, MethodDoc()), "MethodDoc", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, ClassDoc()), "ClassDoc", // - package.(DollarAtString), "package", // - type.(DollarAtString), "type", // - subtypes.toString().(DollarAtString), "subtypes", // - name.(DollarAtString), "name", // - signature.(DollarAtString), "signature", // - input.toString().(DollarAtString), "input", // - parameterName.(DollarAtString), "parameterName" // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // + signature, "signature", // + input, "input", // + parameterName, "parameterName" // diff --git a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractPositiveExamples.ql b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractPositiveExamples.ql index e216c292538..2547239ee91 100644 --- a/java/ql/src/Telemetry/AutomodelFrameworkModeExtractPositiveExamples.ql +++ b/java/ql/src/Telemetry/AutomodelFrameworkModeExtractPositiveExamples.ql @@ -1,20 +1,21 @@ /** * Surfaces endpoints that are sinks with high confidence, for use as positive examples in the prompt. * - * @name Positive examples (experimental) + * @name Positive examples (framework mode) * @kind problem - * @severity info - * @id java/ml/known-sink - * @tags internal automodel extract examples positive + * @problem.severity recommendation + * @id java/ml/extract-automodel-framework-positive-examples + * @tags internal extract automodel framework-mode positive examples */ private import AutomodelFrameworkModeCharacteristics private import AutomodelEndpointTypes -private import AutomodelSharedUtil +private import AutomodelJavaUtil from - Endpoint endpoint, SinkType sinkType, MetadataExtractor meta, string package, string type, - boolean subtypes, string name, string signature, int input, string parameterName + Endpoint endpoint, SinkType sinkType, FrameworkModeMetadataExtractor meta, DollarAtString package, + DollarAtString type, DollarAtString subtypes, DollarAtString name, DollarAtString signature, + DollarAtString input, DollarAtString parameterName where // Exclude endpoints that have contradictory endpoint characteristics, because we only want examples we're highly // certain about in the prompt. @@ -26,10 +27,10 @@ select endpoint, sinkType + "\nrelated locations: $@, $@." + "\nmetadata: $@, $@, $@, $@, $@, $@, $@.", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, MethodDoc()), "MethodDoc", // CharacteristicsImpl::getRelatedLocationOrCandidate(endpoint, ClassDoc()), "ClassDoc", // - package.(DollarAtString), "package", // - type.(DollarAtString), "type", // - subtypes.toString().(DollarAtString), "subtypes", // - name.(DollarAtString), "name", // - signature.(DollarAtString), "signature", // - input.toString().(DollarAtString), "input", // - parameterName.(DollarAtString), "parameterName" // + package, "package", // + type, "type", // + subtypes, "subtypes", // + name, "name", // + signature, "signature", // + input, "input", // + parameterName, "parameterName" // diff --git a/java/ql/src/Telemetry/AutomodelJavaUtil.qll b/java/ql/src/Telemetry/AutomodelJavaUtil.qll new file mode 100644 index 00000000000..03b73da1015 --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelJavaUtil.qll @@ -0,0 +1,67 @@ +private import java +private import AutomodelEndpointTypes as AutomodelEndpointTypes + +/** + * A helper class to represent a string value that can be returned by a query using $@ notation. + * + * It extends `string`, but adds a mock `hasLocationInfo` method that returns the string itself as the file name. + * + * Use this, when you want to return a string value from a query using $@ notation - the string value + * will be included in the sarif file. + * + * + * Background information on `hasLocationInfo`: + * https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-location-information + */ +class DollarAtString extends string { + bindingset[this] + DollarAtString() { any() } + + bindingset[this] + predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { + path = this and sl = 1 and sc = 1 and el = 1 and ec = 1 + } +} + +/** + * Holds for all combinations of MaD kinds (`kind`) and their human readable + * descriptions. + */ +predicate isKnownKind(string kind, AutomodelEndpointTypes::EndpointType type) { + kind = "path-injection" and + type instanceof AutomodelEndpointTypes::PathInjectionSinkType + or + kind = "sql-injection" and + type instanceof AutomodelEndpointTypes::SqlInjectionSinkType + or + kind = "request-forgery" and + type instanceof AutomodelEndpointTypes::RequestForgerySinkType + or + kind = "command-injection" and + type instanceof AutomodelEndpointTypes::CommandInjectionSinkType +} + +/** Gets the models-as-data description for the method argument with the index `index`. */ +bindingset[index] +string getArgumentForIndex(int index) { + index = -1 and result = "Argument[this]" + or + index >= 0 and result = "Argument[" + index + "]" +} + +/** + * By convention, the subtypes property of the MaD declaration should only be + * true when there _can_ exist any subtypes with a different implementation. + * + * It would technically be ok to always use the value 'true', but this would + * break convention. + */ +boolean considerSubtypes(Callable callable) { + if + callable.isStatic() or + callable.getDeclaringType().isStatic() or + callable.isFinal() or + callable.getDeclaringType().isFinal() + then result = false + else result = true +} diff --git a/java/ql/src/Telemetry/AutomodelSharedCharacteristics.qll b/java/ql/src/Telemetry/AutomodelSharedCharacteristics.qll index f23340bf34f..b077f77deb9 100644 --- a/java/ql/src/Telemetry/AutomodelSharedCharacteristics.qll +++ b/java/ql/src/Telemetry/AutomodelSharedCharacteristics.qll @@ -50,7 +50,7 @@ signature module CandidateSig { /** * Defines what MaD kinds are known, and what endpoint type they correspond to. */ - predicate isKnownKind(string kind, string humanReadableLabel, EndpointType type); + predicate isKnownKind(string kind, EndpointType type); /** * Holds if `e` is a flow sanitizer, and has type `t`. @@ -276,7 +276,11 @@ module SharedCharacteristics { string madKind; Candidate::EndpointType endpointType; - KnownSinkCharacteristic() { Candidate::isKnownKind(madKind, this, endpointType) } + KnownSinkCharacteristic() { + Candidate::isKnownKind(madKind, endpointType) and + // bind "this" to a unique string differing from that of the SinkType classes + this = madKind + "-characteristic" + } override predicate appliesToEndpoint(Candidate::Endpoint e) { Candidate::isSink(e, madKind) } diff --git a/java/ql/src/Telemetry/AutomodelSharedGetCallable.qll b/java/ql/src/Telemetry/AutomodelSharedGetCallable.qll new file mode 100644 index 00000000000..87e20969381 --- /dev/null +++ b/java/ql/src/Telemetry/AutomodelSharedGetCallable.qll @@ -0,0 +1,21 @@ +/** + * An automodel extraction mode instantiates this interface to define how to access + * the callable that's associated with an endpoint. + */ +signature module GetCallableSig { + /** + * A callable is the definition of a method, function, etc. - something that can be called. + */ + class Callable; + + /** + * An endpoint is a potential candidate for modeling. This will typically be bound to the language's + * DataFlow node class, or a subtype thereof. + */ + class Endpoint; + + /** + * Gets the callable that's associated with the given endpoint. + */ + Callable getCallable(Endpoint endpoint); +} diff --git a/java/ql/src/Telemetry/AutomodelSharedUtil.qll b/java/ql/src/Telemetry/AutomodelSharedUtil.qll deleted file mode 100644 index e03e46abd1d..00000000000 --- a/java/ql/src/Telemetry/AutomodelSharedUtil.qll +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A helper class to represent a string value that can be returned by a query using $@ notation. - * - * It extends `string`, but adds a mock `hasLocationInfo` method that returns the string itself as the file name. - * - * Use this, when you want to return a string value from a query using $@ notation - the string value - * will be included in the sarif file. - * - * - * Background information on `hasLocationInfo`: - * https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/#providing-location-information - */ -class DollarAtString extends string { - bindingset[this] - DollarAtString() { any() } - - bindingset[this] - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - path = this and sl = 1 and sc = 1 and el = 1 and ec = 1 - } -} diff --git a/java/ql/src/Telemetry/ExternalApi.qll b/java/ql/src/Telemetry/ExternalApi.qll index a8624f8fef6..5e9a2527c73 100644 --- a/java/ql/src/Telemetry/ExternalApi.qll +++ b/java/ql/src/Telemetry/ExternalApi.qll @@ -27,8 +27,9 @@ class ExternalApi extends Callable { */ string getApiName() { result = - this.getDeclaringType().getPackage() + "." + this.getDeclaringType().getSourceDeclaration() + - "#" + this.getName() + paramsString(this) + this.getDeclaringType().getPackage() + "." + + this.getDeclaringType().getSourceDeclaration().nestedName() + "#" + this.getName() + + paramsString(this) } private string getJarName() { @@ -95,7 +96,7 @@ deprecated class ExternalAPI = ExternalApi; /** * Gets the limit for the number of results produced by a telemetry query. */ -int resultLimit() { result = 1000 } +int resultLimit() { result = 100 } /** * Holds if it is relevant to count usages of `api`. diff --git a/java/ql/src/change-notes/released/0.7.0.md b/java/ql/src/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..e12c2ef58fe --- /dev/null +++ b/java/ql/src/change-notes/released/0.7.0.md @@ -0,0 +1,10 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* New models have been added for `org.apache.commons.lang`. +* The query `java/unsafe-deserialization` has been updated to take into account `SerialKiller`, a library used to prevent deserialization of arbitrary classes. + +### Bug Fixes + +* The query "Arbitrary file write during archive extraction ("Zip Slip")" (`java/zipslip`) has been renamed to "Arbitrary file access during archive extraction ("Zip Slip")." diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql b/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql index 4305b9fbabc..5d543d65011 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql @@ -15,7 +15,11 @@ import java import semmle.code.java.security.CommandLineQuery import RemoteUserInputToArgumentToExecFlow::PathGraph -import JSchOSInjection +private import semmle.code.java.dataflow.ExternalFlow + +private class ActivateModels extends ActiveExperimentalModels { + ActivateModels() { this = "jsch-os-injection" } +} // This is a clone of query `java/command-line-injection` that also includes experimental sinks. from diff --git a/java/ql/src/experimental/Security/CWE/CWE-078/JSchOSInjection.qll b/java/ql/src/experimental/Security/CWE/CWE-078/JSchOSInjection.qll deleted file mode 100644 index ec1f4d0adfa..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-078/JSchOSInjection.qll +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Provides classes for JSch OS command injection detection - */ - -import java - -/** The class `com.jcraft.jsch.ChannelExec`. */ -private class JSchChannelExec extends RefType { - JSchChannelExec() { this.hasQualifiedName("com.jcraft.jsch", "ChannelExec") } -} - -/** A method to set an OS Command for the execution. */ -private class ChannelExecSetCommandMethod extends Method, ExecCallable { - ChannelExecSetCommandMethod() { - this.hasName("setCommand") and - this.getDeclaringType() instanceof JSchChannelExec - } - - override int getAnExecutedArgument() { result = 0 } -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll index bd177b30213..05055bdfa84 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll @@ -55,10 +55,14 @@ class WebResourceResponseSink extends DataFlow::Node { } /** - * A value step from the URL argument of `WebView::loadUrl` to the URL parameter of + * A taint step from the URL argument of `WebView::loadUrl` to the URL/WebResourceRequest parameter of * `WebViewClient::shouldInterceptRequest`. + * + * TODO: This ought to be a value step when it is targeting the URL parameter, + * and it ought to check the parameter type in both cases to ensure that we only + * hit the overloads we intend to. */ -private class FetchUrlStep extends AdditionalValueStep { +private class FetchUrlStep extends AdditionalTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists( // webview.loadUrl(url) -> webview.setWebViewClient(new WebViewClient() { shouldInterceptRequest(view, url) }); diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 416e1007534..ccf777a554a 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.6.4 +version: 0.7.0 groups: - java - queries diff --git a/java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag b/java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag +++ b/java/ql/src/utils/flowtestcasegenerator/testHeader.qlfrag @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/TestUtilities/InlineFlowTest.qll b/java/ql/test/TestUtilities/InlineFlowTest.qll index 5e37770a279..34d7f75ee20 100644 --- a/java/ql/test/TestUtilities/InlineFlowTest.qll +++ b/java/ql/test/TestUtilities/InlineFlowTest.qll @@ -5,6 +5,12 @@ * ```ql * import java * import TestUtilities.InlineFlowTest + * import DefaultFlowTest + * import PathGraph + * + * from PathNode source, PathNode sink + * where flowPath(source, sink) + * select sink, source, sink, "$@", source, source.toString() * ``` * * To declare expectations, you can use the $hasTaintFlow or $hasValueFlow comments within the test source files. @@ -18,22 +24,18 @@ * * public void test() { * Object s = source(); - * sink(s); //$hasValueFlow + * sink(s); // $ hasValueFlow * String t = "foo" + taint(); - * sink(t); //$hasTaintFlow + * sink(t); // $ hasTaintFlow * } * * } * ``` * - * If you're not interested in a specific flow type, you can disable either value or taint flow expectations as follows: - * ```ql - * class HasFlowTest extends InlineFlowTest { - * override DataFlow::Configuration getTaintFlowConfig() { none() } - * - * override DataFlow::Configuration getValueFlowConfig() { none() } - * } - * ``` + * If you are only interested in value flow, then instead of importing `DefaultFlowTest`, you can import + * `ValueFlowTest`. Similarly, if you are only interested in taint flow, then instead of + * importing `DefaultFlowTest`, you can import `TaintFlowTest`. In both cases + * `DefaultFlowConfig` can be replaced by another implementation of `DataFlow::ConfigSig`. * * If you need more fine-grained tuning, consider implementing a test using `InlineExpectationsTest`. */ @@ -43,57 +45,75 @@ import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.TaintTracking import TestUtilities.InlineExpectationsTest -private predicate defaultSource(DataFlow::Node src) { - src.asExpr().(MethodAccess).getMethod().getName() = ["source", "taint"] +private predicate defaultSource(DataFlow::Node source) { + source.asExpr().(MethodAccess).getMethod().getName() = ["source", "taint"] +} + +private predicate defaultSink(DataFlow::Node sink) { + exists(MethodAccess ma | ma.getMethod().hasName("sink") | sink.asExpr() = ma.getAnArgument()) } module DefaultFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node n) { defaultSource(n) } + predicate isSource(DataFlow::Node source) { defaultSource(source) } - predicate isSink(DataFlow::Node n) { - exists(MethodAccess ma | ma.getMethod().hasName("sink") | n.asExpr() = ma.getAnArgument()) - } + predicate isSink(DataFlow::Node sink) { defaultSink(sink) } int fieldFlowBranchLimit() { result = 1000 } } -private module DefaultValueFlow = DataFlow::Global; +private module NoFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { none() } -private module DefaultTaintFlow = TaintTracking::Global; + predicate isSink(DataFlow::Node sink) { none() } +} private string getSourceArgString(DataFlow::Node src) { defaultSource(src) and src.asExpr().(MethodAccess).getAnArgument().(StringLiteral).getValue() = result } -class InlineFlowTest extends InlineExpectationsTest { - InlineFlowTest() { this = "HasFlowTest" } +module FlowTest { + module ValueFlow = DataFlow::Global; - override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + module TaintFlow = TaintTracking::Global; - override predicate hasActualResult(Location location, string element, string tag, string value) { - tag = "hasValueFlow" and - exists(DataFlow::Node src, DataFlow::Node sink | this.hasValueFlow(src, sink) | - sink.getLocation() = location and - element = sink.toString() and - if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" - ) - or - tag = "hasTaintFlow" and - exists(DataFlow::Node src, DataFlow::Node sink | - this.hasTaintFlow(src, sink) and not this.hasValueFlow(src, sink) - | - sink.getLocation() = location and - element = sink.toString() and - if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" - ) + private module InlineTest implements TestSig { + string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node src, DataFlow::Node sink | ValueFlow::flow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" + ) + or + tag = "hasTaintFlow" and + exists(DataFlow::Node src, DataFlow::Node sink | + TaintFlow::flow(src, sink) and not ValueFlow::flow(src, sink) + | + sink.getLocation() = location and + element = sink.toString() and + if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" + ) + } } - predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { - DefaultValueFlow::flow(src, sink) - } + import MakeTest + import DataFlow::MergePathGraph - predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - DefaultTaintFlow::flow(src, sink) + predicate flowPath(PathNode source, PathNode sink) { + ValueFlow::flowPath(source.asPathNode1(), sink.asPathNode1()) or + TaintFlow::flowPath(source.asPathNode2(), sink.asPathNode2()) } } + +module DefaultFlowTest = FlowTest; + +module ValueFlowTest { + import FlowTest +} + +module TaintFlowTest { + import FlowTest +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected index f3d88d25805..93b2b060685 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-020/Log4jInjectionTest.expected @@ -2075,28 +2075,28 @@ edges | Log4jJndiInjectionTest.java:1085:39:1085:46 | source(...) : String | Log4jJndiInjectionTest.java:1085:25:1085:46 | (...)... | | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | Log4jJndiInjectionTest.java:1088:38:1088:54 | (...)... | | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | Log4jJndiInjectionTest.java:1089:44:1089:60 | (...)... | -| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : Map [] : String | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | -| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | +| Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | -| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : MapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | -| Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : MapMessage | +| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | +| Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | -| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : MapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | -| Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : MapMessage | +| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | +| Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | -| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : MapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | -| Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : MapMessage | +| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | +| Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | -| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : Map [] : String | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : Map [] : String | -| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | +| Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | -| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : MapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | -| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : Map [] : String | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : MapMessage | +| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | +| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | Log4jJndiInjectionTest.java:1116:52:1116:68 | (...)... | | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | Log4jJndiInjectionTest.java:1117:72:1117:88 | (...)... | -| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : Map [] : String | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | -| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : Map [] : String | Log4jJndiInjectionTest.java:1121:63:1121:65 | map | -| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | +| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | Log4jJndiInjectionTest.java:1121:63:1121:65 | map | +| Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | nodes | Log4jJndiInjectionTest.java:24:16:24:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -4168,33 +4168,33 @@ nodes | Log4jJndiInjectionTest.java:1088:47:1088:54 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1089:44:1089:60 | (...)... | semmle.label | (...)... | | Log4jJndiInjectionTest.java:1089:53:1089:60 | source(...) : String | semmle.label | source(...) : String | -| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : Map [] : String | semmle.label | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1091:13:1091:15 | map [post update] : HashMap [] : String | semmle.label | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1091:28:1091:44 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1091:37:1091:44 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1092:34:1092:36 | map | semmle.label | map | -| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : MapMessage | semmle.label | with(...) : MapMessage | +| Log4jJndiInjectionTest.java:1095:31:1095:88 | with(...) : StringMapMessage | semmle.label | with(...) : StringMapMessage | | Log4jJndiInjectionTest.java:1095:71:1095:87 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1095:80:1095:87 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1096:26:1096:29 | mmsg | semmle.label | mmsg | -| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : MapMessage | semmle.label | mmsg [post update] : MapMessage | +| Log4jJndiInjectionTest.java:1100:13:1100:16 | mmsg [post update] : StringMapMessage | semmle.label | mmsg [post update] : StringMapMessage | | Log4jJndiInjectionTest.java:1100:35:1100:51 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1100:44:1100:51 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1101:26:1101:29 | mmsg | semmle.label | mmsg | -| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : MapMessage | semmle.label | mmsg [post update] : MapMessage | +| Log4jJndiInjectionTest.java:1105:13:1105:16 | mmsg [post update] : StringMapMessage | semmle.label | mmsg [post update] : StringMapMessage | | Log4jJndiInjectionTest.java:1105:34:1105:50 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1105:43:1105:50 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1106:26:1106:29 | mmsg | semmle.label | mmsg | -| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : Map [] : String | semmle.label | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1111:13:1111:15 | map [post update] : HashMap [] : String | semmle.label | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1111:33:1111:49 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1111:42:1111:49 | source(...) : String | semmle.label | source(...) : String | -| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : MapMessage | semmle.label | mmsg [post update] : MapMessage | -| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : Map [] : String | semmle.label | map : Map [] : String | +| Log4jJndiInjectionTest.java:1112:13:1112:16 | mmsg [post update] : StringMapMessage | semmle.label | mmsg [post update] : StringMapMessage | +| Log4jJndiInjectionTest.java:1112:25:1112:27 | map : HashMap [] : String | semmle.label | map : HashMap [] : String | | Log4jJndiInjectionTest.java:1113:26:1113:29 | mmsg | semmle.label | mmsg | | Log4jJndiInjectionTest.java:1116:52:1116:68 | (...)... | semmle.label | (...)... | | Log4jJndiInjectionTest.java:1116:61:1116:68 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1117:72:1117:88 | (...)... | semmle.label | (...)... | | Log4jJndiInjectionTest.java:1117:81:1117:88 | source(...) : String | semmle.label | source(...) : String | -| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : Map [] : String | semmle.label | map [post update] : Map [] : String | +| Log4jJndiInjectionTest.java:1119:13:1119:15 | map [post update] : HashMap [] : String | semmle.label | map [post update] : HashMap [] : String | | Log4jJndiInjectionTest.java:1119:33:1119:49 | (...)... : String | semmle.label | (...)... : String | | Log4jJndiInjectionTest.java:1119:42:1119:49 | source(...) : String | semmle.label | source(...) : String | | Log4jJndiInjectionTest.java:1120:43:1120:45 | map | semmle.label | map | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected index 37741e5f605..07ce59763ad 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/InsecureWebResourceResponse.expected @@ -1,152 +1,152 @@ edges -| InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : Object | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : Object | -| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : Object | InsecureWebResourceResponse.java:59:34:59:43 | url : Object | -| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : Object | InsecureWebResourceResponse.java:80:34:80:43 | url : Object | -| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : Object | InsecureWebResourceResponse.java:106:34:106:43 | url : Object | -| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : Object | InsecureWebResourceResponse.java:131:36:131:45 | url : Object | -| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : Object | InsecureWebResourceResponse.java:156:35:156:44 | url : Object | -| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : Object | InsecureWebResourceResponse.java:181:34:181:43 | url : Object | -| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : Object | InsecureWebResourceResponse.java:188:34:188:43 | url : Object | -| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : Object | InsecureWebResourceResponse.java:217:35:217:44 | url : Object | -| InsecureWebResourceResponse.java:59:34:59:43 | url : Object | InsecureWebResourceResponse.java:75:20:75:22 | url : Object | -| InsecureWebResourceResponse.java:63:77:63:86 | url : Object | InsecureWebResourceResponse.java:65:41:65:43 | url : Object | +| InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | +| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | InsecureWebResourceResponse.java:59:34:59:43 | url : String | +| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | InsecureWebResourceResponse.java:80:34:80:43 | url : String | +| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | InsecureWebResourceResponse.java:106:34:106:43 | url : String | +| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | InsecureWebResourceResponse.java:131:36:131:45 | url : String | +| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | InsecureWebResourceResponse.java:156:35:156:44 | url : String | +| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | InsecureWebResourceResponse.java:181:34:181:43 | url : String | +| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | InsecureWebResourceResponse.java:188:34:188:43 | url : String | +| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | InsecureWebResourceResponse.java:217:35:217:44 | url : String | +| InsecureWebResourceResponse.java:59:34:59:43 | url : String | InsecureWebResourceResponse.java:75:20:75:22 | url : String | +| InsecureWebResourceResponse.java:63:77:63:86 | url : String | InsecureWebResourceResponse.java:65:41:65:43 | url : String | | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | -| InsecureWebResourceResponse.java:65:41:65:43 | url : Object | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | +| InsecureWebResourceResponse.java:65:41:65:43 | url : String | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | | InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:68:71:68:81 | inputStream | | InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | | InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:80:34:80:43 | url : Object | InsecureWebResourceResponse.java:101:20:101:22 | url : Object | -| InsecureWebResourceResponse.java:84:77:84:86 | url : Object | InsecureWebResourceResponse.java:86:41:86:43 | url : Object | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:80:34:80:43 | url : String | InsecureWebResourceResponse.java:101:20:101:22 | url : String | +| InsecureWebResourceResponse.java:84:77:84:86 | url : String | InsecureWebResourceResponse.java:86:41:86:43 | url : String | | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | -| InsecureWebResourceResponse.java:86:41:86:43 | url : Object | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | +| InsecureWebResourceResponse.java:86:41:86:43 | url : String | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:91:75:91:85 | inputStream | | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:106:34:106:43 | url : Object | InsecureWebResourceResponse.java:127:20:127:22 | url : Object | -| InsecureWebResourceResponse.java:110:77:110:86 | url : Object | InsecureWebResourceResponse.java:112:41:112:43 | url : Object | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:106:34:106:43 | url : String | InsecureWebResourceResponse.java:127:20:127:22 | url : String | +| InsecureWebResourceResponse.java:110:77:110:86 | url : String | InsecureWebResourceResponse.java:112:41:112:43 | url : String | | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | -| InsecureWebResourceResponse.java:112:41:112:43 | url : Object | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | +| InsecureWebResourceResponse.java:112:41:112:43 | url : String | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | InsecureWebResourceResponse.java:115:75:115:78 | path : String | | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:117:75:117:85 | inputStream | | InsecureWebResourceResponse.java:115:75:115:78 | path : String | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | InsecureWebResourceResponse.java:115:55:115:108 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:131:36:131:45 | url : Object | InsecureWebResourceResponse.java:152:20:152:22 | url : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:156:35:156:44 | url : Object | InsecureWebResourceResponse.java:177:20:177:22 | url : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:181:34:181:43 | url : Object | InsecureWebResourceResponse.java:184:20:184:22 | url : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:188:34:188:43 | url : Object | InsecureWebResourceResponse.java:209:20:209:22 | url : Object | -| InsecureWebResourceResponse.java:192:77:192:102 | request : Object | InsecureWebResourceResponse.java:194:31:194:37 | request : Object | -| InsecureWebResourceResponse.java:194:31:194:37 | request : Object | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:131:36:131:45 | url : String | InsecureWebResourceResponse.java:152:20:152:22 | url : String | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:156:35:156:44 | url : String | InsecureWebResourceResponse.java:177:20:177:22 | url : String | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:181:34:181:43 | url : String | InsecureWebResourceResponse.java:184:20:184:22 | url : String | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:188:34:188:43 | url : String | InsecureWebResourceResponse.java:209:20:209:22 | url : String | +| InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | | InsecureWebResourceResponse.java:196:66:196:89 | getLastPathSegment(...) : String | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:199:75:199:85 | inputStream | | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:217:35:217:44 | url : Object | InsecureWebResourceResponse.java:226:20:226:22 | url : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | InsecureWebResourceResponse.java:63:77:63:86 | url : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | InsecureWebResourceResponse.java:84:77:84:86 | url : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | InsecureWebResourceResponse.java:110:77:110:86 | url : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | InsecureWebResourceResponse.java:192:77:192:102 | request : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | InsecureWebResourceResponse.java:232:69:232:78 | url : Object | -| InsecureWebResourceResponse.java:232:69:232:78 | url : Object | InsecureWebResourceResponse.java:234:33:234:35 | url : Object | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:217:35:217:44 | url : String | InsecureWebResourceResponse.java:226:20:226:22 | url : String | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:63:77:63:86 | url : String | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:84:77:84:86 | url : String | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:110:77:110:86 | url : String | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | InsecureWebResourceResponse.java:232:69:232:78 | url : String | +| InsecureWebResourceResponse.java:232:69:232:78 | url : String | InsecureWebResourceResponse.java:234:33:234:35 | url : String | | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | -| InsecureWebResourceResponse.java:234:33:234:35 | url : Object | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | +| InsecureWebResourceResponse.java:234:33:234:35 | url : String | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | | InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | InsecureWebResourceResponse.java:237:63:237:73 | inputStream | | InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | | InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | -| InsecureWebViewActivity.java:27:27:27:37 | getIntent(...) : Intent | InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : Object | -| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : Object | InsecureWebViewActivity.java:28:20:28:27 | inputUrl : Object | -| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : Object | InsecureWebViewActivity.java:42:28:42:37 | url : Object | -| InsecureWebViewActivity.java:42:28:42:37 | url : Object | InsecureWebViewActivity.java:43:25:43:27 | url : Object | -| InsecureWebViewActivity.java:43:25:43:27 | url : Object | InsecureWebViewActivity.java:53:77:53:86 | url : Object | -| InsecureWebViewActivity.java:53:77:53:86 | url : Object | InsecureWebViewActivity.java:55:41:55:43 | url : Object | +| InsecureWebViewActivity.java:27:27:27:37 | getIntent(...) : Intent | InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | +| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | +| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | InsecureWebViewActivity.java:42:28:42:37 | url : String | +| InsecureWebViewActivity.java:42:28:42:37 | url : String | InsecureWebViewActivity.java:43:25:43:27 | url : String | +| InsecureWebViewActivity.java:43:25:43:27 | url : String | InsecureWebViewActivity.java:53:77:53:86 | url : String | +| InsecureWebViewActivity.java:53:77:53:86 | url : String | InsecureWebViewActivity.java:55:41:55:43 | url : String | | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | -| InsecureWebViewActivity.java:55:41:55:43 | url : Object | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | +| InsecureWebViewActivity.java:55:41:55:43 | url : String | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | | InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | InsecureWebViewActivity.java:58:71:58:81 | inputStream | | InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | | InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | nodes | InsecureWebResourceResponse.java:28:27:28:37 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | -| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebResourceResponse.java:59:34:59:43 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:63:77:63:86 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:28:27:28:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | +| InsecureWebResourceResponse.java:30:25:30:32 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:32:25:32:32 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:34:25:34:32 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:36:26:36:33 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:38:26:38:33 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:40:25:40:32 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:42:25:42:32 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:44:26:44:33 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebResourceResponse.java:59:34:59:43 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:63:77:63:86 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:65:31:65:44 | parse(...) : Uri | semmle.label | parse(...) : Uri | -| InsecureWebResourceResponse.java:65:41:65:43 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:65:41:65:43 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:66:51:66:84 | new FileInputStream(...) : FileInputStream | semmle.label | new FileInputStream(...) : FileInputStream | | InsecureWebResourceResponse.java:66:71:66:73 | uri : Uri | semmle.label | uri : Uri | | InsecureWebResourceResponse.java:66:71:66:83 | getPath(...) : String | semmle.label | getPath(...) : String | | InsecureWebResourceResponse.java:68:71:68:81 | inputStream | semmle.label | inputStream | -| InsecureWebResourceResponse.java:75:20:75:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:80:34:80:43 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:84:77:84:86 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:75:20:75:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:80:34:80:43 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:84:77:84:86 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:86:31:86:44 | parse(...) : Uri | semmle.label | parse(...) : Uri | -| InsecureWebResourceResponse.java:86:41:86:43 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:86:41:86:43 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:88:42:88:90 | new File(...) : File | semmle.label | new File(...) : File | | InsecureWebResourceResponse.java:88:66:88:68 | uri : Uri | semmle.label | uri : Uri | | InsecureWebResourceResponse.java:88:66:88:89 | getLastPathSegment(...) : String | semmle.label | getLastPathSegment(...) : String | | InsecureWebResourceResponse.java:89:55:89:84 | new FileInputStream(...) : FileInputStream | semmle.label | new FileInputStream(...) : FileInputStream | | InsecureWebResourceResponse.java:89:75:89:83 | cacheFile : File | semmle.label | cacheFile : File | | InsecureWebResourceResponse.java:91:75:91:85 | inputStream | semmle.label | inputStream | -| InsecureWebResourceResponse.java:101:20:101:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:106:34:106:43 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:110:77:110:86 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:101:20:101:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:106:34:106:43 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:110:77:110:86 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:112:31:112:44 | parse(...) : Uri | semmle.label | parse(...) : Uri | -| InsecureWebResourceResponse.java:112:41:112:43 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:112:41:112:43 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:113:35:113:37 | uri : Uri | semmle.label | uri : Uri | | InsecureWebResourceResponse.java:113:35:113:47 | getPath(...) : String | semmle.label | getPath(...) : String | | InsecureWebResourceResponse.java:113:35:113:60 | substring(...) : String | semmle.label | substring(...) : String | @@ -154,16 +154,16 @@ nodes | InsecureWebResourceResponse.java:115:75:115:78 | path : String | semmle.label | path : String | | InsecureWebResourceResponse.java:115:75:115:107 | substring(...) : String | semmle.label | substring(...) : String | | InsecureWebResourceResponse.java:117:75:117:85 | inputStream | semmle.label | inputStream | -| InsecureWebResourceResponse.java:127:20:127:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:131:36:131:45 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:152:20:152:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:156:35:156:44 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:177:20:177:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:181:34:181:43 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:184:20:184:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:188:34:188:43 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:192:77:192:102 | request : Object | semmle.label | request : Object | -| InsecureWebResourceResponse.java:194:31:194:37 | request : Object | semmle.label | request : Object | +| InsecureWebResourceResponse.java:127:20:127:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:131:36:131:45 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:152:20:152:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:156:35:156:44 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:177:20:177:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:181:34:181:43 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:184:20:184:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:188:34:188:43 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:192:77:192:102 | request : WebResourceRequest | semmle.label | request : WebResourceRequest | +| InsecureWebResourceResponse.java:194:31:194:37 | request : WebResourceRequest | semmle.label | request : WebResourceRequest | | InsecureWebResourceResponse.java:194:31:194:46 | getUrl(...) : Uri | semmle.label | getUrl(...) : Uri | | InsecureWebResourceResponse.java:196:42:196:90 | new File(...) : File | semmle.label | new File(...) : File | | InsecureWebResourceResponse.java:196:66:196:68 | uri : Uri | semmle.label | uri : Uri | @@ -171,24 +171,24 @@ nodes | InsecureWebResourceResponse.java:197:55:197:84 | new FileInputStream(...) : FileInputStream | semmle.label | new FileInputStream(...) : FileInputStream | | InsecureWebResourceResponse.java:197:75:197:83 | cacheFile : File | semmle.label | cacheFile : File | | InsecureWebResourceResponse.java:199:75:199:85 | inputStream | semmle.label | inputStream | -| InsecureWebResourceResponse.java:209:20:209:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:217:35:217:44 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:226:20:226:22 | url : Object | semmle.label | url : Object | -| InsecureWebResourceResponse.java:232:69:232:78 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:209:20:209:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:217:35:217:44 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:226:20:226:22 | url : String | semmle.label | url : String | +| InsecureWebResourceResponse.java:232:69:232:78 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:234:23:234:36 | parse(...) : Uri | semmle.label | parse(...) : Uri | -| InsecureWebResourceResponse.java:234:33:234:35 | url : Object | semmle.label | url : Object | +| InsecureWebResourceResponse.java:234:33:234:35 | url : String | semmle.label | url : String | | InsecureWebResourceResponse.java:235:43:235:76 | new FileInputStream(...) : FileInputStream | semmle.label | new FileInputStream(...) : FileInputStream | | InsecureWebResourceResponse.java:235:63:235:65 | uri : Uri | semmle.label | uri : Uri | | InsecureWebResourceResponse.java:235:63:235:75 | getPath(...) : String | semmle.label | getPath(...) : String | | InsecureWebResourceResponse.java:237:63:237:73 | inputStream | semmle.label | inputStream | | InsecureWebViewActivity.java:27:27:27:37 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | -| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : Object | semmle.label | inputUrl : Object | -| InsecureWebViewActivity.java:42:28:42:37 | url : Object | semmle.label | url : Object | -| InsecureWebViewActivity.java:43:25:43:27 | url : Object | semmle.label | url : Object | -| InsecureWebViewActivity.java:53:77:53:86 | url : Object | semmle.label | url : Object | +| InsecureWebViewActivity.java:27:27:27:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | +| InsecureWebViewActivity.java:28:20:28:27 | inputUrl : String | semmle.label | inputUrl : String | +| InsecureWebViewActivity.java:42:28:42:37 | url : String | semmle.label | url : String | +| InsecureWebViewActivity.java:43:25:43:27 | url : String | semmle.label | url : String | +| InsecureWebViewActivity.java:53:77:53:86 | url : String | semmle.label | url : String | | InsecureWebViewActivity.java:55:31:55:44 | parse(...) : Uri | semmle.label | parse(...) : Uri | -| InsecureWebViewActivity.java:55:41:55:43 | url : Object | semmle.label | url : Object | +| InsecureWebViewActivity.java:55:41:55:43 | url : String | semmle.label | url : String | | InsecureWebViewActivity.java:56:51:56:84 | new FileInputStream(...) : FileInputStream | semmle.label | new FileInputStream(...) : FileInputStream | | InsecureWebViewActivity.java:56:71:56:73 | uri : Uri | semmle.label | uri : Uri | | InsecureWebViewActivity.java:56:71:56:83 | getPath(...) : String | semmle.label | getPath(...) : String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected index 43a64e4226a..9c5b6ce8b69 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-200/SensitiveAndroidFileLeak.expected @@ -1,47 +1,47 @@ edges | FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | -| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : Object | -| FileService.java:21:28:21:64 | getStringExtra(...) : Object | FileService.java:25:42:25:50 | localPath : Object | +| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | +| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | -| FileService.java:25:42:25:50 | localPath : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : Object | -| FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | -| FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:35:17:35:25 | sourceUri : Object | -| FileService.java:34:20:36:13 | {...} : Object[] [[]] : Object | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : Object | -| FileService.java:35:17:35:25 | sourceUri : Object | FileService.java:34:20:36:13 | {...} : Object[] [[]] : Object | -| FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : Object | -| FileService.java:44:33:44:52 | (...)... : Object | FileService.java:45:53:45:59 | ...[...] | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | +| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | +| FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | +| FileService.java:40:41:40:55 | params : Object[] | FileService.java:44:33:44:52 | (...)... : String[] | +| FileService.java:44:33:44:52 | (...)... : String[] | FileService.java:45:53:45:59 | ...[...] | | LeakFileActivity2.java:15:13:15:18 | intent : Intent | LeakFileActivity2.java:16:26:16:31 | intent : Intent | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:20:31:20:43 | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | -| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Object | -| LeakFileActivity.java:19:31:19:53 | getData(...) : Object | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | LeakFileActivity.java:21:58:21:82 | getPath(...) | +| LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | LeakFileActivity.java:21:58:21:82 | getPath(...) | nodes | FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent | | FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent | -| FileService.java:21:28:21:64 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | +| FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] | -| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : Object | semmle.label | makeParamsToExecute(...) : Object[] [[]] : Object | -| FileService.java:25:42:25:50 | localPath : Object | semmle.label | localPath : Object | -| FileService.java:32:13:32:28 | sourceUri : Object | semmle.label | sourceUri : Object | -| FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : Object | semmle.label | new Object[] : Object[] [[]] : Object | -| FileService.java:34:20:36:13 | {...} : Object[] [[]] : Object | semmle.label | {...} : Object[] [[]] : Object | -| FileService.java:35:17:35:25 | sourceUri : Object | semmle.label | sourceUri : Object | +| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | semmle.label | makeParamsToExecute(...) : Object[] [[]] : String | +| FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String | +| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String | +| FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | semmle.label | new Object[] : Object[] [[]] : String | +| FileService.java:34:20:36:13 | {...} : Object[] [[]] : String | semmle.label | {...} : Object[] [[]] : String | +| FileService.java:35:17:35:25 | sourceUri : String | semmle.label | sourceUri : String | | FileService.java:40:41:40:55 | params : Object[] | semmle.label | params : Object[] | -| FileService.java:44:33:44:52 | (...)... : Object | semmle.label | (...)... : Object | +| FileService.java:44:33:44:52 | (...)... : String[] | semmle.label | (...)... : String[] | | FileService.java:45:53:45:59 | ...[...] | semmle.label | ...[...] | | LeakFileActivity2.java:15:13:15:18 | intent : Intent | semmle.label | intent : Intent | | LeakFileActivity2.java:16:26:16:31 | intent : Intent | semmle.label | intent : Intent | | LeakFileActivity.java:14:35:14:38 | data : Intent | semmle.label | data : Intent | | LeakFileActivity.java:18:40:18:59 | contentIntent : Intent | semmle.label | contentIntent : Intent | | LeakFileActivity.java:19:31:19:43 | contentIntent : Intent | semmle.label | contentIntent : Intent | -| LeakFileActivity.java:19:31:19:53 | getData(...) : Object | semmle.label | getData(...) : Object | -| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Object | semmle.label | streamsToUpload : Object | +| LeakFileActivity.java:19:31:19:53 | getData(...) : Uri | semmle.label | getData(...) : Uri | +| LeakFileActivity.java:21:58:21:72 | streamsToUpload : Uri | semmle.label | streamsToUpload : Uri | | LeakFileActivity.java:21:58:21:82 | getPath(...) | semmle.label | getPath(...) | subpaths -| FileService.java:25:42:25:50 | localPath : Object | FileService.java:32:13:32:28 | sourceUri : Object | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : Object | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : Object | +| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | FileService.java:34:20:36:13 | new Object[] : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | #select | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:15:13:15:18 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:15:13:15:18 | intent | this user input | | FileService.java:45:53:45:59 | ...[...] | LeakFileActivity2.java:16:26:16:31 | intent : Intent | FileService.java:45:53:45:59 | ...[...] | Leaking arbitrary Android file from $@. | LeakFileActivity2.java:16:26:16:31 | intent | this user input | diff --git a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected index b6f894c3e5f..606cf994976 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-470/UnsafeReflection.expected @@ -6,17 +6,17 @@ edges | UnsafeReflection.java:34:33:34:70 | getParameter(...) : String | UnsafeReflection.java:39:58:39:71 | parameterValue | | UnsafeReflection.java:46:24:46:82 | beanIdOrClassName : String | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | | UnsafeReflection.java:46:132:46:168 | body : Map | UnsafeReflection.java:49:37:49:40 | body : Map | -| UnsafeReflection.java:49:23:49:59 | (...)... : Object | UnsafeReflection.java:53:67:53:73 | rawData : Object | +| UnsafeReflection.java:49:23:49:59 | (...)... : List | UnsafeReflection.java:53:67:53:73 | rawData : List | | UnsafeReflection.java:49:37:49:40 | body : Map | UnsafeReflection.java:49:37:49:59 | get(...) : Object | -| UnsafeReflection.java:49:37:49:59 | get(...) : Object | UnsafeReflection.java:49:23:49:59 | (...)... : Object | +| UnsafeReflection.java:49:37:49:59 | get(...) : Object | UnsafeReflection.java:49:23:49:59 | (...)... : List | | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | -| UnsafeReflection.java:53:67:53:73 | rawData : Object | UnsafeReflection.java:104:102:104:118 | data : Object | +| UnsafeReflection.java:53:67:53:73 | rawData : List | UnsafeReflection.java:104:102:104:118 | data : List | | UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | UnsafeReflection.java:68:76:68:89 | parameterValue | | UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | UnsafeReflection.java:83:76:83:89 | parameterValue | | UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | UnsafeReflection.java:98:76:98:89 | parameterValue | | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | UnsafeReflection.java:119:21:119:26 | method | | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | UnsafeReflection.java:119:35:119:38 | bean | -| UnsafeReflection.java:104:102:104:118 | data : Object | UnsafeReflection.java:119:41:119:44 | data | +| UnsafeReflection.java:104:102:104:118 | data : List | UnsafeReflection.java:119:41:119:44 | data | nodes | UnsafeReflection.java:21:28:21:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeReflection.java:22:33:22:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -29,11 +29,11 @@ nodes | UnsafeReflection.java:39:58:39:71 | parameterValue | semmle.label | parameterValue | | UnsafeReflection.java:46:24:46:82 | beanIdOrClassName : String | semmle.label | beanIdOrClassName : String | | UnsafeReflection.java:46:132:46:168 | body : Map | semmle.label | body : Map | -| UnsafeReflection.java:49:23:49:59 | (...)... : Object | semmle.label | (...)... : Object | +| UnsafeReflection.java:49:23:49:59 | (...)... : List | semmle.label | (...)... : List | | UnsafeReflection.java:49:37:49:40 | body : Map | semmle.label | body : Map | | UnsafeReflection.java:49:37:49:59 | get(...) : Object | semmle.label | get(...) : Object | | UnsafeReflection.java:53:30:53:46 | beanIdOrClassName : String | semmle.label | beanIdOrClassName : String | -| UnsafeReflection.java:53:67:53:73 | rawData : Object | semmle.label | rawData : Object | +| UnsafeReflection.java:53:67:53:73 | rawData : List | semmle.label | rawData : List | | UnsafeReflection.java:62:33:62:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeReflection.java:68:76:68:89 | parameterValue | semmle.label | parameterValue | | UnsafeReflection.java:77:33:77:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -41,7 +41,7 @@ nodes | UnsafeReflection.java:92:33:92:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeReflection.java:98:76:98:89 | parameterValue | semmle.label | parameterValue | | UnsafeReflection.java:104:34:104:57 | beanIdOrClassName : String | semmle.label | beanIdOrClassName : String | -| UnsafeReflection.java:104:102:104:118 | data : Object | semmle.label | data : Object | +| UnsafeReflection.java:104:102:104:118 | data : List | semmle.label | data : List | | UnsafeReflection.java:119:21:119:26 | method | semmle.label | method | | UnsafeReflection.java:119:35:119:38 | bean | semmle.label | bean | | UnsafeReflection.java:119:41:119:44 | data | semmle.label | data | diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected index a39906b4115..57874f96e18 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -6,11 +6,11 @@ edges | UnsafeLoadSpringResource.java:108:32:108:77 | fileName : String | UnsafeLoadSpringResource.java:116:51:116:58 | fileName | | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map | -| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map | -| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object | UnsafeResourceGet2.java:37:20:37:22 | url | +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | UnsafeResourceGet2.java:37:20:37:22 | url | | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | @@ -42,11 +42,11 @@ nodes | UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | | UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object | semmle.label | get(...) : Object | +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : String | semmle.label | get(...) : String | | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl | | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | | UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map | -| UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object | semmle.label | get(...) : Object | +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : String | semmle.label | get(...) : String | | UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url | | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url | diff --git a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected index 0c641999e27..28471144374 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-598/SensitiveGetQuery.expected @@ -1,11 +1,11 @@ edges | SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | SensitiveGetQuery2.java:14:30:14:32 | map : Map | -| SensitiveGetQuery2.java:14:21:14:48 | (...)... : Object | SensitiveGetQuery2.java:15:29:15:36 | password | -| SensitiveGetQuery2.java:14:21:14:48 | (...)... : Object | SensitiveGetQuery2.java:15:29:15:36 | password : Object | +| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password | +| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | SensitiveGetQuery2.java:15:29:15:36 | password : String | | SensitiveGetQuery2.java:14:30:14:32 | map : Map | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | -| SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | SensitiveGetQuery2.java:14:21:14:48 | (...)... : Object | -| SensitiveGetQuery2.java:15:29:15:36 | password : Object | SensitiveGetQuery2.java:18:40:18:54 | password : Object | -| SensitiveGetQuery2.java:18:40:18:54 | password : Object | SensitiveGetQuery2.java:19:61:19:68 | password | +| SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | +| SensitiveGetQuery2.java:15:29:15:36 | password : String | SensitiveGetQuery2.java:18:40:18:54 | password : String | +| SensitiveGetQuery2.java:18:40:18:54 | password : String | SensitiveGetQuery2.java:19:61:19:68 | password | | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | SensitiveGetQuery3.java:13:57:13:64 | password | | SensitiveGetQuery3.java:17:10:17:40 | getParameter(...) : String | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | | SensitiveGetQuery4.java:14:24:14:66 | getRequestParameter(...) : String | SensitiveGetQuery4.java:16:37:16:47 | accessToken | @@ -16,12 +16,12 @@ edges | SensitiveGetQuery.java:17:40:17:54 | password : String | SensitiveGetQuery.java:18:61:18:68 | password | nodes | SensitiveGetQuery2.java:12:13:12:37 | getParameterMap(...) : Map | semmle.label | getParameterMap(...) : Map | -| SensitiveGetQuery2.java:14:21:14:48 | (...)... : Object | semmle.label | (...)... : Object | +| SensitiveGetQuery2.java:14:21:14:48 | (...)... : String | semmle.label | (...)... : String | | SensitiveGetQuery2.java:14:30:14:32 | map : Map | semmle.label | map : Map | | SensitiveGetQuery2.java:14:30:14:48 | get(...) : Object | semmle.label | get(...) : Object | | SensitiveGetQuery2.java:15:29:15:36 | password | semmle.label | password | -| SensitiveGetQuery2.java:15:29:15:36 | password : Object | semmle.label | password : Object | -| SensitiveGetQuery2.java:18:40:18:54 | password : Object | semmle.label | password : Object | +| SensitiveGetQuery2.java:15:29:15:36 | password : String | semmle.label | password : String | +| SensitiveGetQuery2.java:18:40:18:54 | password : String | semmle.label | password : String | | SensitiveGetQuery2.java:19:61:19:68 | password | semmle.label | password | | SensitiveGetQuery3.java:12:21:12:60 | getRequestParameter(...) : String | semmle.label | getRequestParameter(...) : String | | SensitiveGetQuery3.java:13:57:13:64 | password | semmle.label | password | diff --git a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected index 73657a38158..5f0e5b028f9 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-755/NFEAndroidDoS.expected @@ -1,25 +1,25 @@ edges -| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | -| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | -| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | -| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | -| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | -| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | -| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | -| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | -| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | +| NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | +| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | +| NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | +| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | +| NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | +| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | +| NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | nodes | NFEAndroidDoS.java:13:24:13:34 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | +| NFEAndroidDoS.java:13:24:13:61 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | NFEAndroidDoS.java:14:21:14:51 | parseDouble(...) | semmle.label | parseDouble(...) | | NFEAndroidDoS.java:22:21:22:31 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | +| NFEAndroidDoS.java:22:21:22:55 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | NFEAndroidDoS.java:23:15:23:40 | parseInt(...) | semmle.label | parseInt(...) | | NFEAndroidDoS.java:25:22:25:32 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | +| NFEAndroidDoS.java:25:22:25:57 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | NFEAndroidDoS.java:26:16:26:42 | parseInt(...) | semmle.label | parseInt(...) | | NFEAndroidDoS.java:43:24:43:34 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : Object | semmle.label | getStringExtra(...) : Object | +| NFEAndroidDoS.java:43:24:43:61 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | | NFEAndroidDoS.java:44:21:44:43 | new Double(...) | semmle.label | new Double(...) | | NFEAndroidDoS.java:47:21:47:47 | valueOf(...) | semmle.label | valueOf(...) | subpaths diff --git a/java/ql/test/ext/TestModels/Test.java b/java/ql/test/ext/TestModels/Test.java index 83efd12e967..6bbc7a07879 100644 --- a/java/ql/test/ext/TestModels/Test.java +++ b/java/ql/test/ext/TestModels/Test.java @@ -82,7 +82,7 @@ public class Test { Connection con = DriverManager.getConnection(""); PreparedStatement ps1 = con.prepareStatement("UPDATE EMPLOYEES SET NAME = ? WHERE ID = ?"); ps1.setString(1, (String)source()); - sink(ps1); // $hasValueFlow + sink(ps1); // safe // java.util.concurrent.atomic AtomicReference ar = new AtomicReference(source()); diff --git a/java/ql/test/ext/TestModels/test.expected b/java/ql/test/ext/TestModels/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/ext/TestModels/test.expected +++ b/java/ql/test/ext/TestModels/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/ext/TestModels/test.ql b/java/ql/test/ext/TestModels/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/ext/TestModels/test.ql +++ b/java/ql/test/ext/TestModels/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/kotlin/library-tests/classes/diags.ql b/java/ql/test/kotlin/library-tests/classes/diags.ql deleted file mode 100644 index f791c30d153..00000000000 --- a/java/ql/test/kotlin/library-tests/classes/diags.ql +++ /dev/null @@ -1,8 +0,0 @@ -import semmle.code.java.Diagnostics - -from Diagnostic d -where d.getSeverity() > 2 -select d, d.getGeneratedBy(), d.getSeverity(), d.getTag(), d.getMessage(), - d.getFullMessage() - .regexpReplaceAll("^\\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} K\\] ", - "[DATE TIME K] ") diff --git a/java/ql/test/kotlin/library-tests/dataflow/summaries/test.expected b/java/ql/test/kotlin/library-tests/dataflow/summaries/test.expected index f566914ba89..f72956fded3 100644 --- a/java/ql/test/kotlin/library-tests/dataflow/summaries/test.expected +++ b/java/ql/test/kotlin/library-tests/dataflow/summaries/test.expected @@ -1,3 +1,5 @@ +failures +testFailures | test.kt:28:14:28:21 | getSecond(...) | Unexpected result: hasTaintFlow=a | | test.kt:35:14:35:27 | component1(...) | Unexpected result: hasTaintFlow=d | | test.kt:41:14:41:22 | getSecond(...) | Unexpected result: hasTaintFlow=e | diff --git a/java/ql/test/kotlin/library-tests/dataflow/summaries/test.ql b/java/ql/test/kotlin/library-tests/dataflow/summaries/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/kotlin/library-tests/dataflow/summaries/test.ql +++ b/java/ql/test/kotlin/library-tests/dataflow/summaries/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/callback-dispatch/test.expected b/java/ql/test/library-tests/dataflow/callback-dispatch/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/callback-dispatch/test.expected +++ b/java/ql/test/library-tests/dataflow/callback-dispatch/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql b/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql index 131d0a5706d..a4f8b4e822d 100644 --- a/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql +++ b/java/ql/test/library-tests/dataflow/callback-dispatch/test.ql @@ -12,12 +12,10 @@ module Config implements DataFlow::ConfigSig { module Flow = DataFlow::Global; -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "flow" } - override string getARelevantTag() { result = "flow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "flow" and exists(DataFlow::Node src, DataFlow::Node sink | Flow::flow(src, sink) | sink.getLocation() = location and @@ -26,3 +24,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/dataflow/callctx/test.expected b/java/ql/test/library-tests/dataflow/callctx/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/callctx/test.expected +++ b/java/ql/test/library-tests/dataflow/callctx/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/callctx/test.ql b/java/ql/test/library-tests/dataflow/callctx/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/dataflow/callctx/test.ql +++ b/java/ql/test/library-tests/dataflow/callctx/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/collections/containerflow.expected b/java/ql/test/library-tests/dataflow/collections/containerflow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/collections/containerflow.expected +++ b/java/ql/test/library-tests/dataflow/collections/containerflow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/collections/containerflow.ql b/java/ql/test/library-tests/dataflow/collections/containerflow.ql index 992971d6dc7..4b1a19535ea 100644 --- a/java/ql/test/library-tests/dataflow/collections/containerflow.ql +++ b/java/ql/test/library-tests/dataflow/collections/containerflow.ql @@ -1,3 +1,4 @@ import java import semmle.code.java.dataflow.DataFlow import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.expected b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.expected +++ b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.ql b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.ql index 5a0ca1865c1..29d355671ec 100644 --- a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.ql +++ b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.ql @@ -18,12 +18,10 @@ module TaintFlowConfig implements DataFlow::ConfigSig { module TaintFlow = TaintTracking::Global; -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "hasTaintFlow" } - override string getARelevantTag() { result = ["hasTaintFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasTaintFlow" and exists(DataFlow::Node sink | TaintFlow::flowTo(sink) | sink.getLocation() = location and @@ -32,3 +30,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected b/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected +++ b/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/fluent-methods/flow.ql b/java/ql/test/library-tests/dataflow/fluent-methods/flow.ql index 4a9794ab351..944abac0642 100644 --- a/java/ql/test/library-tests/dataflow/fluent-methods/flow.ql +++ b/java/ql/test/library-tests/dataflow/fluent-methods/flow.ql @@ -2,6 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.FlowSteps import TestUtilities.InlineFlowTest +import DefaultFlowTest class Model extends FluentMethod { Model() { this.getName() = "modelledFluentMethod" } diff --git a/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.ql b/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.ql index cd51fbc746a..51abe1a6c5a 100644 --- a/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.ql +++ b/java/ql/test/library-tests/dataflow/local-additional-taint/localAdditionalTaintStep.ql @@ -12,15 +12,20 @@ predicate taintFlowUpdate(DataFlow::ParameterNode p1, DataFlow::ParameterNode p2 exists(DataFlow::PostUpdateNode ret | localTaint(p1, ret) | ret.getPreUpdateNode() = p2) } +predicate summaryStep(FlowSummaryNode src, FlowSummaryNode sink) { + FlowSummaryImpl::Private::Steps::summaryLocalStep(src.getSummaryNode(), sink.getSummaryNode(), + false) or + FlowSummaryImpl::Private::Steps::summaryReadStep(src.getSummaryNode(), _, sink.getSummaryNode()) or + FlowSummaryImpl::Private::Steps::summaryStoreStep(src.getSummaryNode(), _, sink.getSummaryNode()) +} + from DataFlow::Node src, DataFlow::Node sink where ( localAdditionalTaintStep(src, sink) or FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(src, sink, _) ) and - not FlowSummaryImpl::Private::Steps::summaryLocalStep(src, sink, false) and - not FlowSummaryImpl::Private::Steps::summaryReadStep(src, _, sink) and - not FlowSummaryImpl::Private::Steps::summaryStoreStep(src, _, sink) + not summaryStep(src, sink) or exists(ArgumentNode arg, MethodAccess call, DataFlow::ParameterNode p, int i | src = arg and diff --git a/java/ql/test/library-tests/dataflow/state/test.expected b/java/ql/test/library-tests/dataflow/state/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/state/test.expected +++ b/java/ql/test/library-tests/dataflow/state/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/state/test.ql b/java/ql/test/library-tests/dataflow/state/test.ql index b82dd95c0b1..b6063962ef2 100644 --- a/java/ql/test/library-tests/dataflow/state/test.ql +++ b/java/ql/test/library-tests/dataflow/state/test.ql @@ -59,12 +59,10 @@ module Flow = TaintTracking::GlobalWithState; module PartialFlow = Flow::FlowExploration; -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = ["pFwd", "pRev", "flow"] } - override string getARelevantTag() { result = ["pFwd", "pRev", "flow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "flow" and exists(Flow::PathNode src, Flow::PathNode sink | Flow::flowPath(src, sink) and @@ -92,3 +90,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/dataflow/stream-collect/test.expected b/java/ql/test/library-tests/dataflow/stream-collect/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/stream-collect/test.expected +++ b/java/ql/test/library-tests/dataflow/stream-collect/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/stream-collect/test.ql b/java/ql/test/library-tests/dataflow/stream-collect/test.ql index c4b63c87071..50e3f8d2f7d 100644 --- a/java/ql/test/library-tests/dataflow/stream-collect/test.ql +++ b/java/ql/test/library-tests/dataflow/stream-collect/test.ql @@ -1 +1,2 @@ import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/synth-global/test.expected b/java/ql/test/library-tests/dataflow/synth-global/test.expected index 81332464f79..ae4c33edb3d 100644 --- a/java/ql/test/library-tests/dataflow/synth-global/test.expected +++ b/java/ql/test/library-tests/dataflow/synth-global/test.expected @@ -1,2 +1,3 @@ failures +testFailures invalidModelRow diff --git a/java/ql/test/library-tests/dataflow/synth-global/test.ql b/java/ql/test/library-tests/dataflow/synth-global/test.ql index 0d9f2265afc..53f8aa6a6f6 100644 --- a/java/ql/test/library-tests/dataflow/synth-global/test.ql +++ b/java/ql/test/library-tests/dataflow/synth-global/test.ql @@ -1,3 +1,4 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest import ModelValidation diff --git a/java/ql/test/library-tests/dataflow/taint-format/test.expected b/java/ql/test/library-tests/dataflow/taint-format/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/taint-format/test.expected +++ b/java/ql/test/library-tests/dataflow/taint-format/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/taint-format/test.ql b/java/ql/test/library-tests/dataflow/taint-format/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/dataflow/taint-format/test.ql +++ b/java/ql/test/library-tests/dataflow/taint-format/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.expected b/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.expected +++ b/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.ql b/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.ql +++ b/java/ql/test/library-tests/dataflow/taint-gson/dataFlow.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.expected b/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.expected +++ b/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.ql b/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.ql +++ b/java/ql/test/library-tests/dataflow/taint-jackson/dataFlow.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/dataflow/taintsources/Hudson.java b/java/ql/test/library-tests/dataflow/taintsources/Hudson.java new file mode 100644 index 00000000000..2a180eeb5fb --- /dev/null +++ b/java/ql/test/library-tests/dataflow/taintsources/Hudson.java @@ -0,0 +1,16 @@ +import hudson.FilePath; + +public class Hudson { + + private static void sink(Object o) {} + + public static void test() throws Exception { + FilePath fp = null; + sink(FilePath.newInputStreamDenyingSymlinkAsNeeded(null, null, null)); // $hasLocalValueFlow + sink(FilePath.openInputStream(null, null)); // $hasLocalValueFlow + sink(fp.read()); // $hasLocalValueFlow + sink(fp.read(null)); // $hasLocalValueFlow + sink(fp.readFromOffset(-1)); // $hasLocalValueFlow + sink(fp.readToString()); // $hasLocalValueFlow + } +} diff --git a/java/ql/test/library-tests/dataflow/taintsources/Stapler.java b/java/ql/test/library-tests/dataflow/taintsources/Stapler.java new file mode 100644 index 00000000000..96be00270ba --- /dev/null +++ b/java/ql/test/library-tests/dataflow/taintsources/Stapler.java @@ -0,0 +1,14 @@ +import org.kohsuke.stapler.InjectedParameter; + +public class Stapler { + + @InjectedParameter + private @interface MyInjectedParameter { + } + + private static void sink(Object o) {} + + public static void test(@MyInjectedParameter String src) { + sink(src); // $ hasRemoteValueFlow + } +} diff --git a/java/ql/test/library-tests/dataflow/taintsources/local.expected b/java/ql/test/library-tests/dataflow/taintsources/local.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/local.expected +++ b/java/ql/test/library-tests/dataflow/taintsources/local.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/taintsources/local.ql b/java/ql/test/library-tests/dataflow/taintsources/local.ql index a174629ca6e..45697947173 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/local.ql +++ b/java/ql/test/library-tests/dataflow/taintsources/local.ql @@ -26,12 +26,10 @@ module LocalTaintConfig implements DataFlow::ConfigSig { module LocalTaintFlow = TaintTracking::Global; -class LocalFlowTest extends InlineExpectationsTest { - LocalFlowTest() { this = "LocalFlowTest" } +module LocalFlowTest implements TestSig { + string getARelevantTag() { result = ["hasLocalValueFlow", "hasLocalTaintFlow"] } - override string getARelevantTag() { result = ["hasLocalValueFlow", "hasLocalTaintFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasLocalValueFlow" and exists(DataFlow::Node sink | LocalValueFlow::flowTo(sink) | sink.getLocation() = location and @@ -49,3 +47,5 @@ class LocalFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/dataflow/taintsources/options b/java/ql/test/library-tests/dataflow/taintsources/options index c19a2aa5fb3..c8249b05e38 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/options +++ b/java/ql/test/library-tests/dataflow/taintsources/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/akka-2.6.x:${testdir}/../../../stubs/jwtk-jjwt-0.11.2 \ No newline at end of file +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/akka-2.6.x:${testdir}/../../../stubs/jwtk-jjwt-0.11.2:${testdir}/../../../stubs/jenkins:${testdir}/../../../stubs/stapler-1.263 \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/taintsources/remote.expected b/java/ql/test/library-tests/dataflow/taintsources/remote.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/remote.expected +++ b/java/ql/test/library-tests/dataflow/taintsources/remote.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/dataflow/taintsources/remote.ql b/java/ql/test/library-tests/dataflow/taintsources/remote.ql index fa1f206ca74..7f58a68d438 100644 --- a/java/ql/test/library-tests/dataflow/taintsources/remote.ql +++ b/java/ql/test/library-tests/dataflow/taintsources/remote.ql @@ -22,12 +22,10 @@ module RemoteTaintConfig implements DataFlow::ConfigSig { module RemoteTaintFlow = TaintTracking::Global; -class RemoteFlowTest extends InlineExpectationsTest { - RemoteFlowTest() { this = "RemoteFlowTest" } +module RemoteFlowTest implements TestSig { + string getARelevantTag() { result = ["hasRemoteValueFlow", "hasRemoteTaintFlow"] } - override string getARelevantTag() { result = ["hasRemoteValueFlow", "hasRemoteTaintFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasRemoteValueFlow" and exists(DataFlow::Node sink | RemoteValueFlow::flowTo(sink) | sink.getLocation() = location and @@ -45,3 +43,5 @@ class RemoteFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.expected b/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.expected +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.ql b/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.ql index 70c0cef4917..a1d25dc275e 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.ql +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxRs.ql @@ -3,10 +3,8 @@ import semmle.code.java.frameworks.JaxWS import semmle.code.java.security.XSS import TestUtilities.InlineExpectationsTest -class JaxRsTest extends InlineExpectationsTest { - JaxRsTest() { this = "JaxRsTest" } - - override string getARelevantTag() { +module JaxRsTest implements TestSig { + string getARelevantTag() { result = [ "ResourceMethod", "RootResourceClass", "NonRootResourceClass", @@ -18,7 +16,7 @@ class JaxRsTest extends InlineExpectationsTest { ] } - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "ResourceMethod" and exists(JaxRsResourceMethod resourceMethod | resourceMethod.getLocation() = location and @@ -168,3 +166,5 @@ class JaxRsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.expected b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.expected +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.ql b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.ql index d0ab4274b12..93ab3fe066d 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.ql +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.ql @@ -13,16 +13,4 @@ module Config implements DataFlow::ConfigSig { predicate isSink = DefaultFlowConfig::isSink/1; } -module TaintFlow = TaintTracking::Global; - -module ValueFlow = DataFlow::Global; - -class Test extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node source, DataFlow::Node sink) { - TaintFlow::flow(source, sink) - } - - override predicate hasValueFlow(DataFlow::Node source, DataFlow::Node sink) { - ValueFlow::flow(source, sink) - } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.expected b/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.expected +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.ql b/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.ql index 6ebd597bb0a..8ccc69dc8c2 100644 --- a/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.ql +++ b/java/ql/test/library-tests/frameworks/JaxWs/JaxWsEndpoint.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.frameworks.JaxWS import TestUtilities.InlineExpectationsTest -class JaxWsEndpointTest extends InlineExpectationsTest { - JaxWsEndpointTest() { this = "JaxWsEndpointTest" } +module JaxWsEndpointTest implements TestSig { + string getARelevantTag() { result = ["JaxWsEndpoint", "JaxWsEndpointRemoteMethod"] } - override string getARelevantTag() { result = ["JaxWsEndpoint", "JaxWsEndpointRemoteMethod"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "JaxWsEndpoint" and exists(JaxWsEndpoint jaxWsEndpoint | jaxWsEndpoint.getLocation() = location and @@ -25,3 +23,5 @@ class JaxWsEndpointTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/android/asynctask/test.expected b/java/ql/test/library-tests/frameworks/android/asynctask/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/asynctask/test.expected +++ b/java/ql/test/library-tests/frameworks/android/asynctask/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/asynctask/test.ql b/java/ql/test/library-tests/frameworks/android/asynctask/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/android/asynctask/test.ql +++ b/java/ql/test/library-tests/frameworks/android/asynctask/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.expected b/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.expected +++ b/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.ql b/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.ql +++ b/java/ql/test/library-tests/frameworks/android/content-provider-summaries/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/test.expected b/java/ql/test/library-tests/frameworks/android/content-provider/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider/test.expected +++ b/java/ql/test/library-tests/frameworks/android/content-provider/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/content-provider/test.ql b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql index f068b30b0d5..2c6bd09dc40 100644 --- a/java/ql/test/library-tests/frameworks/android/content-provider/test.ql +++ b/java/ql/test/library-tests/frameworks/android/content-provider/test.ql @@ -10,12 +10,4 @@ module ProviderTaintFlowConfig implements DataFlow::ConfigSig { int fieldFlowBranchLimit() { result = DefaultFlowConfig::fieldFlowBranchLimit() } } -module ProviderTaintFlow = TaintTracking::Global; - -class ProviderInlineFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - ProviderTaintFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/external-storage/test.expected b/java/ql/test/library-tests/frameworks/android/external-storage/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/external-storage/test.expected +++ b/java/ql/test/library-tests/frameworks/android/external-storage/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/external-storage/test.ql b/java/ql/test/library-tests/frameworks/android/external-storage/test.ql index c73c0a5c6c9..64ff27077df 100644 --- a/java/ql/test/library-tests/frameworks/android/external-storage/test.ql +++ b/java/ql/test/library-tests/frameworks/android/external-storage/test.ql @@ -11,10 +11,4 @@ module Config implements DataFlow::ConfigSig { } } -module Flow = TaintTracking::Global; - -class ExternalStorageTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { Flow::flow(src, sink) } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/test.expected b/java/ql/test/library-tests/frameworks/android/flow-steps/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/flow-steps/test.expected +++ b/java/ql/test/library-tests/frameworks/android/flow-steps/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/test.ql b/java/ql/test/library-tests/frameworks/android/flow-steps/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/android/flow-steps/test.ql +++ b/java/ql/test/library-tests/frameworks/android/flow-steps/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/intent/test.expected b/java/ql/test/library-tests/frameworks/android/intent/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/test.expected +++ b/java/ql/test/library-tests/frameworks/android/intent/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/intent/test.ql b/java/ql/test/library-tests/frameworks/android/intent/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/android/intent/test.ql +++ b/java/ql/test/library-tests/frameworks/android/intent/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/notification/test.expected b/java/ql/test/library-tests/frameworks/android/notification/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/notification/test.expected +++ b/java/ql/test/library-tests/frameworks/android/notification/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/notification/test.ql b/java/ql/test/library-tests/frameworks/android/notification/test.ql index f0a60550d4d..07c022b1265 100644 --- a/java/ql/test/library-tests/frameworks/android/notification/test.ql +++ b/java/ql/test/library-tests/frameworks/android/notification/test.ql @@ -1,3 +1,4 @@ import java import semmle.code.java.frameworks.android.Intent import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/slice/test.expected b/java/ql/test/library-tests/frameworks/android/slice/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/slice/test.expected +++ b/java/ql/test/library-tests/frameworks/android/slice/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/slice/test.ql b/java/ql/test/library-tests/frameworks/android/slice/test.ql index b3c5fe78094..787f93df5a0 100644 --- a/java/ql/test/library-tests/frameworks/android/slice/test.ql +++ b/java/ql/test/library-tests/frameworks/android/slice/test.ql @@ -11,8 +11,6 @@ module SliceValueFlowConfig implements DataFlow::ConfigSig { predicate isSink = DefaultFlowConfig::isSink/1; } -module SliceValueFlow = DataFlow::Global; - module SliceTaintFlowConfig implements DataFlow::ConfigSig { predicate isSource = DefaultFlowConfig::isSource/1; @@ -24,14 +22,4 @@ module SliceTaintFlowConfig implements DataFlow::ConfigSig { } } -module SliceTaintFlow = TaintTracking::Global; - -class SliceFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node source, DataFlow::Node sink) { - SliceValueFlow::flow(source, sink) - } - - override predicate hasTaintFlow(DataFlow::Node source, DataFlow::Node sink) { - SliceTaintFlow::flow(source, sink) - } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql index 64c0f48ffa6..5b163a81935 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql @@ -10,12 +10,4 @@ module SourceValueFlowConfig implements DataFlow::ConfigSig { int fieldFlowBranchLimit() { result = DefaultFlowConfig::fieldFlowBranchLimit() } } -module SourceValueFlow = DataFlow::Global; - -class SourceInlineFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { - SourceValueFlow::flow(src, sink) - } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { none() } -} +import ValueFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.expected b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.expected +++ b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql index 5bbe2cab89c..64cb38486de 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql +++ b/java/ql/test/library-tests/frameworks/android/taint-database/flowSteps.ql @@ -14,12 +14,10 @@ module Config implements DataFlow::ConfigSig { module Flow = TaintTracking::Global; -class FlowStepTest extends InlineExpectationsTest { - FlowStepTest() { this = "FlowStepTest" } +module FlowStepTest implements TestSig { + string getARelevantTag() { result = "taintReachesReturn" } - override string getARelevantTag() { result = "taintReachesReturn" } - - override predicate hasActualResult(Location l, string element, string tag, string value) { + predicate hasActualResult(Location l, string element, string tag, string value) { tag = "taintReachesReturn" and value = "" and exists(DataFlow::Node source | Flow::flow(source, _) | @@ -28,3 +26,5 @@ class FlowStepTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.expected b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.expected +++ b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql index 234b7ca74b0..c0661820294 100644 --- a/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql +++ b/java/ql/test/library-tests/frameworks/android/taint-database/sinks.ql @@ -14,12 +14,10 @@ module Config implements DataFlow::ConfigSig { module Flow = TaintTracking::Global; -class SinkTest extends InlineExpectationsTest { - SinkTest() { this = "SinkTest" } +module SinkTest implements TestSig { + string getARelevantTag() { result = "taintReachesSink" } - override string getARelevantTag() { result = "taintReachesSink" } - - override predicate hasActualResult(Location l, string element, string tag, string value) { + predicate hasActualResult(Location l, string element, string tag, string value) { tag = "taintReachesSink" and value = "" and exists(DataFlow::Node source | Flow::flow(source, _) | @@ -28,3 +26,5 @@ class SinkTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/android/uri/test.expected b/java/ql/test/library-tests/frameworks/android/uri/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/android/uri/test.expected +++ b/java/ql/test/library-tests/frameworks/android/uri/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/android/uri/test.ql b/java/ql/test/library-tests/frameworks/android/uri/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/android/uri/test.ql +++ b/java/ql/test/library-tests/frameworks/android/uri/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/android/widget/test.expected b/java/ql/test/library-tests/frameworks/android/widget/test.expected index 8329ef6b41b..5390495c737 100644 --- a/java/ql/test/library-tests/frameworks/android/widget/test.expected +++ b/java/ql/test/library-tests/frameworks/android/widget/test.expected @@ -1,2 +1,3 @@ failures +testFailures valueOf diff --git a/java/ql/test/library-tests/frameworks/android/widget/test.ql b/java/ql/test/library-tests/frameworks/android/widget/test.ql index ddabfd1f27a..3d476b8bd5e 100644 --- a/java/ql/test/library-tests/frameworks/android/widget/test.ql +++ b/java/ql/test/library-tests/frameworks/android/widget/test.ql @@ -1,6 +1,7 @@ import java import semmle.code.java.dataflow.FlowSources import TestUtilities.InlineFlowTest +import DefaultFlowTest query predicate valueOf(MethodAccess ma) { ma.getMethod().hasQualifiedName("java.lang", "String", "valueOf") diff --git a/java/ql/test/library-tests/frameworks/apache-ant/test.expected b/java/ql/test/library-tests/frameworks/apache-ant/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/apache-ant/test.expected +++ b/java/ql/test/library-tests/frameworks/apache-ant/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/apache-ant/test.ql b/java/ql/test/library-tests/frameworks/apache-ant/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/apache-ant/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-ant/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/apache-collections/Test.java b/java/ql/test/library-tests/frameworks/apache-collections/Test.java index 188849457ac..09906405d75 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/Test.java +++ b/java/ql/test/library-tests/frameworks/apache-collections/Test.java @@ -721,14 +721,14 @@ public class Test { { // "org.apache.commons.collections4;MapUtils;true;getMap;;;MapValue of Argument[0];ReturnValue;value;manual" Map out = null; - Map in = newTreeMapWithMapValue((String)source()); + Map in = newTreeMapWithMapValue((Map)source()); out = MapUtils.getMap(in, null, null); sink(out); // $ hasValueFlow } { // "org.apache.commons.collections4;MapUtils;true;getMap;;;MapValue of Argument[0];ReturnValue;value;manual" Map out = null; - Map in = newTreeMapWithMapValue((String)source()); + Map in = newTreeMapWithMapValue((Map)source()); out = MapUtils.getMap(in, null); sink(out); // $ hasValueFlow } @@ -7257,4 +7257,4 @@ public class Test { } } -} \ No newline at end of file +} diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.expected b/java/ql/test/library-tests/frameworks/apache-collections/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.expected +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.ql b/java/ql/test/library-tests/frameworks/apache-collections/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/apache-commons-compress/test.expected b/java/ql/test/library-tests/frameworks/apache-commons-compress/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-compress/test.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-compress/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/apache-commons-compress/test.ql b/java/ql/test/library-tests/frameworks/apache-commons-compress/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-compress/test.ql +++ b/java/ql/test/library-tests/frameworks/apache-commons-compress/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.ql b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.ql +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/apache-http/flow.expected b/java/ql/test/library-tests/frameworks/apache-http/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/apache-http/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-http/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/apache-http/flow.ql b/java/ql/test/library-tests/frameworks/apache-http/flow.ql index 20069103a4a..540b4847ff3 100644 --- a/java/ql/test/library-tests/frameworks/apache-http/flow.ql +++ b/java/ql/test/library-tests/frameworks/apache-http/flow.ql @@ -21,10 +21,4 @@ module Config implements DataFlow::ConfigSig { } } -module Flow = TaintTracking::Global; - -class HasFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { Flow::flow(src, sink) } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/frameworks/gson/test.expected b/java/ql/test/library-tests/frameworks/gson/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/gson/test.expected +++ b/java/ql/test/library-tests/frameworks/gson/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/gson/test.ql b/java/ql/test/library-tests/frameworks/gson/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/gson/test.ql +++ b/java/ql/test/library-tests/frameworks/gson/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/guava/generated/cache/test.expected b/java/ql/test/library-tests/frameworks/guava/generated/cache/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/cache/test.expected +++ b/java/ql/test/library-tests/frameworks/guava/generated/cache/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/guava/generated/cache/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/cache/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/cache/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/cache/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql +++ b/java/ql/test/library-tests/frameworks/guava/generated/collect/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected +++ b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql index fbfc56486f8..300475bd6af 100644 --- a/java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql +++ b/java/ql/test/library-tests/frameworks/guava/handwritten/flow.ql @@ -24,12 +24,10 @@ module ValueFlowConfig implements DataFlow::ConfigSig { module ValueFlow = DataFlow::Global; -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = ["numTaintFlow", "numValueFlow"] } - override string getARelevantTag() { result = ["numTaintFlow", "numValueFlow"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "numTaintFlow" and exists(DataFlow::Node src, DataFlow::Node sink, int num | TaintFlow::flow(src, sink) | not ValueFlow::flow(src, sink) and @@ -48,3 +46,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/hudson/test.expected b/java/ql/test/library-tests/frameworks/hudson/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/hudson/test.expected +++ b/java/ql/test/library-tests/frameworks/hudson/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/hudson/test.ql b/java/ql/test/library-tests/frameworks/hudson/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/hudson/test.ql +++ b/java/ql/test/library-tests/frameworks/hudson/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/jackson/test.expected b/java/ql/test/library-tests/frameworks/jackson/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jackson/test.expected +++ b/java/ql/test/library-tests/frameworks/jackson/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jackson/test.ql b/java/ql/test/library-tests/frameworks/jackson/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/jackson/test.ql +++ b/java/ql/test/library-tests/frameworks/jackson/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/javax-json/test.expected b/java/ql/test/library-tests/frameworks/javax-json/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/javax-json/test.expected +++ b/java/ql/test/library-tests/frameworks/javax-json/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/javax-json/test.ql b/java/ql/test/library-tests/frameworks/javax-json/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/javax-json/test.ql +++ b/java/ql/test/library-tests/frameworks/javax-json/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/jdk/java.io/test.expected b/java/ql/test/library-tests/frameworks/jdk/java.io/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.io/test.expected +++ b/java/ql/test/library-tests/frameworks/jdk/java.io/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jdk/java.io/test.ql b/java/ql/test/library-tests/frameworks/jdk/java.io/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.io/test.ql +++ b/java/ql/test/library-tests/frameworks/jdk/java.io/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/jdk/java.net/test.expected b/java/ql/test/library-tests/frameworks/jdk/java.net/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.net/test.expected +++ b/java/ql/test/library-tests/frameworks/jdk/java.net/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jdk/java.net/test.ql b/java/ql/test/library-tests/frameworks/jdk/java.net/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.net/test.ql +++ b/java/ql/test/library-tests/frameworks/jdk/java.net/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.expected b/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.expected +++ b/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.ql b/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.ql +++ b/java/ql/test/library-tests/frameworks/jdk/java.nio.file/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/jms/FlowTest.expected b/java/ql/test/library-tests/frameworks/jms/FlowTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jms/FlowTest.expected +++ b/java/ql/test/library-tests/frameworks/jms/FlowTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jms/FlowTest.ql b/java/ql/test/library-tests/frameworks/jms/FlowTest.ql index 3644b87e6d3..ef42c248189 100644 --- a/java/ql/test/library-tests/frameworks/jms/FlowTest.ql +++ b/java/ql/test/library-tests/frameworks/jms/FlowTest.ql @@ -14,15 +14,15 @@ module TestConfig implements DataFlow::ConfigSig { module TestFlow = TaintTracking::Global; -class JmsFlowTest extends InlineExpectationsTest { - JmsFlowTest() { this = "JmsFlowTest" } +module JmsFlowTest implements TestSig { + string getARelevantTag() { result = "tainted" } - override string getARelevantTag() { result = "tainted" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "tainted" and exists(TestFlow::PathNode sink | TestFlow::flowPath(_, sink) | location = sink.getNode().getLocation() and element = sink.getNode().toString() and value = "" ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.expected b/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.expected +++ b/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.ql b/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.ql index 6d1d496075d..78b1dda532e 100644 --- a/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.ql +++ b/java/ql/test/library-tests/frameworks/jms/RemoteSourcesTest.ql @@ -2,15 +2,15 @@ import java import semmle.code.java.dataflow.FlowSources import TestUtilities.InlineExpectationsTest -class JmsRemoteSourcesTest extends InlineExpectationsTest { - JmsRemoteSourcesTest() { this = "JmsRemoteSourcesTest" } +module JmsRemoteSourcesTest implements TestSig { + string getARelevantTag() { result = "source" } - override string getARelevantTag() { result = "source" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "source" and exists(RemoteFlowSource source | location = source.getLocation() and element = source.toString() and value = "" ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/json-java/test.expected b/java/ql/test/library-tests/frameworks/json-java/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/json-java/test.expected +++ b/java/ql/test/library-tests/frameworks/json-java/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/json-java/test.ql b/java/ql/test/library-tests/frameworks/json-java/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/json-java/test.ql +++ b/java/ql/test/library-tests/frameworks/json-java/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/netty/generated/test.expected b/java/ql/test/library-tests/frameworks/netty/generated/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/netty/generated/test.expected +++ b/java/ql/test/library-tests/frameworks/netty/generated/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/netty/generated/test.ql b/java/ql/test/library-tests/frameworks/netty/generated/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/netty/generated/test.ql +++ b/java/ql/test/library-tests/frameworks/netty/generated/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/netty/manual/test.expected b/java/ql/test/library-tests/frameworks/netty/manual/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/netty/manual/test.expected +++ b/java/ql/test/library-tests/frameworks/netty/manual/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/netty/manual/test.ql b/java/ql/test/library-tests/frameworks/netty/manual/test.ql index 111db20f792..c67cf1835fa 100644 --- a/java/ql/test/library-tests/frameworks/netty/manual/test.ql +++ b/java/ql/test/library-tests/frameworks/netty/manual/test.ql @@ -13,10 +13,4 @@ module Config implements DataFlow::ConfigSig { predicate isSink = DefaultFlowConfig::isSink/1; } -module Flow = TaintTracking::Global; - -class Test extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node source, DataFlow::Node sink) { - Flow::flow(source, sink) - } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/okhttp/test.expected b/java/ql/test/library-tests/frameworks/okhttp/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/okhttp/test.expected +++ b/java/ql/test/library-tests/frameworks/okhttp/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/okhttp/test.ql b/java/ql/test/library-tests/frameworks/okhttp/test.ql index 52e8a47132a..04cb3e7f7ac 100644 --- a/java/ql/test/library-tests/frameworks/okhttp/test.ql +++ b/java/ql/test/library-tests/frameworks/okhttp/test.ql @@ -10,10 +10,4 @@ module OkHttpFlowConfig implements DataFlow::ConfigSig { } } -module OkHttpFlow = DataFlow::Global; - -class OkHttpTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { - OkHttpFlow::flow(src, sink) - } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/play/test.expected b/java/ql/test/library-tests/frameworks/play/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/play/test.expected +++ b/java/ql/test/library-tests/frameworks/play/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/play/test.ql b/java/ql/test/library-tests/frameworks/play/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/play/test.ql +++ b/java/ql/test/library-tests/frameworks/play/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.expected b/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.expected +++ b/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.ql b/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.ql index 47cc6b07ad2..0adb5a87783 100644 --- a/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.ql +++ b/java/ql/test/library-tests/frameworks/rabbitmq/FlowTest.ql @@ -11,10 +11,4 @@ module Config implements DataFlow::ConfigSig { } } -module Flow = TaintTracking::Global; - -class HasFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { Flow::flow(src, sink) } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.expected b/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.expected +++ b/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.ql b/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.ql index 7ce7b2a6ebf..bc46ba9518b 100644 --- a/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.ql +++ b/java/ql/test/library-tests/frameworks/rabbitmq/SourceTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.dataflow.FlowSources import TestUtilities.InlineExpectationsTest -class SourceTest extends InlineExpectationsTest { - SourceTest() { this = "SourceTest" } +module SourceTest implements TestSig { + string getARelevantTag() { result = "source" } - override string getARelevantTag() { result = "source" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "source" and exists(RemoteFlowSource source | not source.asParameter().getCallable().getDeclaringType().hasName("DefaultConsumer") and @@ -17,3 +15,5 @@ class SourceTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/library-tests/frameworks/ratpack/flow.expected b/java/ql/test/library-tests/frameworks/ratpack/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/ratpack/flow.expected +++ b/java/ql/test/library-tests/frameworks/ratpack/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/ratpack/flow.ql b/java/ql/test/library-tests/frameworks/ratpack/flow.ql index dae21e78f7c..eab631f0589 100644 --- a/java/ql/test/library-tests/frameworks/ratpack/flow.ql +++ b/java/ql/test/library-tests/frameworks/ratpack/flow.ql @@ -15,12 +15,4 @@ module Config implements DataFlow::ConfigSig { } } -module Flow = TaintTracking::Global; - -class HasFlowTest extends InlineFlowTest { - HasFlowTest() { this = "HasFlowTest" } - - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { Flow::flow(src, sink) } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/frameworks/retrofit/test.expected b/java/ql/test/library-tests/frameworks/retrofit/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/retrofit/test.expected +++ b/java/ql/test/library-tests/frameworks/retrofit/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/retrofit/test.ql b/java/ql/test/library-tests/frameworks/retrofit/test.ql index e09f1ed41d7..0abbff1f958 100644 --- a/java/ql/test/library-tests/frameworks/retrofit/test.ql +++ b/java/ql/test/library-tests/frameworks/retrofit/test.ql @@ -10,8 +10,4 @@ module FlowConfig implements DataFlow::ConfigSig { } } -module Flow = DataFlow::Global; - -class RetrofitFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { Flow::flow(src, sink) } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/beans/test.expected b/java/ql/test/library-tests/frameworks/spring/beans/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/beans/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/beans/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/beans/test.ql b/java/ql/test/library-tests/frameworks/spring/beans/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/beans/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/beans/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/cache/test.expected b/java/ql/test/library-tests/frameworks/spring/cache/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/cache/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/cache/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/cache/test.ql b/java/ql/test/library-tests/frameworks/spring/cache/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/cache/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/cache/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/context/flow.expected b/java/ql/test/library-tests/frameworks/spring/context/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/context/flow.expected +++ b/java/ql/test/library-tests/frameworks/spring/context/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/context/flow.ql b/java/ql/test/library-tests/frameworks/spring/context/flow.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/context/flow.ql +++ b/java/ql/test/library-tests/frameworks/spring/context/flow.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/controller/test.expected b/java/ql/test/library-tests/frameworks/spring/controller/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/controller/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/controller/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/controller/test.ql b/java/ql/test/library-tests/frameworks/spring/controller/test.ql index b6beb8e1e75..35b3d064e5a 100644 --- a/java/ql/test/library-tests/frameworks/spring/controller/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/controller/test.ql @@ -10,10 +10,4 @@ module ValueFlowConfig implements DataFlow::ConfigSig { } } -module ValueFlow = DataFlow::Global; - -class Test extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { - ValueFlow::flow(src, sink) - } -} +import FlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/data/test.expected b/java/ql/test/library-tests/frameworks/spring/data/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/data/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/data/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/data/test.ql b/java/ql/test/library-tests/frameworks/spring/data/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/data/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/data/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/http/flow.expected b/java/ql/test/library-tests/frameworks/spring/http/flow.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/http/flow.expected +++ b/java/ql/test/library-tests/frameworks/spring/http/flow.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/http/flow.ql b/java/ql/test/library-tests/frameworks/spring/http/flow.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/http/flow.ql +++ b/java/ql/test/library-tests/frameworks/spring/http/flow.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/ui/test.expected b/java/ql/test/library-tests/frameworks/spring/ui/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/ui/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/ui/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/ui/test.ql b/java/ql/test/library-tests/frameworks/spring/ui/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/ui/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/ui/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/util/test.expected b/java/ql/test/library-tests/frameworks/spring/util/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/util/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/util/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/util/test.ql b/java/ql/test/library-tests/frameworks/spring/util/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/util/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/util/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/validation/test.expected b/java/ql/test/library-tests/frameworks/spring/validation/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/validation/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/validation/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/validation/test.ql b/java/ql/test/library-tests/frameworks/spring/validation/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/validation/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/validation/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/webmultipart/test.expected b/java/ql/test/library-tests/frameworks/spring/webmultipart/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/webmultipart/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/webmultipart/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/webmultipart/test.ql b/java/ql/test/library-tests/frameworks/spring/webmultipart/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/webmultipart/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/webmultipart/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/spring/webutil/test.expected b/java/ql/test/library-tests/frameworks/spring/webutil/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/spring/webutil/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/webutil/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/webutil/test.ql b/java/ql/test/library-tests/frameworks/spring/webutil/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/webutil/test.ql +++ b/java/ql/test/library-tests/frameworks/spring/webutil/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/stapler/DataBoundPostConstructTest.java b/java/ql/test/library-tests/frameworks/stapler/DataBoundPostConstructTest.java new file mode 100644 index 00000000000..efab6d956d2 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/stapler/DataBoundPostConstructTest.java @@ -0,0 +1,42 @@ +import javax.annotation.PostConstruct; +import net.sf.json.JSONObject; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.DataBoundResolvable; +import org.kohsuke.stapler.DataBoundSetter; +import org.kohsuke.stapler.StaplerRequest; + +public class DataBoundPostConstructTest implements DataBoundResolvable { + + static Object source(String label) { + return null; + } + + static void sink(Object o) {} + + static void test() { + new DataBoundPostConstructTest(source("constructor")); + new DataBoundPostConstructTest(null).setField(source("setter")); + } + + private Object field; + + @DataBoundConstructor + public DataBoundPostConstructTest(Object field) { + this.field = field; + } + + @DataBoundSetter + public void setField(Object field) { + this.field = field; + } + + private Object bindResolve(StaplerRequest request, JSONObject src) { + sink(this.field); // $ hasValueFlow=constructor hasValueFlow=setter + return null; + } + + @PostConstruct + private void post() { + sink(this.field); // $ hasValueFlow=constructor hasValueFlow=setter + } +} diff --git a/java/ql/test/library-tests/frameworks/stapler/HttpResponseTest.java b/java/ql/test/library-tests/frameworks/stapler/HttpResponseTest.java new file mode 100644 index 00000000000..d437d1a7de3 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/stapler/HttpResponseTest.java @@ -0,0 +1,26 @@ +import hudson.model.Descriptor; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +public class HttpResponseTest { + + Object source() { + return null; + } + + void sink(Object o) {} + + private class MyDescriptor extends Descriptor { + public HttpResponse doTest() { + return (MyHttpResponse) source(); + } + } + + private class MyHttpResponse implements HttpResponse { + @Override + public void generateResponse(StaplerRequest p0, StaplerResponse p1, Object p2) { + sink(this); // $ hasValueFlow + } + } +} diff --git a/java/ql/test/library-tests/frameworks/stapler/options b/java/ql/test/library-tests/frameworks/stapler/options index 5b75976846a..52f4c738a88 100644 --- a/java/ql/test/library-tests/frameworks/stapler/options +++ b/java/ql/test/library-tests/frameworks/stapler/options @@ -1 +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 \ No newline at end of file +//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:${testdir}/../../../stubs/jenkins:${testdir}/../../../stubs/javax-annotation-api-1.3.2 \ No newline at end of file diff --git a/java/ql/test/library-tests/frameworks/stapler/test.expected b/java/ql/test/library-tests/frameworks/stapler/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/stapler/test.expected +++ b/java/ql/test/library-tests/frameworks/stapler/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/stapler/test.ql b/java/ql/test/library-tests/frameworks/stapler/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/stapler/test.ql +++ b/java/ql/test/library-tests/frameworks/stapler/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/stream/test.expected b/java/ql/test/library-tests/frameworks/stream/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/stream/test.expected +++ b/java/ql/test/library-tests/frameworks/stream/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/stream/test.ql b/java/ql/test/library-tests/frameworks/stream/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/stream/test.ql +++ b/java/ql/test/library-tests/frameworks/stream/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/frameworks/thymeleaf/test.expected b/java/ql/test/library-tests/frameworks/thymeleaf/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/frameworks/thymeleaf/test.expected +++ b/java/ql/test/library-tests/frameworks/thymeleaf/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/frameworks/thymeleaf/test.ql b/java/ql/test/library-tests/frameworks/thymeleaf/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/frameworks/thymeleaf/test.ql +++ b/java/ql/test/library-tests/frameworks/thymeleaf/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/logging/test.expected b/java/ql/test/library-tests/logging/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/logging/test.expected +++ b/java/ql/test/library-tests/logging/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/logging/test.ql b/java/ql/test/library-tests/logging/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/logging/test.ql +++ b/java/ql/test/library-tests/logging/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.expected b/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.expected +++ b/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.ql b/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.ql index 224b03ea51c..a345d6df1fc 100644 --- a/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.ql +++ b/java/ql/test/library-tests/neutrals/neutralsinks/NeutralSinksTest.ql @@ -4,12 +4,10 @@ import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl -class SinkTest extends InlineExpectationsTest { - SinkTest() { this = "SinkTest" } +module SinkTest implements TestSig { + string getARelevantTag() { result = "isSink" } - override string getARelevantTag() { result = "isSink" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "isSink" and exists(DataFlow::Node sink | sinkNode(sink, _) and @@ -20,12 +18,10 @@ class SinkTest extends InlineExpectationsTest { } } -class NeutralSinkTest extends InlineExpectationsTest { - NeutralSinkTest() { this = "NeutralSinkTest" } +module NeutralSinkTest implements TestSig { + string getARelevantTag() { result = "isNeutralSink" } - override string getARelevantTag() { result = "isNeutralSink" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "isNeutralSink" and exists(Call call, Callable callable | call.getCallee() = callable and @@ -38,3 +34,5 @@ class NeutralSinkTest extends InlineExpectationsTest { ) } } + +import MakeTest> diff --git a/java/ql/test/library-tests/optional/test.expected b/java/ql/test/library-tests/optional/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/optional/test.expected +++ b/java/ql/test/library-tests/optional/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/optional/test.ql b/java/ql/test/library-tests/optional/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/optional/test.ql +++ b/java/ql/test/library-tests/optional/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/paths/test.expected b/java/ql/test/library-tests/paths/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/paths/test.expected +++ b/java/ql/test/library-tests/paths/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/paths/test.ql b/java/ql/test/library-tests/paths/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/paths/test.ql +++ b/java/ql/test/library-tests/paths/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/pathsanitizer/test.expected b/java/ql/test/library-tests/pathsanitizer/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/pathsanitizer/test.expected +++ b/java/ql/test/library-tests/pathsanitizer/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/pathsanitizer/test.ql b/java/ql/test/library-tests/pathsanitizer/test.ql index cefce3276e6..0a20ad012b9 100644 --- a/java/ql/test/library-tests/pathsanitizer/test.ql +++ b/java/ql/test/library-tests/pathsanitizer/test.ql @@ -10,12 +10,4 @@ module PathSanitizerConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof PathInjectionSanitizer } } -module PathSanitizerFlow = TaintTracking::Global; - -class Test extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - PathSanitizerFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/library-tests/regex/test.expected b/java/ql/test/library-tests/regex/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/regex/test.expected +++ b/java/ql/test/library-tests/regex/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/regex/test.ql b/java/ql/test/library-tests/regex/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/regex/test.ql +++ b/java/ql/test/library-tests/regex/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/scanner/test.expected b/java/ql/test/library-tests/scanner/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/library-tests/scanner/test.expected +++ b/java/ql/test/library-tests/scanner/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/library-tests/scanner/test.ql b/java/ql/test/library-tests/scanner/test.ql index 5d91e4e8e26..aca87429a3a 100644 --- a/java/ql/test/library-tests/scanner/test.ql +++ b/java/ql/test/library-tests/scanner/test.ql @@ -1,2 +1,3 @@ import java import TestUtilities.InlineFlowTest +import DefaultFlowTest diff --git a/java/ql/test/library-tests/xml/XMLTest.expected b/java/ql/test/library-tests/xml/XMLTest.expected index 61d3c801963..316503fd211 100644 --- a/java/ql/test/library-tests/xml/XMLTest.expected +++ b/java/ql/test/library-tests/xml/XMLTest.expected @@ -1,2 +1,4 @@ +failures +testFailures | test.xml:4:5:4:32 | attribute=value | Unexpected result: hasXmlResult= | -| test.xml:5:29:5:52 | $ hasXmlResult | Missing result:hasXmlResult= | \ No newline at end of file +| test.xml:5:29:5:52 | $ hasXmlResult | Missing result:hasXmlResult= | diff --git a/java/ql/test/library-tests/xml/XMLTest.ql b/java/ql/test/library-tests/xml/XMLTest.ql index c5011b848d4..40c5481e3e3 100644 --- a/java/ql/test/library-tests/xml/XMLTest.ql +++ b/java/ql/test/library-tests/xml/XMLTest.ql @@ -1,12 +1,10 @@ import semmle.code.xml.XML import TestUtilities.InlineExpectationsTest -class XmlTest extends InlineExpectationsTest { - XmlTest() { this = "XmlTest" } +module XmlTest implements TestSig { + string getARelevantTag() { result = "hasXmlResult" } - override string getARelevantTag() { result = "hasXmlResult" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasXmlResult" and exists(XmlAttribute a | a.getLocation() = location and @@ -15,3 +13,5 @@ class XmlTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected index b362ef171f5..4fee1c07e06 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected @@ -8,7 +8,7 @@ | java.nio | 0 | 0 | 2 | 3 | 5 | 0.4 | 0.0 | 0.4 | 0.0 | NaN | 0.6 | | java.nio.charset | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.nio.file | 0 | 0 | 7 | 1 | 8 | 0.875 | 0.0 | 0.875 | 0.0 | NaN | 0.125 | -| java.sql | 0 | 0 | 2 | 14 | 16 | 0.125 | 0.0 | 0.125 | 0.0 | NaN | 0.875 | +| java.sql | 0 | 0 | 1 | 15 | 16 | 0.0625 | 0.0 | 0.0625 | 0.0 | NaN | 0.9375 | | java.text | 0 | 0 | 0 | 5 | 5 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time | 0 | 0 | 0 | 17 | 17 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time.chrono | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.expected b/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.expected index 3f5b3663281..199e9413ecf 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.expected +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.expected @@ -7,5 +7,9 @@ | java.net.URL#openStream() | 1 | | java.net.URLConnection#getInputStream() | 1 | | java.time.Duration#ofMillis(long) | 1 | +| java.util.Iterator#next() | 1 | +| java.util.Map#entrySet() | 1 | | java.util.Map#put(Object,Object) | 1 | +| java.util.Map$Entry#getKey() | 1 | +| java.util.Set#iterator() | 1 | | org.apache.commons.io.FileUtils#deleteDirectory(File) | 1 | diff --git a/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.java b/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.java index 6445e97b473..ac22f5065a4 100644 --- a/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.java +++ b/java/ql/test/query-tests/Telemetry/SupportedExternalApis/SupportedExternalApis.java @@ -15,6 +15,7 @@ class SupportedExternalApis { Map map = new HashMap<>(); // uninteresting (parameterless constructor) map.put("foo", new Object()); // supported summary + map.entrySet().iterator().next().getKey(); // nested class (Map.Entry), supported summaries (entrySet, iterator, next, getKey) Duration d = java.time.Duration.ofMillis(1000); // supported neutral diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql index a07eb6892c3..26a6012d7fb 100644 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql @@ -8,12 +8,10 @@ class TestRemoteSource extends RemoteFlowSource { override string getSourceType() { result = "TestSource" } } -class Test extends InlineExpectationsTest { - Test() { this = "PartialPathTraversalFromRemoteTest" } +module Test implements TestSig { + string getARelevantTag() { result = "hasTaintFlow" } - override string getARelevantTag() { result = "hasTaintFlow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasTaintFlow" and exists(DataFlow::Node sink | PartialPathTraversalFromRemoteFlow::flowTo(sink) | sink.getLocation() = location and @@ -22,3 +20,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql index 7a6141b93ce..242bf9c3f54 100644 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.JndiInjectionQuery import TestUtilities.InlineExpectationsTest -class HasJndiInjectionTest extends InlineExpectationsTest { - HasJndiInjectionTest() { this = "HasJndiInjectionTest" } +module HasJndiInjectionTest implements TestSig { + string getARelevantTag() { result = "hasJndiInjection" } - override string getARelevantTag() { result = "hasJndiInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasJndiInjection" and exists(DataFlow::Node sink | JndiInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HasJndiInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql index 1f5a3030cdb..4d5200477d8 100644 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql @@ -4,12 +4,10 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.XsltInjectionQuery import TestUtilities.InlineExpectationsTest -class HasXsltInjectionTest extends InlineExpectationsTest { - HasXsltInjectionTest() { this = "HasXsltInjectionTest" } +module HasXsltInjectionTest implements TestSig { + string getARelevantTag() { result = "hasXsltInjection" } - override string getARelevantTag() { result = "hasXsltInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasXsltInjection" and exists(DataFlow::Node sink | XsltInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -18,3 +16,5 @@ class HasXsltInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected b/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected index 2ae893b5d1d..fd2c8fb4d5c 100644 --- a/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected +++ b/java/ql/test/query-tests/security/CWE-078/ExecTaintedLocal.expected @@ -1,40 +1,48 @@ edges -| Test.java:6:35:6:44 | arg : String | Test.java:7:44:7:69 | ... + ... | +| Test.java:6:35:6:44 | arg : String | Test.java:7:44:7:69 | ... + ... : String | | Test.java:6:35:6:44 | arg : String | Test.java:10:61:10:73 | ... + ... : String | | Test.java:6:35:6:44 | arg : String | Test.java:16:13:16:25 | ... + ... : String | | Test.java:6:35:6:44 | arg : String | Test.java:22:15:22:27 | ... + ... : String | +| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | Test.java:7:25:7:70 | new ..[] { .. } | +| Test.java:7:44:7:69 | ... + ... : String | Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | | Test.java:10:29:10:74 | {...} : String[] [[]] : String | Test.java:10:29:10:74 | new String[] | | Test.java:10:61:10:73 | ... + ... : String | Test.java:10:29:10:74 | {...} : String[] [[]] : String | -| Test.java:16:5:16:7 | cmd [post update] : List [] : String | Test.java:18:29:18:31 | cmd | -| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : List [] : String | +| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | Test.java:18:29:18:31 | cmd | +| Test.java:16:13:16:25 | ... + ... : String | Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | Test.java:24:29:24:32 | cmd1 | | Test.java:22:15:22:27 | ... + ... : String | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | -| Test.java:28:38:28:47 | arg : String | Test.java:29:44:29:64 | ... + ... | +| Test.java:28:38:28:47 | arg : String | Test.java:29:44:29:64 | ... + ... : String | +| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | Test.java:29:25:29:65 | new ..[] { .. } | +| Test.java:29:44:29:64 | ... + ... : String | Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | | Test.java:57:27:57:39 | args : String[] | Test.java:60:20:60:22 | arg : String | | Test.java:57:27:57:39 | args : String[] | Test.java:61:23:61:25 | arg : String | | Test.java:60:20:60:22 | arg : String | Test.java:6:35:6:44 | arg : String | | Test.java:61:23:61:25 | arg : String | Test.java:28:38:28:47 | arg : String | nodes | Test.java:6:35:6:44 | arg : String | semmle.label | arg : String | -| Test.java:7:44:7:69 | ... + ... | semmle.label | ... + ... | +| Test.java:7:25:7:70 | new ..[] { .. } | semmle.label | new ..[] { .. } | +| Test.java:7:25:7:70 | new ..[] { .. } : String[] [[]] : String | semmle.label | new ..[] { .. } : String[] [[]] : String | +| Test.java:7:44:7:69 | ... + ... : String | semmle.label | ... + ... : String | | Test.java:10:29:10:74 | new String[] | semmle.label | new String[] | | Test.java:10:29:10:74 | {...} : String[] [[]] : String | semmle.label | {...} : String[] [[]] : String | | Test.java:10:61:10:73 | ... + ... : String | semmle.label | ... + ... : String | -| Test.java:16:5:16:7 | cmd [post update] : List [] : String | semmle.label | cmd [post update] : List [] : String | +| Test.java:16:5:16:7 | cmd [post update] : ArrayList [] : String | semmle.label | cmd [post update] : ArrayList [] : String | | Test.java:16:13:16:25 | ... + ... : String | semmle.label | ... + ... : String | | Test.java:18:29:18:31 | cmd | semmle.label | cmd | | Test.java:22:5:22:8 | cmd1 [post update] : String[] [[]] : String | semmle.label | cmd1 [post update] : String[] [[]] : String | | Test.java:22:15:22:27 | ... + ... : String | semmle.label | ... + ... : String | | Test.java:24:29:24:32 | cmd1 | semmle.label | cmd1 | | Test.java:28:38:28:47 | arg : String | semmle.label | arg : String | -| Test.java:29:44:29:64 | ... + ... | semmle.label | ... + ... | +| Test.java:29:25:29:65 | new ..[] { .. } | semmle.label | new ..[] { .. } | +| Test.java:29:25:29:65 | new ..[] { .. } : String[] [[]] : String | semmle.label | new ..[] { .. } : String[] [[]] : String | +| Test.java:29:44:29:64 | ... + ... : String | semmle.label | ... + ... : String | | Test.java:57:27:57:39 | args : String[] | semmle.label | args : String[] | | Test.java:60:20:60:22 | arg : String | semmle.label | arg : String | | Test.java:61:23:61:25 | arg : String | semmle.label | arg : String | subpaths #select -| Test.java:7:44:7:69 | ... + ... | Test.java:57:27:57:39 | args : String[] | Test.java:7:44:7:69 | ... + ... | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | +| Test.java:7:44:7:69 | ... + ... | Test.java:57:27:57:39 | args : String[] | Test.java:7:25:7:70 | new ..[] { .. } | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | | Test.java:10:29:10:74 | new String[] | Test.java:57:27:57:39 | args : String[] | Test.java:10:29:10:74 | new String[] | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | | Test.java:18:29:18:31 | cmd | Test.java:57:27:57:39 | args : String[] | Test.java:18:29:18:31 | cmd | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | | Test.java:24:29:24:32 | cmd1 | Test.java:57:27:57:39 | args : String[] | Test.java:24:29:24:32 | cmd1 | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | -| Test.java:29:44:29:64 | ... + ... | Test.java:57:27:57:39 | args : String[] | Test.java:29:44:29:64 | ... + ... | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | +| Test.java:29:44:29:64 | ... + ... | Test.java:57:27:57:39 | args : String[] | Test.java:29:25:29:65 | new ..[] { .. } | This command line depends on a $@. | Test.java:57:27:57:39 | args | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java index 2854ffe30b7..1ffa72c4c0d 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java @@ -4,9 +4,6 @@ package test.cwe079.cwe.examples; - - - import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; @@ -14,13 +11,12 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - public class XSS extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws ServletException, IOException { // BAD: a request parameter is written directly to the Servlet response stream - response.getWriter().print( - "The page \"" + request.getParameter("page") + "\" was not found."); // $xss + response.getWriter() + .print("The page \"" + request.getParameter("page") + "\" was not found."); // $xss // GOOD: servlet API encodes the error message HTML for the HTML context response.sendError(HttpServletResponse.SC_NOT_FOUND, @@ -29,35 +25,31 @@ public class XSS extends HttpServlet { // GOOD: escape HTML characters first response.sendError(HttpServletResponse.SC_NOT_FOUND, "The page \"" + encodeForHtml(request.getParameter("page")) + "\" was not found."); - + // GOOD: servlet API encodes the error message HTML for the HTML context response.sendError(HttpServletResponse.SC_NOT_FOUND, "The page \"" + capitalizeName(request.getParameter("page")) + "\" was not found."); - + // BAD: outputting the path of the resource response.getWriter().print("The path section of the URL was " + request.getPathInfo()); // $xss - // BAD: typical XSS, this time written to an OutputStream instead of a Writer + // BAD: typical XSS, this time written to an OutputStream instead of a Writer response.getOutputStream().write(request.getPathInfo().getBytes()); // $xss + + // GOOD: sanitizer + response.getOutputStream().write(hudson.Util.escape(request.getPathInfo()).getBytes()); // safe } - - - - - - /** - * Replace special characters in the given text such that it can - * be inserted into an HTML file and not be interpreted as including - * any HTML tags. + * Replace special characters in the given text such that it can be inserted into an HTML file + * and not be interpreted as including any HTML tags. */ static String encodeForHtml(String text) { // This is just a stub. For an example of a real implementation, see // the OWASP Java Encoder Project. return text.replace("<", "<"); } - + static String capitalizeName(String text) { return text.replace("foo inc", "Foo, Inc."); } diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql index 454f42112ea..5e901c83498 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.XssQuery import TestUtilities.InlineExpectationsTest -class XssTest extends InlineExpectationsTest { - XssTest() { this = "XssTest" } +module XssTest implements TestSig { + string getARelevantTag() { result = "xss" } - override string getARelevantTag() { result = "xss" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "xss" and exists(DataFlow::Node sink | XssFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class XssTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/options b/java/ql/test/query-tests/security/CWE-079/semmle/tests/options index 62fc56e6792..78c431eb683 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/options +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8:${testdir}/../../../../../stubs/javax-faces-2.3/:${testdir}/../../../../../stubs/google-android-9.0.0 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8:${testdir}/../../../../../stubs/javax-faces-2.3/:${testdir}/../../../../../stubs/google-android-9.0.0:${testdir}/../../../../../stubs/jenkins diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.expected b/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.expected +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.ql b/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.ql index bee1fa84ebc..7934ecd9d8d 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.ql +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/springjdbc.ql @@ -9,12 +9,10 @@ private class SourceMethodSource extends RemoteFlowSource { override string getSourceType() { result = "source" } } -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "sqlInjection" } - override string getARelevantTag() { result = "sqlInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "sqlInjection" and exists(DataFlow::Node sink | QueryInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -23,3 +21,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql index dd6aec2ebe3..b10e291d376 100644 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql @@ -3,12 +3,10 @@ import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.ArbitraryApkInstallationQuery import TestUtilities.InlineExpectationsTest -class HasApkInstallationTest extends InlineExpectationsTest { - HasApkInstallationTest() { this = "HasApkInstallationTest" } +module HasApkInstallationTest implements TestSig { + string getARelevantTag() { result = "hasApkInstallation" } - override string getARelevantTag() { result = "hasApkInstallation" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasApkInstallation" and exists(DataFlow::Node sink | ApkInstallationFlow::flowTo(sink) | sink.getLocation() = location and @@ -17,3 +15,5 @@ class HasApkInstallationTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql index 9d979f125a8..bc39280407e 100644 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql @@ -4,12 +4,10 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.GroovyInjectionQuery import TestUtilities.InlineExpectationsTest -class HasGroovyInjectionTest extends InlineExpectationsTest { - HasGroovyInjectionTest() { this = "HasGroovyInjectionTest" } +module HasGroovyInjectionTest implements TestSig { + string getARelevantTag() { result = "hasGroovyInjection" } - override string getARelevantTag() { result = "hasGroovyInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasGroovyInjection" and exists(DataFlow::Node sink | GroovyInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -18,3 +16,5 @@ class HasGroovyInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql index 9593ae1a8ee..07f1573b039 100644 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.JexlInjectionQuery import TestUtilities.InlineExpectationsTest -class JexlInjectionTest extends InlineExpectationsTest { - JexlInjectionTest() { this = "HasJexlInjectionTest" } +module JexlInjectionTest implements TestSig { + string getARelevantTag() { result = "hasJexlInjection" } - override string getARelevantTag() { result = "hasJexlInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasJexlInjection" and exists(DataFlow::Node sink | JexlInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class JexlInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql index 8dc4127cbf1..f7599250077 100644 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql @@ -4,12 +4,10 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.MvelInjectionQuery import TestUtilities.InlineExpectationsTest -class HasMvelInjectionTest extends InlineExpectationsTest { - HasMvelInjectionTest() { this = "HasMvelInjectionTest" } +module HasMvelInjectionTest implements TestSig { + string getARelevantTag() { result = "hasMvelInjection" } - override string getARelevantTag() { result = "hasMvelInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasMvelInjection" and exists(DataFlow::Node sink | MvelInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -18,3 +16,5 @@ class HasMvelInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql index 78e147849f1..a017c96f60b 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql @@ -4,12 +4,10 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.security.SpelInjectionQuery import TestUtilities.InlineExpectationsTest -class HasSpelInjectionTest extends InlineExpectationsTest { - HasSpelInjectionTest() { this = "HasSpelInjectionTest" } +module HasSpelInjectionTest implements TestSig { + string getARelevantTag() { result = "hasSpelInjection" } - override string getARelevantTag() { result = "hasSpelInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasSpelInjection" and exists(DataFlow::Node sink | SpelInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -18,3 +16,5 @@ class HasSpelInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql index 7e0a7ae1ae2..4c37e8a5f01 100644 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.TemplateInjectionQuery import TestUtilities.InlineExpectationsTest -class TemplateInjectionTest extends InlineExpectationsTest { - TemplateInjectionTest() { this = "TemplateInjectionTest" } +module TemplateInjectionTest implements TestSig { + string getARelevantTag() { result = "hasTemplateInjection" } - override string getARelevantTag() { result = "hasTemplateInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasTemplateInjection" and exists(DataFlow::Node sink | TemplateInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class TemplateInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.expected b/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.ql b/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.ql index 73a41b1bd8e..a2707b5df44 100644 --- a/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.ql @@ -8,10 +8,4 @@ private class TestSource extends RemoteFlowSource { override string getSourceType() { result = "test source" } } -private class LogInjectionTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - LogInjectionFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.expected b/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.expected +++ b/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.ql b/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.ql index ceaf8e11a4f..2ccb8fa7c52 100644 --- a/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.ql +++ b/java/ql/test/query-tests/security/CWE-1204/StaticInitializationVectorTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.StaticInitializationVectorQuery import TestUtilities.InlineExpectationsTest -class StaticInitializationVectorTest extends InlineExpectationsTest { - StaticInitializationVectorTest() { this = "StaticInitializationVectorTest" } +module StaticInitializationVectorTest implements TestSig { + string getARelevantTag() { result = "staticInitializationVector" } - override string getARelevantTag() { result = "staticInitializationVector" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "staticInitializationVector" and exists(DataFlow::Node sink | StaticInitializationVectorFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class StaticInitializationVectorTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected +++ b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql index d90039cf920..86feb7843ce 100644 --- a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql +++ b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.IntentUriPermissionManipulationQuery - -class IntentUriPermissionManipulationTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - IntentUriPermissionManipulationFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.expected b/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.expected +++ b/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.ql b/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.ql index fd18ccc27eb..e896e272aa4 100644 --- a/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.ql +++ b/java/ql/test/query-tests/security/CWE-273/UnsafeCertTrustTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.UnsafeCertTrustQuery import TestUtilities.InlineExpectationsTest -class UnsafeCertTrustTest extends InlineExpectationsTest { - UnsafeCertTrustTest() { this = "HasUnsafeCertTrustTest" } +module UnsafeCertTrustTest implements TestSig { + string getARelevantTag() { result = "hasUnsafeCertTrust" } - override string getARelevantTag() { result = "hasUnsafeCertTrust" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasUnsafeCertTrust" and exists(Expr unsafeTrust | unsafeTrust instanceof RabbitMQEnableHostnameVerificationNotSet @@ -20,3 +18,5 @@ class UnsafeCertTrustTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.expected b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.ql b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.ql index 91a23044730..1a6c3a9d0c0 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test1/test.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.AndroidCertificatePinningQuery -class Test extends InlineExpectationsTest { - Test() { this = "AndroidMissingCertificatePinningTest" } +module Test implements TestSig { + string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - override string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - - override predicate hasActualResult(Location loc, string el, string tag, string value) { + predicate hasActualResult(Location loc, string el, string tag, string value) { exists(DataFlow::Node node | missingPinning(node, _) and loc = node.getLocation() and @@ -17,3 +15,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.expected b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.ql b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.ql index 91a23044730..1a6c3a9d0c0 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test2/test.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.AndroidCertificatePinningQuery -class Test extends InlineExpectationsTest { - Test() { this = "AndroidMissingCertificatePinningTest" } +module Test implements TestSig { + string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - override string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - - override predicate hasActualResult(Location loc, string el, string tag, string value) { + predicate hasActualResult(Location loc, string el, string tag, string value) { exists(DataFlow::Node node | missingPinning(node, _) and loc = node.getLocation() and @@ -17,3 +15,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.expected b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.ql b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.ql index 91a23044730..1a6c3a9d0c0 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test3/test.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.AndroidCertificatePinningQuery -class Test extends InlineExpectationsTest { - Test() { this = "AndroidMissingCertificatePinningTest" } +module Test implements TestSig { + string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - override string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - - override predicate hasActualResult(Location loc, string el, string tag, string value) { + predicate hasActualResult(Location loc, string el, string tag, string value) { exists(DataFlow::Node node | missingPinning(node, _) and loc = node.getLocation() and @@ -17,3 +15,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.expected b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.ql b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.ql index 91a23044730..1a6c3a9d0c0 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test4/test.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.AndroidCertificatePinningQuery -class Test extends InlineExpectationsTest { - Test() { this = "AndroidMissingCertificatePinningTest" } +module Test implements TestSig { + string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - override string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - - override predicate hasActualResult(Location loc, string el, string tag, string value) { + predicate hasActualResult(Location loc, string el, string tag, string value) { exists(DataFlow::Node node | missingPinning(node, _) and loc = node.getLocation() and @@ -17,3 +15,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.expected b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.ql b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.ql index 91a23044730..1a6c3a9d0c0 100644 --- a/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/AndroidMissingCertificatePinning/Test5/test.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.AndroidCertificatePinningQuery -class Test extends InlineExpectationsTest { - Test() { this = "AndroidMissingCertificatePinningTest" } +module Test implements TestSig { + string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - override string getARelevantTag() { result = ["hasNoTrustedResult", "hasUntrustedResult"] } - - override predicate hasActualResult(Location loc, string el, string tag, string value) { + predicate hasActualResult(Location loc, string el, string tag, string value) { exists(DataFlow::Node node | missingPinning(node, _) and loc = node.getLocation() and @@ -17,3 +15,5 @@ class Test extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.expected b/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.expected +++ b/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.ql b/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.ql index 6166e0fe239..70d242e7ebb 100644 --- a/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.ql +++ b/java/ql/test/query-tests/security/CWE-295/ImproperWebVeiwCertificateValidation/test.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.AndroidWebViewCertificateValidationQuery import TestUtilities.InlineExpectationsTest -class WebViewTest extends InlineExpectationsTest { - WebViewTest() { this = "WebViewTest" } +module WebViewTest implements TestSig { + string getARelevantTag() { result = "hasResult" } - override string getARelevantTag() { result = "hasResult" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(OnReceivedSslErrorMethod m | trustsAllCerts(m) and location = m.getLocation() and @@ -17,3 +15,5 @@ class WebViewTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected +++ b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql index 0f068d04679..11a59f51feb 100644 --- a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql +++ b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.InsecureTrustManagerQuery import TestUtilities.InlineExpectationsTest -class InsecureTrustManagerTest extends InlineExpectationsTest { - InsecureTrustManagerTest() { this = "InsecureTrustManagerTest" } +module InsecureTrustManagerTest implements TestSig { + string getARelevantTag() { result = "hasValueFlow" } - override string getARelevantTag() { result = "hasValueFlow" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasValueFlow" and exists(DataFlow::Node sink | InsecureTrustManagerFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class InsecureTrustManagerTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql index 137dde369f9..ffe4673b62c 100644 --- a/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql +++ b/java/ql/test/query-tests/security/CWE-297/InsecureJavaMailTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.Mail import TestUtilities.InlineExpectationsTest -class InsecureJavaMailTest extends InlineExpectationsTest { - InsecureJavaMailTest() { this = "HasInsecureJavaMailTest" } +module InsecureJavaMailTest implements TestSig { + string getARelevantTag() { result = "hasInsecureJavaMail" } - override string getARelevantTag() { result = "hasInsecureJavaMail" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasInsecureJavaMail" and exists(MethodAccess ma | ma.getLocation() = location and @@ -22,3 +20,5 @@ class InsecureJavaMailTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.expected b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.expected +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.ql b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.ql index 421b3a408c4..8b49ed472f5 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.ql +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidDatabaseTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.CleartextStorageAndroidDatabaseQuery import TestUtilities.InlineExpectationsTest -class CleartextStorageAndroidDatabaseTest extends InlineExpectationsTest { - CleartextStorageAndroidDatabaseTest() { this = "CleartextStorageAndroidDatabaseTest" } +module CleartextStorageAndroidDatabaseTest implements TestSig { + string getARelevantTag() { result = "hasCleartextStorageAndroidDatabase" } - override string getARelevantTag() { result = "hasCleartextStorageAndroidDatabase" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasCleartextStorageAndroidDatabase" and exists(SensitiveSource data, LocalDatabaseOpenMethodAccess s, Expr input, Expr store | input = s.getAnInput() and @@ -20,3 +18,5 @@ class CleartextStorageAndroidDatabaseTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.expected b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.expected +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.ql b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.ql index ab221086f81..7b7380ccedf 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.ql +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageAndroidFilesystemTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.CleartextStorageAndroidFilesystemQuery import TestUtilities.InlineExpectationsTest -class CleartextStorageAndroidFilesystemTest extends InlineExpectationsTest { - CleartextStorageAndroidFilesystemTest() { this = "CleartextStorageAndroidFilesystemTest" } +module CleartextStorageAndroidFilesystemTest implements TestSig { + string getARelevantTag() { result = "hasCleartextStorageAndroidFilesystem" } - override string getARelevantTag() { result = "hasCleartextStorageAndroidFilesystem" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasCleartextStorageAndroidFilesystem" and exists(SensitiveSource data, LocalFileOpenCall s, Expr input, Expr store | input = s.getAnInput() and @@ -20,3 +18,5 @@ class CleartextStorageAndroidFilesystemTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.expected b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.expected +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.ql b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.ql index cbd17429e5c..025daff6c82 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.ql +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.CleartextStorageSharedPrefsQuery import TestUtilities.InlineExpectationsTest -class CleartextStorageSharedPrefsTest extends InlineExpectationsTest { - CleartextStorageSharedPrefsTest() { this = "CleartextStorageSharedPrefsTest" } +module CleartextStorageSharedPrefsTest implements TestSig { + string getARelevantTag() { result = "hasCleartextStorageSharedPrefs" } - override string getARelevantTag() { result = "hasCleartextStorageSharedPrefs" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasCleartextStorageSharedPrefs" and exists(SensitiveSource data, SharedPreferencesEditorMethodAccess s, Expr input, Expr store | input = s.getAnInput() and @@ -20,3 +18,5 @@ class CleartextStorageSharedPrefsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected +++ b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql index 1384a36e4ce..642495eebaa 100644 --- a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql +++ b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.InsufficientKeySizeQuery -class InsufficientKeySizeTest extends InlineExpectationsTest { - InsufficientKeySizeTest() { this = "InsufficientKeySize" } +module InsufficientKeySizeTest implements TestSig { + string getARelevantTag() { result = "hasInsufficientKeySize" } - override string getARelevantTag() { result = "hasInsufficientKeySize" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasInsufficientKeySize" and exists(KeySizeFlow::PathNode sink | KeySizeFlow::flowPath(_, sink) | sink.getNode().getLocation() = location and @@ -16,3 +14,5 @@ class InsufficientKeySizeTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected +++ b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql index df6867bbefe..3d9a18fc1a8 100644 --- a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql +++ b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.MissingJWTSignatureCheckQuery import TestUtilities.InlineExpectationsTest -class HasMissingJwtSignatureCheckTest extends InlineExpectationsTest { - HasMissingJwtSignatureCheckTest() { this = "HasMissingJwtSignatureCheckTest" } +module HasMissingJwtSignatureCheckTest implements TestSig { + string getARelevantTag() { result = "hasMissingJwtSignatureCheck" } - override string getARelevantTag() { result = "hasMissingJwtSignatureCheck" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasMissingJwtSignatureCheck" and exists(DataFlow::Node sink | MissingJwtSignatureCheckFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HasMissingJwtSignatureCheckTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected +++ b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql index 55c07bbd301..ae1258a66c5 100644 --- a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql +++ b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.UnsafeContentUriResolutionQuery - -class Test extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - UnsafeContentResolutionFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.expected b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.expected +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.ql b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.ql index 1e4d7b42cb5..c1878d4976d 100644 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.ql +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionInPreferenceActivityTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.FragmentInjection import TestUtilities.InlineExpectationsTest -class FragmentInjectionInPreferenceActivityTest extends InlineExpectationsTest { - FragmentInjectionInPreferenceActivityTest() { this = "FragmentInjectionInPreferenceActivityTest" } +module FragmentInjectionInPreferenceActivityTest implements TestSig { + string getARelevantTag() { result = "hasPreferenceFragmentInjection" } - override string getARelevantTag() { result = "hasPreferenceFragmentInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasPreferenceFragmentInjection" and exists(IsValidFragmentMethod isValidFragment | isValidFragment.isUnsafe() | isValidFragment.getLocation() = location and @@ -16,3 +14,5 @@ class FragmentInjectionInPreferenceActivityTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql index 2771dd3af90..a1cff04f4c6 100644 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql @@ -1,11 +1,4 @@ import java import semmle.code.java.security.FragmentInjectionQuery import TestUtilities.InlineFlowTest - -class Test extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - FragmentInjectionTaintFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.expected b/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.expected +++ b/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.ql b/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.ql index 76433545aa5..79a762ea209 100644 --- a/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.ql +++ b/java/ql/test/query-tests/security/CWE-489/debuggable-attribute/DebuggableAttributeEnabledTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.xml.AndroidManifest import TestUtilities.InlineExpectationsTest -class DebuggableAttributeEnabledTest extends InlineExpectationsTest { - DebuggableAttributeEnabledTest() { this = "DebuggableAttributeEnabledTest" } +module DebuggableAttributeEnabledTest implements TestSig { + string getARelevantTag() { result = "hasDebuggableAttributeEnabled" } - override string getARelevantTag() { result = "hasDebuggableAttributeEnabled" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasDebuggableAttributeEnabled" and exists(AndroidApplicationXmlElement androidAppElem | androidAppElem.isDebuggable() and @@ -19,3 +17,5 @@ class DebuggableAttributeEnabledTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected +++ b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql index 5bd19fb5b9e..99ac3d4e03c 100644 --- a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql +++ b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.WebviewDebuggingEnabledQuery - -class HasFlowTest extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { - WebviewDebugEnabledFlow::flow(src, sink) - } -} +import ValueFlowTest diff --git a/java/ql/test/query-tests/security/CWE-502/A.java b/java/ql/test/query-tests/security/CWE-502/A.java index e95f15bff4f..f3bd633f880 100644 --- a/java/ql/test/query-tests/security/CWE-502/A.java +++ b/java/ql/test/query-tests/security/CWE-502/A.java @@ -7,6 +7,7 @@ import com.esotericsoftware.kryo.io.Input; import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.Yaml; +import org.nibblesec.tools.SerialKiller; public class A { public Object deserialize1(Socket sock) throws java.io.IOException, ClassNotFoundException { @@ -21,6 +22,12 @@ public class A { return in.readUnshared(); // $unsafeDeserialization } + public Object deserializeWithSerialKiller(Socket sock) throws java.io.IOException, ClassNotFoundException { + InputStream inputStream = sock.getInputStream(); + ObjectInputStream in = new SerialKiller(inputStream, "/etc/serialkiller.conf"); + return in.readUnshared(); // OK + } + public Object deserialize3(Socket sock) throws java.io.IOException { InputStream inputStream = sock.getInputStream(); XMLDecoder d = new XMLDecoder(inputStream); diff --git a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected +++ b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql index 4d10c798e33..68623825985 100644 --- a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql +++ b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.UnsafeDeserializationQuery import TestUtilities.InlineExpectationsTest -class UnsafeDeserializationTest extends InlineExpectationsTest { - UnsafeDeserializationTest() { this = "UnsafeDeserializationTest" } +module UnsafeDeserializationTest implements TestSig { + string getARelevantTag() { result = "unsafeDeserialization" } - override string getARelevantTag() { result = "unsafeDeserialization" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "unsafeDeserialization" and exists(DataFlow::Node sink | UnsafeDeserializationFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class UnsafeDeserializationTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-502/options b/java/ql/test/query-tests/security/CWE-502/options index 0e9cab2d100..47e25fe74fb 100644 --- a/java/ql/test/query-tests/security/CWE-502/options +++ b/java/ql/test/query-tests/security/CWE-502/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/snakeyaml-1.21:${testdir}/../../../stubs/xstream-1.4.10:${testdir}/../../../stubs/kryo-4.0.2:${testdir}/../../../stubs/jsr311-api-1.1.1:${testdir}/../../../stubs/fastjson-1.2.74:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/jyaml-1.3:${testdir}/../../../stubs/json-io-4.10.0:${testdir}/../../../stubs/yamlbeans-1.09:${testdir}/../../../stubs/hessian-4.0.38:${testdir}/../../../stubs/castor-1.4.1:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/jabsorb-1.3.2:${testdir}/../../../stubs/json-java-20210307:${testdir}/../../../stubs/joddjson-6.0.3:${testdir}/../../../stubs/flexjson-2.1:${testdir}/../../../stubs/gson-2.8.6:${testdir}/../../../stubs/google-android-9.0.0 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/snakeyaml-1.21:${testdir}/../../../stubs/xstream-1.4.10:${testdir}/../../../stubs/kryo-4.0.2:${testdir}/../../../stubs/jsr311-api-1.1.1:${testdir}/../../../stubs/fastjson-1.2.74:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/jyaml-1.3:${testdir}/../../../stubs/json-io-4.10.0:${testdir}/../../../stubs/yamlbeans-1.09:${testdir}/../../../stubs/hessian-4.0.38:${testdir}/../../../stubs/castor-1.4.1:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12:${testdir}/../../../stubs/jabsorb-1.3.2:${testdir}/../../../stubs/json-java-20210307:${testdir}/../../../stubs/joddjson-6.0.3:${testdir}/../../../stubs/flexjson-2.1:${testdir}/../../../stubs/gson-2.8.6:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/serialkiller-4.0.0 diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql index 29057edce71..c0384899d56 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.InsecureBasicAuthQuery import TestUtilities.InlineExpectationsTest -class HasInsecureBasicAuthTest extends InlineExpectationsTest { - HasInsecureBasicAuthTest() { this = "HasInsecureBasicAuthTest" } +module HasInsecureBasicAuthTest implements TestSig { + string getARelevantTag() { result = "hasInsecureBasicAuth" } - override string getARelevantTag() { result = "hasInsecureBasicAuth" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasInsecureBasicAuth" and exists(DataFlow::Node sink | InsecureBasicAuthFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HasInsecureBasicAuthTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected +++ b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql index 4ae89d21313..f75550f5112 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql +++ b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.InsecureLdapAuthQuery import TestUtilities.InlineExpectationsTest -class InsecureLdapAuthenticationTest extends InlineExpectationsTest { - InsecureLdapAuthenticationTest() { this = "InsecureLdapAuthentication" } +module InsecureLdapAuthenticationTest implements TestSig { + string getARelevantTag() { result = "hasInsecureLdapAuth" } - override string getARelevantTag() { result = "hasInsecureLdapAuth" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasInsecureLdapAuth" and exists(DataFlow::Node sink | InsecureLdapUrlFlow::flowTo(sink) | BasicAuthFlow::flowTo(sink) and @@ -18,3 +16,5 @@ class InsecureLdapAuthenticationTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.expected b/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.expected +++ b/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.ql b/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.ql index 26ce8bc7fb7..caa50f9fa75 100644 --- a/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.ql +++ b/java/ql/test/query-tests/security/CWE-524/SensitiveKeyboardCache.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.SensitiveKeyboardCacheQuery import TestUtilities.InlineExpectationsTest -class SensitiveKeyboardCacheTest extends InlineExpectationsTest { - SensitiveKeyboardCacheTest() { this = "SensitiveKeyboardCacheTest" } +module SensitiveKeyboardCacheTest implements TestSig { + string getARelevantTag() { result = "hasResult" } - override string getARelevantTag() { result = "hasResult" } - - override predicate hasActualResult(Location loc, string element, string tag, string value) { + predicate hasActualResult(Location loc, string element, string tag, string value) { exists(AndroidEditableXmlElement el | el = getASensitiveCachedInput() and loc = el.getLocation() and @@ -17,3 +15,5 @@ class SensitiveKeyboardCacheTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.expected b/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.expected +++ b/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.ql b/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.ql index 5de153a9e35..389cff934a9 100644 --- a/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.ql +++ b/java/ql/test/query-tests/security/CWE-532/SensitiveLogInfo.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.SensitiveLoggingQuery - -class HasFlowTest extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - SensitiveLoggerFlow::flow(src, sink) - } - - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.expected b/java/ql/test/query-tests/security/CWE-611/XXE.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-611/XXE.expected +++ b/java/ql/test/query-tests/security/CWE-611/XXE.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.ql b/java/ql/test/query-tests/security/CWE-611/XXE.ql index f1463f561f3..ed12823a6bb 100644 --- a/java/ql/test/query-tests/security/CWE-611/XXE.ql +++ b/java/ql/test/query-tests/security/CWE-611/XXE.ql @@ -1,11 +1,4 @@ import java import TestUtilities.InlineFlowTest import semmle.code.java.security.XxeRemoteQuery - -class HasFlowTest extends InlineFlowTest { - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - XxeFlow::flow(src, sink) - } - - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql index 385ade9105b..3f39a4752bb 100644 --- a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql @@ -3,12 +3,10 @@ import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.XPathInjectionQuery import TestUtilities.InlineExpectationsTest -class HasXPathInjectionTest extends InlineExpectationsTest { - HasXPathInjectionTest() { this = "HasXPathInjectionTest" } +module HasXPathInjectionTest implements TestSig { + string getARelevantTag() { result = "hasXPathInjection" } - override string getARelevantTag() { result = "hasXPathInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasXPathInjection" and exists(DataFlow::Node sink | XPathInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -17,3 +15,5 @@ class HasXPathInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql index 75af0160def..45dea80e72b 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -1,12 +1,10 @@ import TestUtilities.InlineExpectationsTest import semmle.code.java.security.regexp.PolynomialReDoSQuery -class HasPolyRedos extends InlineExpectationsTest { - HasPolyRedos() { this = "HasPolyRedos" } +module HasPolyRedos implements TestSig { + string getARelevantTag() { result = "hasPolyRedos" } - override string getARelevantTag() { result = "hasPolyRedos" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasPolyRedos" and exists(DataFlow::Node sink | PolynomialRedosFlow::flowTo(sink) and @@ -16,3 +14,5 @@ class HasPolyRedos extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-730/ReDoS.expected b/java/ql/test/query-tests/security/CWE-730/ReDoS.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-730/ReDoS.expected +++ b/java/ql/test/query-tests/security/CWE-730/ReDoS.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-730/ReDoS.ql b/java/ql/test/query-tests/security/CWE-730/ReDoS.ql index f7d5d7175b3..97719364f94 100644 --- a/java/ql/test/query-tests/security/CWE-730/ReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/ReDoS.ql @@ -4,12 +4,10 @@ private import semmle.code.java.regex.RegexTreeView::RegexTreeView as TreeView import codeql.regex.nfa.ExponentialBackTracking::Make as ExponentialBackTracking import semmle.code.java.regex.regex -class HasExpRedos extends InlineExpectationsTest { - HasExpRedos() { this = "HasExpRedos" } +module HasExpRedos implements TestSig { + string getARelevantTag() { result = ["hasExpRedos", "hasParseFailure"] } - override string getARelevantTag() { result = ["hasExpRedos", "hasParseFailure"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasExpRedos" and exists(TreeView::RegExpTerm t | ExponentialBackTracking::hasReDoSResult(t, _, _, _) and @@ -28,3 +26,5 @@ class HasExpRedos extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql index f42de310988..afc621e0767 100644 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql @@ -2,12 +2,10 @@ import java import TestUtilities.InlineExpectationsTest import semmle.code.java.security.regexp.RegexInjectionQuery -class RegexInjectionTest extends InlineExpectationsTest { - RegexInjectionTest() { this = "RegexInjectionTest" } +module RegexInjectionTest implements TestSig { + string getARelevantTag() { result = "hasRegexInjection" } - override string getARelevantTag() { result = "hasRegexInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasRegexInjection" and exists(RegexInjectionFlow::PathNode sink | RegexInjectionFlow::flowPath(_, sink) | location = sink.getNode().getLocation() and @@ -16,3 +14,5 @@ class RegexInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.expected b/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.expected +++ b/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.ql b/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.ql index 4da1ca7fd5f..99fba4e9172 100644 --- a/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.ql +++ b/java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.UnsafeAndroidAccessQuery import TestUtilities.InlineExpectationsTest -class UnsafeAndroidAccessTest extends InlineExpectationsTest { - UnsafeAndroidAccessTest() { this = "HasUnsafeAndroidAccess" } +module UnsafeAndroidAccessTest implements TestSig { + string getARelevantTag() { result = "hasUnsafeAndroidAccess" } - override string getARelevantTag() { result = "hasUnsafeAndroidAccess" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasUnsafeAndroidAccess" and exists(DataFlow::Node sink | FetchUntrustedResourceFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class UnsafeAndroidAccessTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected +++ b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql index 01af77284f0..c1bc2049c76 100644 --- a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql +++ b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql @@ -2,11 +2,4 @@ import java import TestUtilities.InlineExpectationsTest import TestUtilities.InlineFlowTest import semmle.code.java.security.RsaWithoutOaepQuery - -class HasFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - RsaWithoutOaepFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.ql b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.ql index 7d7b8e2d2a5..2b2290fad10 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.ql +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsApiCall.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.HardcodedCredentialsApiCallQuery import TestUtilities.InlineExpectationsTest -class HardcodedCredentialsApiCallTest extends InlineExpectationsTest { - HardcodedCredentialsApiCallTest() { this = "HardcodedCredentialsApiCallTest" } +module HardcodedCredentialsApiCallTest implements TestSig { + string getARelevantTag() { result = "HardcodedCredentialsApiCall" } - override string getARelevantTag() { result = "HardcodedCredentialsApiCall" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "HardcodedCredentialsApiCall" and exists(DataFlow::Node sink | HardcodedCredentialApiCallFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HardcodedCredentialsApiCallTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.ql b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.ql index bde1851e43c..10698984828 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.ql +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsComparison.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.HardcodedCredentialsComparison import TestUtilities.InlineExpectationsTest -class HardcodedCredentialsComparisonTest extends InlineExpectationsTest { - HardcodedCredentialsComparisonTest() { this = "HardcodedCredentialsComparisonTest" } +module HardcodedCredentialsComparisonTest implements TestSig { + string getARelevantTag() { result = "HardcodedCredentialsComparison" } - override string getARelevantTag() { result = "HardcodedCredentialsComparison" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "HardcodedCredentialsComparison" and exists(Expr sink | isHardcodedCredentialsComparison(sink, _, _) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HardcodedCredentialsComparisonTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.ql b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.ql index 0fcf2f128ad..ab941d80a4e 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.ql +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedCredentialsSourceCall.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.HardcodedCredentialsSourceCallQuery import TestUtilities.InlineExpectationsTest -class HardcodedCredentialsSourceCallTest extends InlineExpectationsTest { - HardcodedCredentialsSourceCallTest() { this = "HardcodedCredentialsSourceCallTest" } +module HardcodedCredentialsSourceCallTest implements TestSig { + string getARelevantTag() { result = "HardcodedCredentialsSourceCall" } - override string getARelevantTag() { result = "HardcodedCredentialsSourceCall" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "HardcodedCredentialsSourceCall" and exists(DataFlow::Node sink | HardcodedCredentialSourceCallFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HardcodedCredentialsSourceCallTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.expected b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.expected +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.ql b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.ql index 057bbbc2ab0..f734ca356ac 100644 --- a/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.ql +++ b/java/ql/test/query-tests/security/CWE-798/semmle/tests/HardcodedPasswordField.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.HardcodedPasswordField import TestUtilities.InlineExpectationsTest -class HardcodedPasswordFieldTest extends InlineExpectationsTest { - HardcodedPasswordFieldTest() { this = "HardcodedPasswordFieldTest" } +module HardcodedPasswordFieldTest implements TestSig { + string getARelevantTag() { result = "HardcodedPasswordField" } - override string getARelevantTag() { result = "HardcodedPasswordField" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "HardcodedPasswordField" and exists(Expr assigned | passwordFieldAssignedHardcodedValue(_, assigned) | assigned.getLocation() = location and @@ -16,3 +14,5 @@ class HardcodedPasswordFieldTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql index 20ca408f1b2..e77ea5ad228 100644 --- a/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql +++ b/java/ql/test/query-tests/security/CWE-807/semmle/tests/ConditionalBypassTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.ConditionalBypassQuery import TestUtilities.InlineExpectationsTest -class ConditionalBypassTest extends InlineExpectationsTest { - ConditionalBypassTest() { this = "ConditionalBypassTest" } +module ConditionalBypassTest implements TestSig { + string getARelevantTag() { result = "hasConditionalBypassTest" } - override string getARelevantTag() { result = "hasConditionalBypassTest" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasConditionalBypassTest" and exists(DataFlow::Node sink | ConditionalBypassFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class ConditionalBypassTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql index 68db2593628..52dd8ad3417 100644 --- a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.OgnlInjectionQuery import TestUtilities.InlineExpectationsTest -class OgnlInjectionTest extends InlineExpectationsTest { - OgnlInjectionTest() { this = "HasOgnlInjection" } +module OgnlInjectionTest implements TestSig { + string getARelevantTag() { result = "hasOgnlInjection" } - override string getARelevantTag() { result = "hasOgnlInjection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasOgnlInjection" and exists(DataFlow::Node sink | OgnlInjectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class OgnlInjectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql b/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql index 865e6e8f0d3..41dbaad7d05 100644 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.RequestForgeryConfig import TestUtilities.InlineExpectationsTest -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "SSRF" } - override string getARelevantTag() { result = "SSRF" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "SSRF" and exists(DataFlow::Node sink | RequestForgeryFlow::flowTo(sink) and @@ -17,3 +15,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected +++ b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql index 30ced62b2ed..baba5cac103 100644 --- a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql +++ b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.ImproperIntentVerificationQuery import TestUtilities.InlineExpectationsTest -class HasFlowTest extends InlineExpectationsTest { - HasFlowTest() { this = "HasFlowTest" } +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "hasResult" } - override string getARelevantTag() { result = "hasResult" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasResult" and exists(Method orm | unverifiedSystemReceiver(_, orm, _) | orm.getLocation() = location and @@ -16,3 +14,5 @@ class HasFlowTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.expected b/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.expected +++ b/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.ql b/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.ql index fbda52d36ab..934fc5c899b 100644 --- a/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.ql +++ b/java/ql/test/query-tests/security/CWE-926/ImplicitlyExportedAndroidComponentTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.ImplicitlyExportedAndroidComponent import TestUtilities.InlineExpectationsTest -class ImplicitlyExportedAndroidComponentTest extends InlineExpectationsTest { - ImplicitlyExportedAndroidComponentTest() { this = "ImplicitlyExportedAndroidComponentTest" } +module ImplicitlyExportedAndroidComponentTest implements TestSig { + string getARelevantTag() { result = "hasImplicitExport" } - override string getARelevantTag() { result = "hasImplicitExport" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasImplicitExport" and exists(ImplicitlyExportedAndroidComponent impExpAndroidComp | impExpAndroidComp.getLocation() = location and @@ -16,3 +14,5 @@ class ImplicitlyExportedAndroidComponentTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.expected b/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.expected +++ b/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.ql b/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.ql index 9ba691685eb..c7ce16660e1 100644 --- a/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.ql +++ b/java/ql/test/query-tests/security/CWE-926/incomplete_provider_permissions/ContentProviderIncompletePermissionsTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.xml.AndroidManifest import TestUtilities.InlineExpectationsTest -class ContentProviderIncompletePermissionsTest extends InlineExpectationsTest { - ContentProviderIncompletePermissionsTest() { this = "ContentProviderIncompletePermissionsTest" } +module ContentProviderIncompletePermissionsTest implements TestSig { + string getARelevantTag() { result = "hasIncompletePermissions" } - override string getARelevantTag() { result = "hasIncompletePermissions" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasIncompletePermissions" and exists(AndroidProviderXmlElement provider | provider.getLocation() = location and @@ -20,3 +18,5 @@ class ContentProviderIncompletePermissionsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql index 972653380aa..e43b90f8ee8 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.ImplicitPendingIntentsQuery import TestUtilities.InlineExpectationsTest -class ImplicitPendingIntentsTest extends InlineExpectationsTest { - ImplicitPendingIntentsTest() { this = "ImplicitPendingIntentsTest" } +module ImplicitPendingIntentsTest implements TestSig { + string getARelevantTag() { result = "hasImplicitPendingIntent" } - override string getARelevantTag() { result = ["hasImplicitPendingIntent"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasImplicitPendingIntent" and exists(DataFlow::Node sink | ImplicitPendingIntentStartFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class ImplicitPendingIntentsTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.expected b/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.expected +++ b/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.ql b/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.ql index 0f1864398b4..cf7e46b6e8e 100644 --- a/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.ql +++ b/java/ql/test/query-tests/security/CWE-927/SensitiveCommunication.ql @@ -2,11 +2,4 @@ import java import semmle.code.java.security.AndroidSensitiveCommunicationQuery import TestUtilities.InlineExpectationsTest import TestUtilities.InlineFlowTest - -class HasFlowTest extends InlineFlowTest { - override predicate hasValueFlow(DataFlow::Node src, DataFlow::Node sink) { none() } - - override predicate hasTaintFlow(DataFlow::Node src, DataFlow::Node sink) { - SensitiveCommunicationFlow::flow(src, sink) - } -} +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.expected b/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.expected +++ b/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.ql b/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.ql index fb7b1dfee43..0624ae91ca9 100644 --- a/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.ql +++ b/java/ql/test/query-tests/security/CWE-927/SensitiveResultReceiver.ql @@ -8,12 +8,10 @@ class TestSource extends RemoteFlowSource { override string getSourceType() { result = "test" } } -class ResultReceiverTest extends InlineExpectationsTest { - ResultReceiverTest() { this = "ResultReceiverTest" } +module ResultReceiverTest implements TestSig { + string getARelevantTag() { result = "hasSensitiveResultReceiver" } - override string getARelevantTag() { result = "hasSensitiveResultReceiver" } - - override predicate hasActualResult(Location loc, string element, string tag, string value) { + predicate hasActualResult(Location loc, string element, string tag, string value) { exists(SensitiveResultReceiverFlow::PathNode sink | isSensitiveResultReceiver(_, sink, _) and element = sink.toString() and @@ -23,3 +21,5 @@ class ResultReceiverTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.expected b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.expected index e69de29bb2d..48de9172b36 100644 --- a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.ql b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.ql index 7b74855caa5..6c4d121a2bc 100644 --- a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.ql +++ b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.ql @@ -2,12 +2,10 @@ import java import semmle.code.java.security.AndroidIntentRedirectionQuery import TestUtilities.InlineExpectationsTest -class HasAndroidIntentRedirectionTest extends InlineExpectationsTest { - HasAndroidIntentRedirectionTest() { this = "HasAndroidIntentRedirectionTest" } +module HasAndroidIntentRedirectionTest implements TestSig { + string getARelevantTag() { result = "hasAndroidIntentRedirection" } - override string getARelevantTag() { result = "hasAndroidIntentRedirection" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasAndroidIntentRedirection" and exists(DataFlow::Node sink | IntentRedirectionFlow::flowTo(sink) | sink.getLocation() = location and @@ -16,3 +14,5 @@ class HasAndroidIntentRedirectionTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/java/ql/test/stubs/javax-annotation-api-1.3.2/javax/annotation/PostConstruct.java b/java/ql/test/stubs/javax-annotation-api-1.3.2/javax/annotation/PostConstruct.java new file mode 100644 index 00000000000..a7fde6ae23b --- /dev/null +++ b/java/ql/test/stubs/javax-annotation-api-1.3.2/javax/annotation/PostConstruct.java @@ -0,0 +1,13 @@ +package javax.annotation; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +@Documented +@Retention(RUNTIME) +@Target(METHOD) +public @interface PostConstruct { +} diff --git a/java/ql/test/stubs/jenkins/hudson/FilePath.java b/java/ql/test/stubs/jenkins/hudson/FilePath.java new file mode 100644 index 00000000000..24a35901e35 --- /dev/null +++ b/java/ql/test/stubs/jenkins/hudson/FilePath.java @@ -0,0 +1,34 @@ +package hudson; + +import java.io.File; +import java.io.InputStream; +import java.nio.file.OpenOption; + +public class FilePath { + + public static InputStream newInputStreamDenyingSymlinkAsNeeded(File file, + String verificationRoot, OpenOption... openOption) { + return null; + } + + public static InputStream openInputStream(File file, OpenOption[] openOptions) { + return null; + } + + public InputStream read() { + return null; + } + + public InputStream read(FilePath rootPath, OpenOption... openOptions) { + return null; + } + + public InputStream readFromOffset(long offset) { + return null; + } + + public String readToString() { + return null; + } +} + diff --git a/java/ql/test/stubs/jenkins/hudson/Util.java b/java/ql/test/stubs/jenkins/hudson/Util.java new file mode 100644 index 00000000000..61e357abb52 --- /dev/null +++ b/java/ql/test/stubs/jenkins/hudson/Util.java @@ -0,0 +1,7 @@ +package hudson; + +public class Util { + public static String escape(String text) { + return null; + } +} diff --git a/java/ql/test/stubs/jenkins/hudson/model/Descriptor.java b/java/ql/test/stubs/jenkins/hudson/model/Descriptor.java new file mode 100644 index 00000000000..613ed31f665 --- /dev/null +++ b/java/ql/test/stubs/jenkins/hudson/model/Descriptor.java @@ -0,0 +1,5 @@ +package hudson.model; + +public abstract class Descriptor { + +} diff --git a/java/ql/test/stubs/serialkiller-4.0.0/org/nibblesec/tools/SerialKiller.java b/java/ql/test/stubs/serialkiller-4.0.0/org/nibblesec/tools/SerialKiller.java new file mode 100644 index 00000000000..fc59ccd538d --- /dev/null +++ b/java/ql/test/stubs/serialkiller-4.0.0/org/nibblesec/tools/SerialKiller.java @@ -0,0 +1,23 @@ +/* + * SerialKiller.java + * + * Copyright (c) 2015-2016 Luca Carettoni + * + * SerialKiller is an easy-to-use look-ahead Java deserialization library + * to secure application from untrusted input. When Java serialization is + * used to exchange information between a client and a server, attackers + * can replace the legitimate serialized stream with malicious data. + * SerialKiller inspects Java classes during naming resolution and allows + * a combination of blacklisting/whitelisting to secure your application. + * + * Dual-Licensed Software: Apache v2.0 and GPL v2.0 + */ +package org.nibblesec.tools; + +import java.io.ObjectInputStream; +import java.io.InputStream; +import java.io.IOException; + +public class SerialKiller extends ObjectInputStream { + public SerialKiller(InputStream inputStream, String configFile) throws IOException {} +} \ No newline at end of file diff --git a/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundConstructor.java b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundConstructor.java new file mode 100644 index 00000000000..6909171def8 --- /dev/null +++ b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundConstructor.java @@ -0,0 +1,13 @@ +package org.kohsuke.stapler; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +@Retention(RUNTIME) +@Target(CONSTRUCTOR) +@Documented +public @interface DataBoundConstructor { +} diff --git a/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundResolvable.java b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundResolvable.java new file mode 100644 index 00000000000..0fc9cffd0aa --- /dev/null +++ b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundResolvable.java @@ -0,0 +1,4 @@ +package org.kohsuke.stapler; + +public interface DataBoundResolvable { +} diff --git a/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundSetter.java b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundSetter.java new file mode 100644 index 00000000000..ff11084fcbd --- /dev/null +++ b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/DataBoundSetter.java @@ -0,0 +1,14 @@ +package org.kohsuke.stapler; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +@Retention(RUNTIME) +@Target({METHOD, FIELD}) +@Documented +public @interface DataBoundSetter { +} diff --git a/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/InjectedParameter.java b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/InjectedParameter.java new file mode 100644 index 00000000000..1674e667233 --- /dev/null +++ b/java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/InjectedParameter.java @@ -0,0 +1,13 @@ +package org.kohsuke.stapler; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import static java.lang.annotation.ElementType.ANNOTATION_TYPE;; + +@Retention(RUNTIME) +@Target(ANNOTATION_TYPE) +@Documented +public @interface InjectedParameter { +} diff --git a/javascript/downgrades/qlpack.yml b/javascript/downgrades/qlpack.yml index b23d7602f30..2ef368fed0b 100644 --- a/javascript/downgrades/qlpack.yml +++ b/javascript/downgrades/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/javascript-downgrades groups: javascript downgrades: . library: true +warnOnImplicitThis: true diff --git a/javascript/ql/examples/qlpack.yml b/javascript/ql/examples/qlpack.yml index 9bd7a0e73a9..75f3cbcb2cd 100644 --- a/javascript/ql/examples/qlpack.yml +++ b/javascript/ql/examples/qlpack.yml @@ -4,3 +4,4 @@ groups: - examples dependencies: codeql/javascript-all: ${workspace} +warnOnImplicitThis: true diff --git a/javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml index addde82c591..cda69768254 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml +++ b/javascript/ql/experimental/adaptivethreatmodeling/lib/qlpack.yml @@ -8,3 +8,4 @@ groups: - experimental dependencies: codeql/javascript-all: ${workspace} +warnOnImplicitThis: true diff --git a/javascript/ql/experimental/adaptivethreatmodeling/model/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/model/qlpack.yml index e37547ed938..affda0e0b16 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/model/qlpack.yml +++ b/javascript/ql/experimental/adaptivethreatmodeling/model/qlpack.yml @@ -6,3 +6,4 @@ groups: - experimental mlModels: - "resources/*.codeqlmodel" +warnOnImplicitThis: true diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml index a42eb4067ac..cdf0b9d5aab 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml @@ -8,3 +8,4 @@ groups: dependencies: codeql/javascript-experimental-atm-lib: ${workspace} codeql/javascript-experimental-atm-model: "0.3.1-2023-03-01-12h42m43s.strong-turtle-1xp3dqvv.ecb17d40286d14132b481c065a43459a7f0ba9059015b7a49c909c9f9ce5fec5" +warnOnImplicitThis: true diff --git a/javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml index dec06084ef1..6c2930991e4 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml +++ b/javascript/ql/experimental/adaptivethreatmodeling/src/qlpack.yml @@ -10,3 +10,4 @@ groups: dependencies: codeql/javascript-experimental-atm-lib: ${workspace} codeql/javascript-experimental-atm-model: "0.3.1-2023-03-01-12h42m43s.strong-turtle-1xp3dqvv.ecb17d40286d14132b481c065a43459a7f0ba9059015b7a49c909c9f9ce5fec5" +warnOnImplicitThis: true diff --git a/javascript/ql/experimental/adaptivethreatmodeling/test/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/test/qlpack.yml index 987b0ef55c4..5a7612bd33c 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/test/qlpack.yml +++ b/javascript/ql/experimental/adaptivethreatmodeling/test/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/javascript-experimental-atm-tests extractor: javascript dependencies: codeql/javascript-experimental-atm-model-building: ${workspace} +warnOnImplicitThis: true diff --git a/javascript/ql/integration-tests/all-platforms/qlpack.yml b/javascript/ql/integration-tests/all-platforms/qlpack.yml index f4bc24850b4..9f076584585 100644 --- a/javascript/ql/integration-tests/all-platforms/qlpack.yml +++ b/javascript/ql/integration-tests/all-platforms/qlpack.yml @@ -1,3 +1,4 @@ dependencies: codeql/javascript-all: '*' codeql/javascript-queries: '*' +warnOnImplicitThis: true diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 97c9fe20787..14cbfac4141 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* Added models for the Webix Framework. + ## 0.6.4 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/0.7.0.md b/javascript/ql/lib/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..3c2c9c44d8e --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.7.0.md @@ -0,0 +1,5 @@ +## 0.7.0 + +### Minor Analysis Improvements + +* Added models for the Webix Framework. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index ed38db6550e..07fb759bd65 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -134,6 +134,7 @@ import semmle.javascript.frameworks.TrustedTypes import semmle.javascript.frameworks.UriLibraries import semmle.javascript.frameworks.Vue import semmle.javascript.frameworks.Vuex +import semmle.javascript.frameworks.Webix import semmle.javascript.frameworks.WebSocket import semmle.javascript.frameworks.XmlParsers import semmle.javascript.frameworks.xUnit diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 95fcaa3e9e5..20867487b74 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,11 +1,12 @@ name: codeql/javascript-all -version: 0.6.4 +version: 0.7.0 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript library: true upgrades: upgrades dependencies: + codeql/mad: ${workspace} codeql/regex: ${workspace} codeql/tutorial: ${workspace} codeql/util: ${workspace} diff --git a/javascript/ql/lib/semmle/javascript/Extend.qll b/javascript/ql/lib/semmle/javascript/Extend.qll index 3b389691434..d0eeade5892 100644 --- a/javascript/ql/lib/semmle/javascript/Extend.qll +++ b/javascript/ql/lib/semmle/javascript/Extend.qll @@ -96,7 +96,10 @@ private class ExtendCallDeep extends ExtendCall { callee = LodashUnderscore::member("merge") or callee = LodashUnderscore::member("mergeWith") or callee = LodashUnderscore::member("defaultsDeep") or - callee = AngularJS::angular().getAPropertyRead("merge") + callee = AngularJS::angular().getAPropertyRead("merge") or + callee = + [DataFlow::moduleImport("webix"), DataFlow::globalVarRef("webix")] + .getAPropertyRead(["extend", "copy"]) ) } diff --git a/javascript/ql/lib/semmle/javascript/InclusionTests.qll b/javascript/ql/lib/semmle/javascript/InclusionTests.qll index 849376374ad..3d9921bf6ff 100644 --- a/javascript/ql/lib/semmle/javascript/InclusionTests.qll +++ b/javascript/ql/lib/semmle/javascript/InclusionTests.qll @@ -69,7 +69,6 @@ module InclusionTest { inner.getContainerNode().getALocalSource() = DataFlow::parameterNode(callee.getAParameter()) } - pragma[assume_small_delta] override DataFlow::Node getContainerNode() { exists(int arg | inner.getContainerNode().getALocalSource() = @@ -78,7 +77,6 @@ module InclusionTest { ) } - pragma[assume_small_delta] override DataFlow::Node getContainedNode() { exists(int arg | inner.getContainedNode().getALocalSource() = diff --git a/javascript/ql/lib/semmle/javascript/StringOps.qll b/javascript/ql/lib/semmle/javascript/StringOps.qll index da751b550d7..6b7820e964d 100644 --- a/javascript/ql/lib/semmle/javascript/StringOps.qll +++ b/javascript/ql/lib/semmle/javascript/StringOps.qll @@ -67,7 +67,6 @@ module StringOps { inner.getSubstring().getALocalSource().getEnclosingExpr() = callee.getAParameter() } - pragma[assume_small_delta] override DataFlow::Node getBaseString() { exists(int arg | inner.getBaseString().getALocalSource().getEnclosingExpr() = callee.getParameter(arg) and @@ -75,7 +74,6 @@ module StringOps { ) } - pragma[assume_small_delta] override DataFlow::Node getSubstring() { exists(int arg | inner.getSubstring().getALocalSource().getEnclosingExpr() = callee.getParameter(arg) and @@ -294,7 +292,6 @@ module StringOps { inner.getSubstring().getALocalSource().getEnclosingExpr() = callee.getAParameter() } - pragma[assume_small_delta] override DataFlow::Node getBaseString() { exists(int arg | inner.getBaseString().getALocalSource().getEnclosingExpr() = callee.getParameter(arg) and @@ -302,7 +299,6 @@ module StringOps { ) } - pragma[assume_small_delta] override DataFlow::Node getSubstring() { exists(int arg | inner.getSubstring().getALocalSource().getEnclosingExpr() = callee.getParameter(arg) and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Vuex.qll b/javascript/ql/lib/semmle/javascript/frameworks/Vuex.qll index 74e02422876..6e111207790 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Vuex.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Vuex.qll @@ -289,7 +289,8 @@ module Vuex { or exists(string base, string prop | result = stateRefByAccessPath(base).getMember(prop) and - path = appendToNamespace(base, prop) + path = appendToNamespace(base, prop) and + path.length() < 100 ) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Webix.qll b/javascript/ql/lib/semmle/javascript/frameworks/Webix.qll new file mode 100644 index 00000000000..effd49c632b --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/Webix.qll @@ -0,0 +1,23 @@ +/** + * Provides classes and predicates for working with the `webix` library. + */ + +private import javascript + +/** + * Provides classes and predicates for working with the `webix` library. + */ +module Webix { + /** The global variable `webix` as an entry point for API graphs. */ + private class WebixGlobalEntry extends API::EntryPoint { + WebixGlobalEntry() { this = "WebixGlobalEntry" } + + override DataFlow::SourceNode getASource() { result = DataFlow::globalVarRef("webix") } + } + + /** Gets a reference to the Webix package. */ + API::Node webix() { + result = API::moduleImport("webix") or + result = any(WebixGlobalEntry w).getANode() + } +} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll index 227f4ea22fb..2e598711fcc 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll @@ -643,6 +643,15 @@ module ModelOutput { baseNode = getInvocationFromPath(type, path) } + /** + * Holds if a `baseNode` is a callable identified by the `type,path` part of a summary row. + */ + cached + predicate resolvedSummaryRefBase(string type, string path, API::Node baseNode) { + summaryModel(type, path, _, _, _) and + baseNode = getNodeFromPath(type, path) + } + /** * Holds if `node` is seen as an instance of `type` due to a type definition * contributed by a CSV model. @@ -653,6 +662,17 @@ module ModelOutput { import Cached import Specific::ModelOutputSpecific + private import codeql.mad.ModelValidation as SharedModelVal + + private module KindValConfig implements SharedModelVal::KindValidationConfigSig { + predicate summaryKind(string kind) { summaryModel(_, _, _, _, kind) } + + predicate sinkKind(string kind) { sinkModel(_, _, kind) } + + predicate sourceKind(string kind) { sourceModel(_, _, kind) } + } + + private module KindVal = SharedModelVal::KindValidation; /** * Gets an error message relating to an invalid CSV row in a model. @@ -698,5 +718,8 @@ module ModelOutput { not isValidNoArgumentTokenInIdentifyingAccessPath(token.getName()) and result = "Invalid token '" + token + "' is missing its arguments, in access path: " + path ) + or + // Check for invalid model kinds + result = KindVal::getInvalidModelKind() } } diff --git a/javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll b/javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll index 10f07b39725..2a2d4d4d601 100644 --- a/javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll @@ -15,6 +15,14 @@ private class DangerousPrefix extends string { this = " | Taint [externally controlled string] | test.py:14 | test.py:14:14:14:25 | tainted_list | | -| Taint [externally controlled string] | test.py:9 | test.py:9:20:9:35 | List | | --> | Taint [externally controlled string] | test.py:20 | test.py:20:15:20:26 | tainted_list | | -| Taint [externally controlled string] | test.py:9 | test.py:9:20:9:35 | List | | --> | Taint [externally controlled string] | test.py:21 | test.py:21:13:21:24 | tainted_list | | -| Taint [externally controlled string] | test.py:9 | test.py:9:20:9:35 | List | | --> | Taint [externally controlled string] | test.py:22 | test.py:22:19:22:30 | tainted_list | | -| Taint [externally controlled string] | test.py:10 | test.py:10:22:10:36 | Tuple | | --> | Taint [externally controlled string] | test.py:15 | test.py:15:14:15:26 | tainted_tuple | | -| Taint [externally controlled string] | test.py:14 | test.py:14:9:14:26 | list() | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:10:23:10 | a | | -| Taint [externally controlled string] | test.py:14 | test.py:14:14:14:25 | tainted_list | | --> | Taint [externally controlled string] | test.py:14 | test.py:14:9:14:26 | list() | | -| Taint [externally controlled string] | test.py:15 | test.py:15:9:15:27 | list() | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:13:23:13 | b | | -| Taint [externally controlled string] | test.py:15 | test.py:15:14:15:26 | tainted_tuple | | --> | Taint [externally controlled string] | test.py:15 | test.py:15:9:15:27 | list() | | -| Taint [externally controlled string] | test.py:17 | test.py:17:9:17:35 | list() | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:19:23:19 | d | | -| Taint [externally controlled string] | test.py:17 | test.py:17:14:17:34 | Attribute() | | --> | Taint [externally controlled string] | test.py:17 | test.py:17:9:17:35 | list() | | -| Taint [externally controlled string] | test.py:20 | test.py:20:9:20:27 | tuple() | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:25:23:25 | f | | -| Taint [externally controlled string] | test.py:20 | test.py:20:15:20:26 | tainted_list | | --> | Taint [externally controlled string] | test.py:20 | test.py:20:9:20:27 | tuple() | | -| Taint [externally controlled string] | test.py:21 | test.py:21:9:21:25 | set() | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:28:23:28 | g | | -| Taint [externally controlled string] | test.py:21 | test.py:21:13:21:24 | tainted_list | | --> | Taint [externally controlled string] | test.py:21 | test.py:21:9:21:25 | set() | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:27 | test.py:27:9:27:20 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:28 | test.py:28:9:28:20 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:29 | test.py:29:9:29:20 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:30 | test.py:30:9:30:20 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:31 | test.py:31:15:31:26 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:33 | test.py:33:14:33:25 | tainted_list | | -| Taint [externally controlled string] | test.py:26 | test.py:26:20:26:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:35 | test.py:35:23:35:34 | tainted_list | | -| Taint [externally controlled string] | test.py:27 | test.py:27:9:27:20 | tainted_list | | --> | Taint externally controlled string | test.py:27 | test.py:27:9:27:23 | Subscript | | -| Taint [externally controlled string] | test.py:28 | test.py:28:9:28:20 | tainted_list | | --> | Taint externally controlled string | test.py:28 | test.py:28:9:28:23 | Subscript | | -| Taint [externally controlled string] | test.py:29 | test.py:29:9:29:20 | tainted_list | | --> | Taint [externally controlled string] | test.py:29 | test.py:29:9:29:25 | Subscript | | -| Taint [externally controlled string] | test.py:29 | test.py:29:9:29:25 | Subscript | | --> | Taint [externally controlled string] | test.py:32 | test.py:32:16:32:16 | c | | -| Taint [externally controlled string] | test.py:30 | test.py:30:9:30:20 | tainted_list | | --> | Taint [externally controlled string] | test.py:30 | test.py:30:9:30:27 | Attribute() | | -| Taint [externally controlled string] | test.py:30 | test.py:30:9:30:27 | Attribute() | | --> | Taint [externally controlled string] | test.py:32 | test.py:32:19:32:19 | d | | -| Taint [externally controlled string] | test.py:31 | test.py:31:15:31:26 | tainted_list | | --> | Taint externally controlled string | test.py:32 | test.py:32:22:32:22 | e | | -| Taint [externally controlled string] | test.py:31 | test.py:31:15:31:26 | tainted_list | | --> | Taint externally controlled string | test.py:32 | test.py:32:25:32:25 | f | | -| Taint [externally controlled string] | test.py:31 | test.py:31:15:31:26 | tainted_list | | --> | Taint externally controlled string | test.py:32 | test.py:32:28:32:28 | g | | -| Taint [externally controlled string] | test.py:33 | test.py:33:14:33:25 | tainted_list | | --> | Taint externally controlled string | test.py:33 | test.py:33:5:33:26 | For | | -| Taint [externally controlled string] | test.py:35 | test.py:35:14:35:35 | reversed() | | --> | Taint externally controlled string | test.py:35 | test.py:35:5:35:36 | For | | -| Taint [externally controlled string] | test.py:35 | test.py:35:23:35:34 | tainted_list | | --> | Taint [externally controlled string] | test.py:35 | test.py:35:14:35:35 | reversed() | | -| Taint [externally controlled string] | test.py:44 | test.py:44:14:44:34 | Attribute() | | --> | Taint externally controlled string | test.py:44 | test.py:44:5:44:35 | For | | -| Taint externally controlled string | test.py:8 | test.py:8:22:8:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:9 | test.py:9:21:9:34 | tainted_string | | -| Taint externally controlled string | test.py:8 | test.py:8:22:8:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:10 | test.py:10:22:10:35 | tainted_string | | -| Taint externally controlled string | test.py:8 | test.py:8:22:8:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:11 | test.py:11:20:11:33 | tainted_string | | -| Taint externally controlled string | test.py:8 | test.py:8:22:8:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:12 | test.py:12:28:12:41 | tainted_string | | -| Taint externally controlled string | test.py:9 | test.py:9:21:9:34 | tainted_string | | --> | Taint [externally controlled string] | test.py:9 | test.py:9:20:9:35 | List | | -| Taint externally controlled string | test.py:10 | test.py:10:22:10:35 | tainted_string | | --> | Taint [externally controlled string] | test.py:10 | test.py:10:22:10:36 | Tuple | | -| Taint externally controlled string | test.py:12 | test.py:12:28:12:41 | tainted_string | | --> | Taint {externally controlled string} | test.py:12 | test.py:12:20:12:42 | Dict | | -| Taint externally controlled string | test.py:27 | test.py:27:9:27:23 | Subscript | | --> | Taint externally controlled string | test.py:32 | test.py:32:10:32:10 | a | | -| Taint externally controlled string | test.py:28 | test.py:28:9:28:23 | Subscript | | --> | Taint externally controlled string | test.py:32 | test.py:32:13:32:13 | b | | -| Taint externally controlled string | test.py:33 | test.py:33:5:33:26 | For | | --> | Taint externally controlled string | test.py:34 | test.py:34:14:34:14 | h | | -| Taint externally controlled string | test.py:35 | test.py:35:5:35:36 | For | | --> | Taint externally controlled string | test.py:36 | test.py:36:14:36:14 | i | | -| Taint externally controlled string | test.py:40 | test.py:40:9:40:28 | Subscript | | --> | Taint externally controlled string | test.py:43 | test.py:43:10:43:10 | a | | -| Taint externally controlled string | test.py:41 | test.py:41:9:41:23 | Subscript | | --> | Taint externally controlled string | test.py:43 | test.py:43:13:43:13 | b | | -| Taint externally controlled string | test.py:44 | test.py:44:5:44:35 | For | | --> | Taint externally controlled string | test.py:45 | test.py:45:14:45:14 | d | | -| Taint externally controlled string | test.py:62 | test.py:62:34:62:47 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:62 | test.py:62:5:62:47 | BinaryExpr | | -| Taint {externally controlled string} | test.py:12 | test.py:12:20:12:42 | Dict | | --> | Taint {externally controlled string} | test.py:17 | test.py:17:14:17:25 | tainted_dict | | -| Taint {externally controlled string} | test.py:12 | test.py:12:20:12:42 | Dict | | --> | Taint {externally controlled string} | test.py:18 | test.py:18:14:18:25 | tainted_dict | | -| Taint {externally controlled string} | test.py:17 | test.py:17:14:17:25 | tainted_dict | | --> | Taint [externally controlled string] | test.py:17 | test.py:17:14:17:34 | Attribute() | | -| Taint {externally controlled string} | test.py:39 | test.py:39:20:39:31 | TAINTED_DICT | | --> | Taint {externally controlled string} | test.py:40 | test.py:40:9:40:20 | tainted_dict | | -| Taint {externally controlled string} | test.py:39 | test.py:39:20:39:31 | TAINTED_DICT | | --> | Taint {externally controlled string} | test.py:41 | test.py:41:9:41:20 | tainted_dict | | -| Taint {externally controlled string} | test.py:39 | test.py:39:20:39:31 | TAINTED_DICT | | --> | Taint {externally controlled string} | test.py:42 | test.py:42:9:42:20 | tainted_dict | | -| Taint {externally controlled string} | test.py:39 | test.py:39:20:39:31 | TAINTED_DICT | | --> | Taint {externally controlled string} | test.py:44 | test.py:44:14:44:25 | tainted_dict | | -| Taint {externally controlled string} | test.py:39 | test.py:39:20:39:31 | TAINTED_DICT | | --> | Taint {externally controlled string} | test.py:46 | test.py:46:17:46:28 | tainted_dict | | -| Taint {externally controlled string} | test.py:40 | test.py:40:9:40:20 | tainted_dict | | --> | Taint externally controlled string | test.py:40 | test.py:40:9:40:28 | Subscript | | -| Taint {externally controlled string} | test.py:41 | test.py:41:9:41:20 | tainted_dict | | --> | Taint externally controlled string | test.py:41 | test.py:41:9:41:23 | Subscript | | -| Taint {externally controlled string} | test.py:42 | test.py:42:9:42:20 | tainted_dict | | --> | Taint {externally controlled string} | test.py:42 | test.py:42:9:42:27 | Attribute() | | -| Taint {externally controlled string} | test.py:42 | test.py:42:9:42:27 | Attribute() | | --> | Taint {externally controlled string} | test.py:43 | test.py:43:16:43:16 | c | | -| Taint {externally controlled string} | test.py:44 | test.py:44:14:44:25 | tainted_dict | | --> | Taint [externally controlled string] | test.py:44 | test.py:44:14:44:34 | Attribute() | | diff --git a/python/ql/test/library-tests/taint/collections/TestStep.ql b/python/ql/test/library-tests/taint/collections/TestStep.ql deleted file mode 100644 index 177edce3498..00000000000 --- a/python/ql/test/library-tests/taint/collections/TestStep.ql +++ /dev/null @@ -1,11 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from TaintedNode n, TaintedNode s -where - n.getLocation().getFile().getShortName() = "test.py" and - s.getLocation().getFile().getShortName() = "test.py" and - s = n.getASuccessor() -select "Taint " + n.getTaintKind(), n.getLocation().toString(), n.getAstNode(), n.getContext(), - " --> ", "Taint " + s.getTaintKind(), s.getLocation().toString(), s.getAstNode(), s.getContext() diff --git a/python/ql/test/library-tests/taint/collections/TestTaint.expected b/python/ql/test/library-tests/taint/collections/TestTaint.expected deleted file mode 100644 index aae51236e6d..00000000000 --- a/python/ql/test/library-tests/taint/collections/TestTaint.expected +++ /dev/null @@ -1,33 +0,0 @@ -| test.py:23 | test_construction | a | [externally controlled string] | -| test.py:23 | test_construction | b | [externally controlled string] | -| test.py:23 | test_construction | c | NO TAINT | -| test.py:23 | test_construction | d | [externally controlled string] | -| test.py:23 | test_construction | e | NO TAINT | -| test.py:23 | test_construction | f | [externally controlled string] | -| test.py:23 | test_construction | g | [externally controlled string] | -| test.py:23 | test_construction | h | NO TAINT | -| test.py:32 | test_access | a | externally controlled string | -| test.py:32 | test_access | b | externally controlled string | -| test.py:32 | test_access | c | [externally controlled string] | -| test.py:32 | test_access | d | [externally controlled string] | -| test.py:32 | test_access | e | externally controlled string | -| test.py:32 | test_access | f | externally controlled string | -| test.py:32 | test_access | g | externally controlled string | -| test.py:34 | test_access | h | externally controlled string | -| test.py:36 | test_access | i | externally controlled string | -| test.py:43 | test_dict_access | a | externally controlled string | -| test.py:43 | test_dict_access | b | externally controlled string | -| test.py:43 | test_dict_access | c | {externally controlled string} | -| test.py:45 | test_dict_access | d | externally controlled string | -| test.py:47 | test_dict_access | e | NO TAINT | -| test.py:58 | test_named_tuple | a | NO TAINT | -| test.py:58 | test_named_tuple | b | NO TAINT | -| test.py:58 | test_named_tuple | c | NO TAINT | -| test.py:58 | test_named_tuple | d | NO TAINT | -| test.py:58 | test_named_tuple | e | NO TAINT | -| test.py:58 | test_named_tuple | f | NO TAINT | -| test.py:67 | test_defaultdict | a | NO TAINT | -| test.py:67 | test_defaultdict | b | NO TAINT | -| test.py:67 | test_defaultdict | c | NO TAINT | -| test.py:69 | test_defaultdict | d | NO TAINT | -| test.py:71 | test_defaultdict | e | NO TAINT | diff --git a/python/ql/test/library-tests/taint/collections/TestTaint.ql b/python/ql/test/library-tests/taint/collections/TestTaint.ql deleted file mode 100644 index 47883578516..00000000000 --- a/python/ql/test/library-tests/taint/collections/TestTaint.ql +++ /dev/null @@ -1,19 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from Call call, Expr arg, string taint_string -where - call.getLocation().getFile().getShortName() = "test.py" and - call.getFunc().(Name).getId() = "test" and - arg = call.getAnArg() and - ( - not exists(TaintedNode tainted | tainted.getAstNode() = arg) and - taint_string = "NO TAINT" - or - exists(TaintedNode tainted | tainted.getAstNode() = arg | - taint_string = tainted.getTaintKind().toString() - ) - ) -select arg.getLocation().toString(), call.getScope().(Function).getName(), arg.toString(), - taint_string diff --git a/python/ql/test/library-tests/taint/collections/test.py b/python/ql/test/library-tests/taint/collections/test.py deleted file mode 100644 index 445effe19ce..00000000000 --- a/python/ql/test/library-tests/taint/collections/test.py +++ /dev/null @@ -1,71 +0,0 @@ -from collections import defaultdict, namedtuple - -# Use to show only interesting results in qltest output -def test(*args): - pass - -def test_construction(): - tainted_string = TAINTED_STRING - tainted_list = [tainted_string] - tainted_tuple = (tainted_string,) - tainted_set = {tainted_string} # TODO: set currently not handled - tainted_dict = {'key': tainted_string} - - a = list(tainted_list) - b = list(tainted_tuple) - c = list(tainted_set) # TODO: set currently not handled - d = list(tainted_dict.values()) - e = list(tainted_dict.items()) # TODO: dict.items() currently not handled - - f = tuple(tainted_list) - g = set(tainted_list) - h = frozenset(tainted_list) # TODO: frozenset constructor currently not handled - test(a, b, c, d, e, f, g, h) - -def test_access(): - tainted_list = TAINTED_LIST - a = tainted_list[0] - b = tainted_list[x] - c = tainted_list[y:z] - d = tainted_list.copy() - e, f, g = tainted_list - test(a, b, c, d, e, f, g) - for h in tainted_list: - test(h) - for i in reversed(tainted_list): - test(i) - -def test_dict_access(x): - tainted_dict = TAINTED_DICT - a = tainted_dict["name"] - b = tainted_dict[x] - c = tainted_dict.copy() - test(a, b, c) - for d in tainted_dict.values(): - test(d) - for _, e in tainted_dict.items(): # TODO: dict.items() currently not handled - test(e) - -def test_named_tuple(): # TODO: namedtuple currently not handled - Point = namedtuple('Point', ['x', 'y']) - point = Point(TAINTED_STRING, 'const') - - a = point[0] - b = point.x - c = point[1] - d = point.y - e, f = point - test(a, b, c, d, e, f) - -def test_defaultdict(key, x): # TODO: defaultdict currently not handled - tainted_default_dict = defaultdict(str) - tainted_default_dict[key] += TAINTED_STRING - - a = tainted_dict["name"] - b = tainted_dict[x] - c = tainted_dict.copy() - test(a, b, c) - for d in tainted_dict.values(): - test(d) - for _, e in tainted_dict.items(): - test(e) diff --git a/python/ql/test/library-tests/taint/config/RockPaperScissors.expected b/python/ql/test/library-tests/taint/config/RockPaperScissors.expected index 0639e4bf227..ae34dcd904e 100644 --- a/python/ql/test/library-tests/taint/config/RockPaperScissors.expected +++ b/python/ql/test/library-tests/taint/config/RockPaperScissors.expected @@ -1,99 +1,3 @@ -edges -| carrier.py:17:9:17:31 | .attr = simple.test | carrier.py:18:10:18:10 | .attr = simple.test | -| carrier.py:17:25:17:30 | simple.test | carrier.py:17:9:17:31 | .attr = simple.test | -| carrier.py:18:10:18:10 | .attr = simple.test | carrier.py:18:10:18:15 | simple.test | -| carrier.py:21:9:21:28 | explicit.carrier | carrier.py:22:10:22:10 | explicit.carrier | -| carrier.py:22:10:22:10 | explicit.carrier | carrier.py:22:10:22:22 | simple.test | -| carrier.py:25:9:25:36 | .attr = simple.test | carrier.py:26:10:26:10 | .attr = simple.test | -| carrier.py:25:13:25:35 | .attr = simple.test | carrier.py:25:9:25:36 | .attr = simple.test | -| carrier.py:25:29:25:34 | simple.test | carrier.py:25:13:25:35 | .attr = simple.test | -| carrier.py:26:10:26:10 | .attr = simple.test | carrier.py:26:10:26:21 | simple.test | -| carrier.py:29:9:29:33 | explicit.carrier | carrier.py:30:10:30:10 | explicit.carrier | -| carrier.py:29:13:29:32 | explicit.carrier | carrier.py:29:9:29:33 | explicit.carrier | -| carrier.py:30:10:30:10 | explicit.carrier | carrier.py:30:10:30:22 | simple.test | -| carrier.py:33:9:33:45 | .attr = explicit.carrier | carrier.py:34:9:34:9 | .attr = explicit.carrier | -| carrier.py:33:25:33:44 | explicit.carrier | carrier.py:33:9:33:45 | .attr = explicit.carrier | -| carrier.py:34:9:34:9 | .attr = explicit.carrier | carrier.py:34:9:34:14 | explicit.carrier | -| carrier.py:34:9:34:14 | explicit.carrier | carrier.py:35:10:35:10 | explicit.carrier | -| carrier.py:35:10:35:10 | explicit.carrier | carrier.py:35:10:35:22 | simple.test | -| deep.py:20:5:20:14 | simple.test | deep.py:22:6:22:6 | simple.test | -| deep.py:20:8:20:13 | simple.test | deep.py:20:5:20:14 | simple.test | -| module.py:3:13:3:18 | simple.test | test.py:85:8:85:13 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:88:9:88:14 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:110:11:110:16 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:115:11:115:16 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:155:20:155:38 | simple.test | -| module.py:7:12:7:17 | simple.test | test.py:100:9:100:31 | simple.test | -| rockpaperscissors.py:24:9:24:12 | rock | rockpaperscissors.py:25:9:25:9 | rock | -| rockpaperscissors.py:25:9:25:9 | rock | rockpaperscissors.py:25:9:25:16 | scissors | -| rockpaperscissors.py:25:9:25:16 | scissors | rockpaperscissors.py:25:9:25:23 | paper | -| rockpaperscissors.py:25:9:25:23 | paper | rockpaperscissors.py:26:14:26:14 | paper | -| sanitizer.py:9:9:9:20 | SQL injection | sanitizer.py:13:19:13:19 | SQL injection | -| sanitizer.py:16:9:16:20 | Command injection | sanitizer.py:20:20:20:20 | Command injection | -| sanitizer.py:24:9:24:20 | SQL injection | sanitizer.py:26:19:26:19 | SQL injection | -| sanitizer.py:24:9:24:20 | SQL injection | sanitizer.py:28:19:28:19 | SQL injection | -| sanitizer.py:31:9:31:20 | Command injection | sanitizer.py:33:20:33:20 | Command injection | -| sanitizer.py:31:9:31:20 | Command injection | sanitizer.py:35:20:35:20 | Command injection | -| test.py:6:9:6:14 | simple.test | test.py:7:10:7:10 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:16:9:16:16 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:24:9:24:16 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:44:12:44:22 | simple.test | -| test.py:12:10:12:12 | simple.test | test.py:13:10:13:12 | simple.test | -| test.py:16:9:16:16 | simple.test | test.py:17:10:17:10 | simple.test | -| test.py:20:9:20:14 | simple.test | test.py:21:10:21:10 | simple.test | -| test.py:21:10:21:10 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:24:9:24:16 | simple.test | test.py:25:10:25:10 | simple.test | -| test.py:25:10:25:10 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:37:13:37:18 | simple.test | test.py:41:14:41:14 | simple.test | -| test.py:44:12:44:22 | simple.test | test.py:54:9:54:17 | simple.test | -| test.py:46:11:46:13 | simple.test | test.py:47:10:47:12 | simple.test | -| test.py:47:10:47:12 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:49:17:49:19 | simple.test | test.py:51:14:51:16 | simple.test | -| test.py:51:14:51:16 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:54:9:54:17 | simple.test | test.py:55:11:55:11 | simple.test | -| test.py:55:11:55:11 | simple.test | test.py:46:11:46:13 | simple.test | -| test.py:62:13:62:18 | simple.test | test.py:63:17:63:17 | simple.test | -| test.py:63:17:63:17 | simple.test | test.py:49:17:49:19 | simple.test | -| test.py:67:13:67:18 | simple.test | test.py:70:17:70:17 | simple.test | -| test.py:70:17:70:17 | simple.test | test.py:49:17:49:19 | simple.test | -| test.py:76:9:76:14 | simple.test | test.py:77:13:77:13 | simple.test | -| test.py:77:9:77:14 | simple.test | test.py:78:10:78:10 | simple.test | -| test.py:77:13:77:13 | simple.test | test.py:77:9:77:14 | simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:88:9:88:14 | .dangerous = simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:110:11:110:16 | .dangerous = simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:115:11:115:16 | .dangerous = simple.test | -| test.py:88:9:88:14 | .dangerous = simple.test | test.py:88:9:88:24 | simple.test | -| test.py:88:9:88:24 | simple.test | test.py:89:10:89:10 | simple.test | -| test.py:100:9:100:31 | simple.test | test.py:101:10:101:10 | simple.test | -| test.py:105:12:105:14 | .x = simple.test | test.py:106:10:106:12 | .x = simple.test | -| test.py:106:10:106:12 | .x = simple.test | test.py:106:10:106:14 | simple.test | -| test.py:110:11:110:16 | .dangerous = simple.test | test.py:110:11:110:26 | simple.test | -| test.py:110:11:110:26 | simple.test | test.py:111:10:111:10 | .x = simple.test | -| test.py:111:10:111:10 | .x = simple.test | test.py:111:10:111:12 | simple.test | -| test.py:115:11:115:16 | .dangerous = simple.test | test.py:115:11:115:26 | simple.test | -| test.py:115:11:115:26 | simple.test | test.py:116:13:116:13 | .x = simple.test | -| test.py:116:9:116:14 | .x = simple.test | test.py:117:12:117:12 | .x = simple.test | -| test.py:116:13:116:13 | .x = simple.test | test.py:116:9:116:14 | .x = simple.test | -| test.py:117:12:117:12 | .x = simple.test | test.py:105:12:105:14 | .x = simple.test | -| test.py:126:13:126:25 | simple.test | test.py:130:21:130:21 | simple.test | -| test.py:128:13:128:18 | simple.test | test.py:132:14:132:14 | simple.test | -| test.py:155:20:155:38 | simple.test | test.py:156:6:156:11 | simple.test | -| test.py:159:10:159:15 | simple.test | test.py:160:14:160:14 | simple.test | -| test.py:163:9:163:14 | simple.test | test.py:165:10:165:10 | simple.test | -| test.py:178:9:178:14 | simple.test | test.py:180:14:180:14 | simple.test | -| test.py:178:9:178:14 | simple.test | test.py:186:14:186:14 | simple.test | -| test.py:195:9:195:14 | simple.test | test.py:197:14:197:14 | simple.test | -| test.py:195:9:195:14 | simple.test | test.py:199:14:199:14 | simple.test | -| test.py:208:11:208:18 | sequence of simple.test | test.py:209:14:209:16 | sequence of simple.test | -| test.py:208:12:208:17 | simple.test | test.py:208:11:208:18 | sequence of simple.test | -| test.py:209:5:209:17 | simple.test | test.py:210:15:210:15 | simple.test | -| test.py:209:14:209:16 | sequence of simple.test | test.py:209:5:209:17 | simple.test | -| test.py:210:15:210:15 | simple.test | test.py:213:14:213:32 | iterable.simple | -| test.py:210:15:210:15 | simple.test | test.py:213:14:213:32 | sequence of simple.test | -| test.py:213:5:213:33 | simple.test | test.py:214:14:214:14 | simple.test | -| test.py:213:14:213:32 | iterable.simple | test.py:213:5:213:33 | simple.test | -| test.py:213:14:213:32 | sequence of simple.test | test.py:213:5:213:33 | simple.test | -#select | rockpaperscissors.py:13:10:13:17 | SCISSORS | rockpaperscissors.py:13:10:13:17 | scissors | rockpaperscissors.py:13:10:13:17 | scissors | $@ loses to $@. | rockpaperscissors.py:13:10:13:17 | SCISSORS | scissors | rockpaperscissors.py:13:10:13:17 | SCISSORS | scissors | | rockpaperscissors.py:16:11:16:14 | ROCK | rockpaperscissors.py:16:11:16:14 | rock | rockpaperscissors.py:16:11:16:14 | rock | $@ loses to $@. | rockpaperscissors.py:16:11:16:14 | ROCK | rock | rockpaperscissors.py:16:11:16:14 | ROCK | rock | | rockpaperscissors.py:26:14:26:14 | y | rockpaperscissors.py:24:9:24:12 | rock | rockpaperscissors.py:26:14:26:14 | paper | $@ loses to $@. | rockpaperscissors.py:24:9:24:12 | ROCK | rock | rockpaperscissors.py:26:14:26:14 | y | paper | diff --git a/python/ql/test/library-tests/taint/config/RockPaperScissors.ql b/python/ql/test/library-tests/taint/config/RockPaperScissors.ql index 8d6170351f1..9fc258159ae 100644 --- a/python/ql/test/library-tests/taint/config/RockPaperScissors.ql +++ b/python/ql/test/library-tests/taint/config/RockPaperScissors.ql @@ -5,7 +5,6 @@ import python import semmle.python.dataflow.TaintTracking import TaintLib -import semmle.python.security.Paths from RockPaperScissorConfig config, TaintedPathSource src, TaintedPathSink sink where config.hasFlowPath(src, sink) diff --git a/python/ql/test/library-tests/taint/config/Simple.expected b/python/ql/test/library-tests/taint/config/Simple.expected index 108f0f12015..78a86d7a0c8 100644 --- a/python/ql/test/library-tests/taint/config/Simple.expected +++ b/python/ql/test/library-tests/taint/config/Simple.expected @@ -1,99 +1,3 @@ -edges -| carrier.py:17:9:17:31 | .attr = simple.test | carrier.py:18:10:18:10 | .attr = simple.test | -| carrier.py:17:25:17:30 | simple.test | carrier.py:17:9:17:31 | .attr = simple.test | -| carrier.py:18:10:18:10 | .attr = simple.test | carrier.py:18:10:18:15 | simple.test | -| carrier.py:21:9:21:28 | explicit.carrier | carrier.py:22:10:22:10 | explicit.carrier | -| carrier.py:22:10:22:10 | explicit.carrier | carrier.py:22:10:22:22 | simple.test | -| carrier.py:25:9:25:36 | .attr = simple.test | carrier.py:26:10:26:10 | .attr = simple.test | -| carrier.py:25:13:25:35 | .attr = simple.test | carrier.py:25:9:25:36 | .attr = simple.test | -| carrier.py:25:29:25:34 | simple.test | carrier.py:25:13:25:35 | .attr = simple.test | -| carrier.py:26:10:26:10 | .attr = simple.test | carrier.py:26:10:26:21 | simple.test | -| carrier.py:29:9:29:33 | explicit.carrier | carrier.py:30:10:30:10 | explicit.carrier | -| carrier.py:29:13:29:32 | explicit.carrier | carrier.py:29:9:29:33 | explicit.carrier | -| carrier.py:30:10:30:10 | explicit.carrier | carrier.py:30:10:30:22 | simple.test | -| carrier.py:33:9:33:45 | .attr = explicit.carrier | carrier.py:34:9:34:9 | .attr = explicit.carrier | -| carrier.py:33:25:33:44 | explicit.carrier | carrier.py:33:9:33:45 | .attr = explicit.carrier | -| carrier.py:34:9:34:9 | .attr = explicit.carrier | carrier.py:34:9:34:14 | explicit.carrier | -| carrier.py:34:9:34:14 | explicit.carrier | carrier.py:35:10:35:10 | explicit.carrier | -| carrier.py:35:10:35:10 | explicit.carrier | carrier.py:35:10:35:22 | simple.test | -| deep.py:20:5:20:14 | simple.test | deep.py:22:6:22:6 | simple.test | -| deep.py:20:8:20:13 | simple.test | deep.py:20:5:20:14 | simple.test | -| module.py:3:13:3:18 | simple.test | test.py:85:8:85:13 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:88:9:88:14 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:110:11:110:16 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:115:11:115:16 | .dangerous = simple.test | -| module.py:3:13:3:18 | simple.test | test.py:155:20:155:38 | simple.test | -| module.py:7:12:7:17 | simple.test | test.py:100:9:100:31 | simple.test | -| rockpaperscissors.py:24:9:24:12 | rock | rockpaperscissors.py:25:9:25:9 | rock | -| rockpaperscissors.py:25:9:25:9 | rock | rockpaperscissors.py:25:9:25:16 | scissors | -| rockpaperscissors.py:25:9:25:16 | scissors | rockpaperscissors.py:25:9:25:23 | paper | -| rockpaperscissors.py:25:9:25:23 | paper | rockpaperscissors.py:26:14:26:14 | paper | -| sanitizer.py:9:9:9:20 | SQL injection | sanitizer.py:13:19:13:19 | SQL injection | -| sanitizer.py:16:9:16:20 | Command injection | sanitizer.py:20:20:20:20 | Command injection | -| sanitizer.py:24:9:24:20 | SQL injection | sanitizer.py:26:19:26:19 | SQL injection | -| sanitizer.py:24:9:24:20 | SQL injection | sanitizer.py:28:19:28:19 | SQL injection | -| sanitizer.py:31:9:31:20 | Command injection | sanitizer.py:33:20:33:20 | Command injection | -| sanitizer.py:31:9:31:20 | Command injection | sanitizer.py:35:20:35:20 | Command injection | -| test.py:6:9:6:14 | simple.test | test.py:7:10:7:10 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:16:9:16:16 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:24:9:24:16 | simple.test | -| test.py:10:12:10:17 | simple.test | test.py:44:12:44:22 | simple.test | -| test.py:12:10:12:12 | simple.test | test.py:13:10:13:12 | simple.test | -| test.py:16:9:16:16 | simple.test | test.py:17:10:17:10 | simple.test | -| test.py:20:9:20:14 | simple.test | test.py:21:10:21:10 | simple.test | -| test.py:21:10:21:10 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:24:9:24:16 | simple.test | test.py:25:10:25:10 | simple.test | -| test.py:25:10:25:10 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:37:13:37:18 | simple.test | test.py:41:14:41:14 | simple.test | -| test.py:44:12:44:22 | simple.test | test.py:54:9:54:17 | simple.test | -| test.py:46:11:46:13 | simple.test | test.py:47:10:47:12 | simple.test | -| test.py:47:10:47:12 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:49:17:49:19 | simple.test | test.py:51:14:51:16 | simple.test | -| test.py:51:14:51:16 | simple.test | test.py:12:10:12:12 | simple.test | -| test.py:54:9:54:17 | simple.test | test.py:55:11:55:11 | simple.test | -| test.py:55:11:55:11 | simple.test | test.py:46:11:46:13 | simple.test | -| test.py:62:13:62:18 | simple.test | test.py:63:17:63:17 | simple.test | -| test.py:63:17:63:17 | simple.test | test.py:49:17:49:19 | simple.test | -| test.py:67:13:67:18 | simple.test | test.py:70:17:70:17 | simple.test | -| test.py:70:17:70:17 | simple.test | test.py:49:17:49:19 | simple.test | -| test.py:76:9:76:14 | simple.test | test.py:77:13:77:13 | simple.test | -| test.py:77:9:77:14 | simple.test | test.py:78:10:78:10 | simple.test | -| test.py:77:13:77:13 | simple.test | test.py:77:9:77:14 | simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:88:9:88:14 | .dangerous = simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:110:11:110:16 | .dangerous = simple.test | -| test.py:85:8:85:13 | .dangerous = simple.test | test.py:115:11:115:16 | .dangerous = simple.test | -| test.py:88:9:88:14 | .dangerous = simple.test | test.py:88:9:88:24 | simple.test | -| test.py:88:9:88:24 | simple.test | test.py:89:10:89:10 | simple.test | -| test.py:100:9:100:31 | simple.test | test.py:101:10:101:10 | simple.test | -| test.py:105:12:105:14 | .x = simple.test | test.py:106:10:106:12 | .x = simple.test | -| test.py:106:10:106:12 | .x = simple.test | test.py:106:10:106:14 | simple.test | -| test.py:110:11:110:16 | .dangerous = simple.test | test.py:110:11:110:26 | simple.test | -| test.py:110:11:110:26 | simple.test | test.py:111:10:111:10 | .x = simple.test | -| test.py:111:10:111:10 | .x = simple.test | test.py:111:10:111:12 | simple.test | -| test.py:115:11:115:16 | .dangerous = simple.test | test.py:115:11:115:26 | simple.test | -| test.py:115:11:115:26 | simple.test | test.py:116:13:116:13 | .x = simple.test | -| test.py:116:9:116:14 | .x = simple.test | test.py:117:12:117:12 | .x = simple.test | -| test.py:116:13:116:13 | .x = simple.test | test.py:116:9:116:14 | .x = simple.test | -| test.py:117:12:117:12 | .x = simple.test | test.py:105:12:105:14 | .x = simple.test | -| test.py:126:13:126:25 | simple.test | test.py:130:21:130:21 | simple.test | -| test.py:128:13:128:18 | simple.test | test.py:132:14:132:14 | simple.test | -| test.py:155:20:155:38 | simple.test | test.py:156:6:156:11 | simple.test | -| test.py:159:10:159:15 | simple.test | test.py:160:14:160:14 | simple.test | -| test.py:163:9:163:14 | simple.test | test.py:165:10:165:10 | simple.test | -| test.py:178:9:178:14 | simple.test | test.py:180:14:180:14 | simple.test | -| test.py:178:9:178:14 | simple.test | test.py:186:14:186:14 | simple.test | -| test.py:195:9:195:14 | simple.test | test.py:197:14:197:14 | simple.test | -| test.py:195:9:195:14 | simple.test | test.py:199:14:199:14 | simple.test | -| test.py:208:11:208:18 | sequence of simple.test | test.py:209:14:209:16 | sequence of simple.test | -| test.py:208:12:208:17 | simple.test | test.py:208:11:208:18 | sequence of simple.test | -| test.py:209:5:209:17 | simple.test | test.py:210:15:210:15 | simple.test | -| test.py:209:14:209:16 | sequence of simple.test | test.py:209:5:209:17 | simple.test | -| test.py:210:15:210:15 | simple.test | test.py:213:14:213:32 | iterable.simple | -| test.py:210:15:210:15 | simple.test | test.py:213:14:213:32 | sequence of simple.test | -| test.py:213:5:213:33 | simple.test | test.py:214:14:214:14 | simple.test | -| test.py:213:14:213:32 | iterable.simple | test.py:213:5:213:33 | simple.test | -| test.py:213:14:213:32 | sequence of simple.test | test.py:213:5:213:33 | simple.test | -#select | carrier.py:18:10:18:15 | Attribute | carrier.py:17:25:17:30 | simple.test | carrier.py:18:10:18:15 | simple.test | $@ flows to $@. | carrier.py:17:25:17:30 | SOURCE | simple.test | carrier.py:18:10:18:15 | Attribute | simple.test | | carrier.py:26:10:26:21 | Attribute() | carrier.py:25:29:25:34 | simple.test | carrier.py:26:10:26:21 | simple.test | $@ flows to $@. | carrier.py:25:29:25:34 | SOURCE | simple.test | carrier.py:26:10:26:21 | Attribute() | simple.test | | deep.py:22:6:22:6 | x | deep.py:20:8:20:13 | simple.test | deep.py:22:6:22:6 | simple.test | $@ flows to $@. | deep.py:20:8:20:13 | SOURCE | simple.test | deep.py:22:6:22:6 | x | simple.test | diff --git a/python/ql/test/library-tests/taint/config/Simple.ql b/python/ql/test/library-tests/taint/config/Simple.ql index 9a87a67c9f1..7617ec0a434 100644 --- a/python/ql/test/library-tests/taint/config/Simple.ql +++ b/python/ql/test/library-tests/taint/config/Simple.ql @@ -5,7 +5,6 @@ import python import semmle.python.dataflow.TaintTracking import TaintLib -import semmle.python.security.Paths from SimpleConfig config, TaintedPathSource src, TaintedPathSink sink where config.hasFlowPath(src, sink) diff --git a/python/ql/test/library-tests/taint/example/ExampleConfig.expected b/python/ql/test/library-tests/taint/example/ExampleConfig.expected index 5127ff1e794..ed1bd0fe0ec 100644 --- a/python/ql/test/library-tests/taint/example/ExampleConfig.expected +++ b/python/ql/test/library-tests/taint/example/ExampleConfig.expected @@ -1,29 +1,3 @@ -edges -| example.py:17:14:17:21 | Dilbert | example.py:18:13:18:18 | Dilbert | -| example.py:17:14:17:21 | Wally | example.py:18:13:18:18 | Wally | -| example.py:22:14:22:21 | Dilbert | example.py:23:20:23:25 | Dilbert | -| example.py:23:14:23:26 | Dilbert | example.py:24:13:24:18 | Dilbert | -| example.py:23:20:23:25 | Dilbert | example.py:23:14:23:26 | Dilbert | -| example.py:28:14:28:21 | Dilbert | example.py:29:13:29:18 | Dilbert | -| example.py:28:14:28:21 | Wally | example.py:29:13:29:18 | Wally | -| example.py:33:14:33:21 | Dilbert | example.py:34:24:34:29 | Dilbert | -| example.py:34:12:34:30 | .worker = Dilbert | example.py:37:20:37:23 | .worker = Dilbert | -| example.py:34:24:34:29 | Dilbert | example.py:34:12:34:30 | .worker = Dilbert | -| example.py:37:14:37:31 | Dilbert | example.py:39:13:39:18 | Dilbert | -| example.py:37:20:37:23 | .worker = Dilbert | example.py:37:20:37:30 | Dilbert | -| example.py:37:20:37:30 | Dilbert | example.py:37:14:37:31 | Dilbert | -| example.py:57:14:57:21 | Dilbert | example.py:58:22:58:27 | Dilbert | -| example.py:57:14:57:21 | Wally | example.py:58:22:58:27 | Wally | -| example.py:58:14:58:28 | Dilbert | example.py:60:13:60:18 | Dilbert | -| example.py:58:14:58:28 | Wally | example.py:60:13:60:18 | Wally | -| example.py:58:22:58:27 | Dilbert | example.py:58:14:58:28 | Dilbert | -| example.py:58:22:58:27 | Wally | example.py:58:14:58:28 | Wally | -| example.py:64:14:64:21 | Dilbert | example.py:65:20:65:25 | Dilbert | -| example.py:65:14:65:26 | Dilbert | example.py:66:22:66:27 | Dilbert | -| example.py:65:20:65:25 | Dilbert | example.py:65:14:65:26 | Dilbert | -| example.py:66:14:66:28 | Dilbert | example.py:68:13:68:18 | Dilbert | -| example.py:66:22:66:27 | Dilbert | example.py:66:14:66:28 | Dilbert | -#select | example.py:18:13:18:18 | worker | example.py:17:14:17:21 | Dilbert | example.py:18:13:18:18 | Dilbert | $@ goes to a $@. | example.py:17:14:17:21 | ENGINEER | Dilbert | example.py:18:13:18:18 | worker | meeting | | example.py:18:13:18:18 | worker | example.py:17:14:17:21 | Wally | example.py:18:13:18:18 | Wally | $@ goes to a $@. | example.py:17:14:17:21 | ENGINEER | Wally | example.py:18:13:18:18 | worker | meeting | | example.py:24:13:24:18 | worker | example.py:22:14:22:21 | Dilbert | example.py:24:13:24:18 | Dilbert | $@ goes to a $@. | example.py:22:14:22:21 | ENGINEER | Dilbert | example.py:24:13:24:18 | worker | meeting | diff --git a/python/ql/test/library-tests/taint/example/ExampleConfig.ql b/python/ql/test/library-tests/taint/example/ExampleConfig.ql index e406fc73e21..ea1dd879a95 100644 --- a/python/ql/test/library-tests/taint/example/ExampleConfig.ql +++ b/python/ql/test/library-tests/taint/example/ExampleConfig.ql @@ -7,7 +7,6 @@ import python import DilbertConfig -import semmle.python.security.Paths from DilbertConfig config, TaintedPathSource src, TaintedPathSink sink where config.hasFlowPath(src, sink) diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestNode.expected b/python/ql/test/library-tests/taint/exception_traceback/TestNode.expected deleted file mode 100644 index b0b2a23b14b..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestNode.expected +++ /dev/null @@ -1,27 +0,0 @@ -| test.py:10:11:10:47 | test.py:10 | MyException() | exception.kind | -| test.py:15:25:15:25 | test.py:15 | e | exception.kind | -| test.py:16:13:16:34 | test.py:16 | Attribute() | exception.info | -| test.py:17:15:17:15 | test.py:17 | s | exception.info | -| test.py:19:13:19:36 | test.py:19 | Attribute() | [exception.info] | -| test.py:20:13:20:37 | test.py:20 | Attribute() | [exception.info] | -| test.py:21:13:21:36 | test.py:21 | Attribute() | [exception.info] | -| test.py:21:35:21:35 | test.py:21 | t | [exception.info] | -| test.py:22:13:22:58 | test.py:22 | Attribute() | [exception.info] | -| test.py:23:13:23:57 | test.py:23 | Attribute() | [exception.info] | -| test.py:24:13:24:35 | test.py:24 | Attribute() | [exception.info] | -| test.py:25:13:25:36 | test.py:25 | Attribute() | [exception.info] | -| test.py:26:25:26:25 | test.py:26 | e | exception.kind | -| test.py:26:25:26:33 | test.py:26 | Attribute | exception.info | -| test.py:26:25:26:41 | test.py:26 | Tuple | [[exception.info]] | -| test.py:26:25:26:41 | test.py:26 | Tuple | [exception.info] | -| test.py:26:36:26:36 | test.py:26 | e | exception.kind | -| test.py:26:36:26:41 | test.py:26 | Attribute | [exception.info] | -| test.py:27:19:27:19 | test.py:27 | t | [exception.info] | -| test.py:27:22:27:22 | test.py:27 | u | [exception.info] | -| test.py:27:25:27:25 | test.py:27 | v | [exception.info] | -| test.py:27:28:27:28 | test.py:27 | w | [exception.info] | -| test.py:27:31:27:31 | test.py:27 | x | [exception.info] | -| test.py:27:34:27:34 | test.py:27 | y | [exception.info] | -| test.py:27:37:27:37 | test.py:27 | z | [exception.info] | -| test.py:27:40:27:46 | test.py:27 | message | exception.info | -| test.py:27:49:27:52 | test.py:27 | args | [exception.info] | diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestNode.ql b/python/ql/test/library-tests/taint/exception_traceback/TestNode.ql deleted file mode 100644 index f3c7e98de94..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestNode.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.security.Exceptions -import semmle.python.web.HttpResponse - -from TaintedNode node -where not node.getLocation().getFile().inStdlib() -select node.getLocation(), node.getNode().asAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestSource.expected b/python/ql/test/library-tests/taint/exception_traceback/TestSource.expected deleted file mode 100644 index e8b2074bc28..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestSource.expected +++ /dev/null @@ -1,10 +0,0 @@ -| test.py:10 | MyException() | exception.kind | -| test.py:15 | e | exception.kind | -| test.py:16 | Attribute() | exception.info | -| test.py:19 | Attribute() | [exception.info] | -| test.py:20 | Attribute() | [exception.info] | -| test.py:21 | Attribute() | [exception.info] | -| test.py:22 | Attribute() | [exception.info] | -| test.py:23 | Attribute() | [exception.info] | -| test.py:24 | Attribute() | [exception.info] | -| test.py:25 | Attribute() | [exception.info] | diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestSource.ql b/python/ql/test/library-tests/taint/exception_traceback/TestSource.ql deleted file mode 100644 index d892afe9999..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestSource.ql +++ /dev/null @@ -1,9 +0,0 @@ -import python -import semmle.python.security.Exceptions -import semmle.python.web.HttpResponse - -from TaintSource src, TaintKind kind -where - src.isSourceOf(kind) and - not src.getLocation().getFile().inStdlib() -select src.getLocation().toString(), src.(ControlFlowNode).getNode().toString(), kind diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestStep.expected b/python/ql/test/library-tests/taint/exception_traceback/TestStep.expected deleted file mode 100644 index 196c1e92c2c..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestStep.expected +++ /dev/null @@ -1,16 +0,0 @@ -| Taint [exception.info] | test.py:19 | Attribute() | | --> | Taint [exception.info] | test.py:21 | t | | -| Taint [exception.info] | test.py:19 | Attribute() | | --> | Taint [exception.info] | test.py:27 | t | | -| Taint [exception.info] | test.py:20 | Attribute() | | --> | Taint [exception.info] | test.py:27 | u | | -| Taint [exception.info] | test.py:21 | Attribute() | | --> | Taint [exception.info] | test.py:27 | v | | -| Taint [exception.info] | test.py:22 | Attribute() | | --> | Taint [exception.info] | test.py:27 | w | | -| Taint [exception.info] | test.py:23 | Attribute() | | --> | Taint [exception.info] | test.py:27 | x | | -| Taint [exception.info] | test.py:24 | Attribute() | | --> | Taint [exception.info] | test.py:27 | y | | -| Taint [exception.info] | test.py:25 | Attribute() | | --> | Taint [exception.info] | test.py:27 | z | | -| Taint [exception.info] | test.py:26 | Attribute | | --> | Taint [[exception.info]] | test.py:26 | Tuple | | -| Taint [exception.info] | test.py:26 | Attribute | | --> | Taint [exception.info] | test.py:27 | args | | -| Taint exception.info | test.py:16 | Attribute() | | --> | Taint exception.info | test.py:17 | s | | -| Taint exception.info | test.py:26 | Attribute | | --> | Taint [exception.info] | test.py:26 | Tuple | | -| Taint exception.info | test.py:26 | Attribute | | --> | Taint exception.info | test.py:27 | message | | -| Taint exception.kind | test.py:15 | e | | --> | Taint exception.kind | test.py:26 | e | | -| Taint exception.kind | test.py:26 | e | | --> | Taint [exception.info] | test.py:26 | Attribute | | -| Taint exception.kind | test.py:26 | e | | --> | Taint exception.info | test.py:26 | Attribute | | diff --git a/python/ql/test/library-tests/taint/exception_traceback/TestStep.ql b/python/ql/test/library-tests/taint/exception_traceback/TestStep.ql deleted file mode 100644 index b1ab12d0f25..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/TestStep.ql +++ /dev/null @@ -1,12 +0,0 @@ -import python -import semmle.python.security.Exceptions -import semmle.python.web.HttpResponse - -from TaintedNode n, TaintedNode s -where - s = n.getASuccessor() and - not n.getLocation().getFile().inStdlib() and - not s.getLocation().getFile().inStdlib() -select "Taint " + n.getTaintKind(), n.getLocation().toString(), n.getNode().toString(), - n.getContext(), " --> ", "Taint " + s.getTaintKind(), s.getLocation().toString(), - s.getNode().toString(), s.getContext() diff --git a/python/ql/test/library-tests/taint/exception_traceback/test.py b/python/ql/test/library-tests/taint/exception_traceback/test.py deleted file mode 100644 index 20573aa8f8b..00000000000 --- a/python/ql/test/library-tests/taint/exception_traceback/test.py +++ /dev/null @@ -1,34 +0,0 @@ -from __future__ import print_function - -import traceback -import sys - -class MyException(Exception): - pass - -def raise_secret_exception(): - raise MyException("Message", "secret info") - -def foo(): - try: - raise_secret_exception() - except Exception as e: - s = traceback.format_exc() - print(s) - etype, evalue, tb = sys.exc_info() - t = traceback.extract_tb(tb) - u = traceback.extract_stack() - v = traceback.format_list(t) - w = traceback.format_exception_only(etype, evalue) - x = traceback.format_exception(etype, evalue, tb) - y = traceback.format_tb(tb) - z = traceback.format_stack() - message, args = e.message, e.args - print(tb, t, u, v, w, x, y, z, message, args) - - -foo() - - -#For test to find stdlib -import os diff --git a/python/ql/test/library-tests/taint/flowpath_regression/Config.qll b/python/ql/test/library-tests/taint/flowpath_regression/Config.qll deleted file mode 100644 index ae9d0e3c332..00000000000 --- a/python/ql/test/library-tests/taint/flowpath_regression/Config.qll +++ /dev/null @@ -1,45 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.security.strings.Untrusted - -class FooSource extends TaintSource { - FooSource() { this.(CallNode).getFunction().(NameNode).getId() = "foo_source" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof UntrustedStringKind } - - override string toString() { result = "FooSource" } -} - -class FooSink extends TaintSink { - FooSink() { - exists(CallNode call | - call.getFunction().(NameNode).getId() = "foo_sink" and - call.getAnArg() = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof UntrustedStringKind } - - override string toString() { result = "FooSink" } -} - -class FooConfig extends TaintTracking::Configuration { - FooConfig() { this = "FooConfig" } - - override predicate isSource(TaintTracking::Source source) { source instanceof FooSource } - - override predicate isSink(TaintTracking::Sink sink) { sink instanceof FooSink } -} - -class BarSink extends TaintSink { - BarSink() { - exists(CallNode call | - call.getFunction().(NameNode).getId() = "bar_sink" and - call.getAnArg() = this - ) - } - - override predicate sinks(TaintKind kind) { kind instanceof UntrustedStringKind } - - override string toString() { result = "BarSink" } -} diff --git a/python/ql/test/library-tests/taint/flowpath_regression/Path.expected b/python/ql/test/library-tests/taint/flowpath_regression/Path.expected deleted file mode 100644 index b03f12e8b9a..00000000000 --- a/python/ql/test/library-tests/taint/flowpath_regression/Path.expected +++ /dev/null @@ -1 +0,0 @@ -| test.py:16:9:16:20 | foo_source() | test.py:17:14:17:14 | x | diff --git a/python/ql/test/library-tests/taint/flowpath_regression/Path.ql b/python/ql/test/library-tests/taint/flowpath_regression/Path.ql deleted file mode 100644 index 43562780859..00000000000 --- a/python/ql/test/library-tests/taint/flowpath_regression/Path.ql +++ /dev/null @@ -1,6 +0,0 @@ -import python -import Config - -from FooConfig config, TaintedPathSource src, TaintedPathSink sink -where config.hasFlowPath(src, sink) -select src.getSource(), sink.getSink() diff --git a/python/ql/test/library-tests/taint/flowpath_regression/test.py b/python/ql/test/library-tests/taint/flowpath_regression/test.py deleted file mode 100644 index 7287649330b..00000000000 --- a/python/ql/test/library-tests/taint/flowpath_regression/test.py +++ /dev/null @@ -1,22 +0,0 @@ -def foo_source(): - return 'foo' - - -def foo_sink(x): - if x == 'foo': - print('fire the foo missiles') - - -def bar_sink(x): - if x == 'bar': - print('fire the bar missiles') - - -def should_report(): - x = foo_source() - foo_sink(x) - - -def should_not_report(): - x = foo_source() - bar_sink(x) diff --git a/python/ql/test/library-tests/taint/general/ParamSource.ql b/python/ql/test/library-tests/taint/general/ParamSource.ql index 7ac2b7699ef..9ebc909cc28 100644 --- a/python/ql/test/library-tests/taint/general/ParamSource.ql +++ b/python/ql/test/library-tests/taint/general/ParamSource.ql @@ -1,7 +1,5 @@ import python import semmle.python.dataflow.TaintTracking -/* Standard library sink */ -import semmle.python.security.injection.Command class TestKind extends TaintKind { TestKind() { this = "test" } diff --git a/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.expected b/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.expected deleted file mode 100644 index 0adf64dfd5d..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.expected +++ /dev/null @@ -1,7 +0,0 @@ -| UrlsplitUrlparseTempSanitizer | [externally controlled string] | test.py:21 | Pi(urlsplit_res_0) [true] | -| UrlsplitUrlparseTempSanitizer | [externally controlled string] | test.py:24 | Pi(urlsplit_res_3) [true] | -| UrlsplitUrlparseTempSanitizer | [externally controlled string] | test.py:27 | Pi(urlsplit_res_6) [true] | -| UrlsplitUrlparseTempSanitizer | [externally controlled string] | test.py:30 | Pi(urlsplit_res_9) [true] | -| string equality sanitizer | externally controlled string | test.py:21 | Pi(urlsplit_res_0) [true] | -| string equality sanitizer | externally controlled string | test.py:24 | Pi(urlsplit_res_3) [true] | -| string equality sanitizer | externally controlled string | test.py:27 | Pi(urlsplit_res_6) [true] | diff --git a/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.ql b/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.ql deleted file mode 100644 index d523f79a963..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/SanitizedEdges.ql +++ /dev/null @@ -1,6 +0,0 @@ -import python -import Taint - -from Sanitizer s, TaintKind taint, PyEdgeRefinement test -where s.sanitizingEdge(taint, test) -select s, taint, test.getTest().getLocation().toString(), test.getRepresentation() diff --git a/python/ql/test/library-tests/taint/namedtuple/Taint.qll b/python/ql/test/library-tests/taint/namedtuple/Taint.qll deleted file mode 100644 index 0dc3c71ec84..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/Taint.qll +++ /dev/null @@ -1,45 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.security.strings.Untrusted - -class SimpleSource extends TaintSource { - SimpleSource() { this.(NameNode).getId() = "TAINTED_STRING" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringKind } - - override string toString() { result = "taint source" } -} - -class ListSource extends TaintSource { - ListSource() { this.(NameNode).getId() = "TAINTED_LIST" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringSequenceKind } - - override string toString() { result = "list taint source" } -} - -class DictSource extends TaintSource { - DictSource() { this.(NameNode).getId() = "TAINTED_DICT" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringDictKind } - - override string toString() { result = "dict taint source" } -} - -class TestConfig extends TaintTracking::Configuration { - TestConfig() { this = "TestConfig" } - - override predicate isSanitizer(Sanitizer sanitizer) { - sanitizer instanceof UrlsplitUrlparseTempSanitizer - } - - override predicate isSource(TaintTracking::Source source) { - source instanceof SimpleSource - or - source instanceof ListSource - or - source instanceof DictSource - } - - override predicate isSink(TaintTracking::Sink sink) { none() } -} diff --git a/python/ql/test/library-tests/taint/namedtuple/TestTaint.expected b/python/ql/test/library-tests/taint/namedtuple/TestTaint.expected deleted file mode 100644 index 62b589299dd..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/TestTaint.expected +++ /dev/null @@ -1,15 +0,0 @@ -| test.py:13 | test_basic | a | externally controlled string | -| test.py:13 | test_basic | b | externally controlled string | -| test.py:13 | test_basic | c | externally controlled string | -| test.py:13 | test_basic | d | externally controlled string | -| test.py:13 | test_basic | urlsplit_res | [externally controlled string] | -| test.py:19 | test_sanitizer | Attribute | externally controlled string | -| test.py:22 | test_sanitizer | Attribute | NO TAINT | -| test.py:25 | test_sanitizer | Subscript | NO TAINT | -| test.py:28 | test_sanitizer | Attribute | NO TAINT | -| test.py:31 | test_sanitizer | Attribute | NO TAINT | -| test.py:34 | test_sanitizer | Attribute | externally controlled string | -| test.py:44 | test_namedtuple | a | NO TAINT | -| test.py:44 | test_namedtuple | b | NO TAINT | -| test.py:44 | test_namedtuple | c | NO TAINT | -| test.py:44 | test_namedtuple | d | NO TAINT | diff --git a/python/ql/test/library-tests/taint/namedtuple/TestTaint.ql b/python/ql/test/library-tests/taint/namedtuple/TestTaint.ql deleted file mode 100644 index 47883578516..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/TestTaint.ql +++ /dev/null @@ -1,19 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from Call call, Expr arg, string taint_string -where - call.getLocation().getFile().getShortName() = "test.py" and - call.getFunc().(Name).getId() = "test" and - arg = call.getAnArg() and - ( - not exists(TaintedNode tainted | tainted.getAstNode() = arg) and - taint_string = "NO TAINT" - or - exists(TaintedNode tainted | tainted.getAstNode() = arg | - taint_string = tainted.getTaintKind().toString() - ) - ) -select arg.getLocation().toString(), call.getScope().(Function).getName(), arg.toString(), - taint_string diff --git a/python/ql/test/library-tests/taint/namedtuple/test.py b/python/ql/test/library-tests/taint/namedtuple/test.py deleted file mode 100644 index ec6304f5073..00000000000 --- a/python/ql/test/library-tests/taint/namedtuple/test.py +++ /dev/null @@ -1,44 +0,0 @@ -from six.moves.urllib.parse import urlsplit - -# Currently we don't have support for namedtuples in general, but do have special support -# for `urlsplit` (and `urlparse`) - -def test_basic(): - tainted_string = TAINTED_STRING - urlsplit_res = urlsplit(tainted_string) - a = urlsplit_res.netloc # field access - b = urlsplit_res.hostname # property - c = urlsplit_res[3] # indexing - _, _, d, _, _ = urlsplit(tainted_string) # unpacking - test(a, b, c, d, urlsplit_res) - -def test_sanitizer(): - tainted_string = TAINTED_STRING - urlsplit_res = urlsplit(tainted_string) - - test(urlsplit_res.netloc) # should be tainted - - if urlsplit_res.netloc == "OK": - test(urlsplit_res.netloc) - - if urlsplit_res[2] == "OK": - test(urlsplit_res[0]) - - if urlsplit_res.netloc == "OK": - test(urlsplit_res.path) # FN - - if urlsplit_res.netloc in ["OK"]: - test(urlsplit_res.netloc) - - if urlsplit_res.netloc in ["OK", non_constant()]: - test(urlsplit_res.netloc) # should be tainted - -def test_namedtuple(): - tainted_string = TAINTED_STRING - Point = namedtuple('Point', ['x', 'y']) - p = Point('safe', tainted_string) - a = p.x - b = p.y - c = p[0] - d = p[1] - test(a, b, c, d) # TODO: FN, at least p.y and p[1] should be tainted diff --git a/python/ql/test/library-tests/taint/strings/Taint.qll b/python/ql/test/library-tests/taint/strings/Taint.qll deleted file mode 100644 index 3368a1c4f70..00000000000 --- a/python/ql/test/library-tests/taint/strings/Taint.qll +++ /dev/null @@ -1,44 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.security.strings.Untrusted -import semmle.python.security.Exceptions - -class SimpleSource extends TaintSource { - SimpleSource() { this.(NameNode).getId() = "TAINTED_STRING" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringKind } - - override string toString() { result = "taint source" } -} - -class ListSource extends TaintSource { - ListSource() { this.(NameNode).getId() = "TAINTED_LIST" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringSequenceKind } - - override string toString() { result = "list taint source" } -} - -class DictSource extends TaintSource { - DictSource() { this.(NameNode).getId() = "TAINTED_DICT" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringDictKind } - - override string toString() { result = "dict taint source" } -} - -class ExceptionInfoSource extends TaintSource { - ExceptionInfoSource() { this.(NameNode).getId() = "TAINTED_EXCEPTION_INFO" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExceptionInfo } - - override string toString() { result = "Exception info source" } -} - -class ExternalFileObjectSource extends TaintSource { - ExternalFileObjectSource() { this.(NameNode).getId() = "TAINTED_FILE" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalFileObject } - - override string toString() { result = "Tainted file source" } -} diff --git a/python/ql/test/library-tests/taint/strings/TestStep.expected b/python/ql/test/library-tests/taint/strings/TestStep.expected deleted file mode 100644 index 4dc6682ee81..00000000000 --- a/python/ql/test/library-tests/taint/strings/TestStep.expected +++ /dev/null @@ -1,162 +0,0 @@ -| Taint [[externally controlled string]] | test.py:74 | test.py:74:9:74:33 | parse_qsl() | | --> | Taint [[externally controlled string]] | test.py:75 | test.py:75:19:75:19 | d | | -| Taint [externally controlled string] | test.py:71 | test.py:71:9:71:32 | urlsplit() | | --> | Taint [externally controlled string] | test.py:75 | test.py:75:10:75:10 | a | | -| Taint [externally controlled string] | test.py:72 | test.py:72:9:72:32 | urlparse() | | --> | Taint [externally controlled string] | test.py:75 | test.py:75:13:75:13 | b | | -| Taint [externally controlled string] | test.py:104 | test.py:104:9:104:37 | Attribute() | | --> | Taint externally controlled string | test.py:104 | test.py:104:9:104:40 | Subscript | | -| Taint [externally controlled string] | test.py:108 | test.py:108:9:108:38 | Attribute() | | --> | Taint externally controlled string | test.py:108 | test.py:108:9:108:41 | Subscript | | -| Taint [externally controlled string] | test.py:110 | test.py:110:9:110:37 | Attribute() | | --> | Taint externally controlled string | test.py:110 | test.py:110:9:110:41 | Subscript | | -| Taint [externally controlled string] | test.py:113 | test.py:113:9:113:30 | Attribute() | | --> | Taint externally controlled string | test.py:113 | test.py:113:9:113:33 | Subscript | | -| Taint [externally controlled string] | test.py:115 | test.py:115:9:115:35 | Attribute() | | --> | Taint externally controlled string | test.py:115 | test.py:115:9:115:38 | Subscript | | -| Taint exception.info | test.py:45 | test.py:45:22:45:26 | taint | p1 = exception.info | --> | Taint exception.info | test.py:46 | test.py:46:17:46:21 | taint | p1 = exception.info | -| Taint exception.info | test.py:46 | test.py:46:17:46:21 | taint | p1 = exception.info | --> | Taint exception.info | test.py:46 | test.py:46:12:46:22 | func() | p1 = exception.info | -| Taint exception.info | test.py:46 | test.py:46:17:46:21 | taint | p1 = exception.info | --> | Taint exception.info | test.py:53 | test.py:53:19:53:21 | arg | p0 = exception.info | -| Taint exception.info | test.py:49 | test.py:49:12:49:33 | TAINTED_EXCEPTION_INFO | | --> | Taint exception.info | test.py:50 | test.py:50:37:50:40 | info | | -| Taint exception.info | test.py:50 | test.py:50:11:50:41 | cross_over() | | --> | Taint exception.info | test.py:51 | test.py:51:10:51:12 | res | | -| Taint exception.info | test.py:50 | test.py:50:37:50:40 | info | | --> | Taint exception.info | test.py:45 | test.py:45:22:45:26 | taint | p1 = exception.info | -| Taint exception.info | test.py:50 | test.py:50:37:50:40 | info | | --> | Taint exception.info | test.py:50 | test.py:50:11:50:41 | cross_over() | | -| Taint exception.info | test.py:53 | test.py:53:19:53:21 | arg | p0 = exception.info | --> | Taint exception.info | test.py:54 | test.py:54:12:54:14 | arg | p0 = exception.info | -| Taint externally controlled string | test.py:6 | test.py:6:22:6:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:7 | test.py:7:31:7:44 | tainted_string | | -| Taint externally controlled string | test.py:7 | test.py:7:31:7:44 | tainted_string | | --> | Taint json[externally controlled string] | test.py:7 | test.py:7:20:7:45 | Attribute() | | -| Taint externally controlled string | test.py:8 | test.py:8:9:8:25 | Subscript | | --> | Taint externally controlled string | test.py:9 | test.py:9:9:9:9 | a | | -| Taint externally controlled string | test.py:8 | test.py:8:9:8:25 | Subscript | | --> | Taint externally controlled string | test.py:11 | test.py:11:10:11:10 | a | | -| Taint externally controlled string | test.py:9 | test.py:9:9:9:18 | Attribute() | | --> | Taint externally controlled string | test.py:10 | test.py:10:9:10:9 | b | | -| Taint externally controlled string | test.py:9 | test.py:9:9:9:18 | Attribute() | | --> | Taint externally controlled string | test.py:11 | test.py:11:13:11:13 | b | | -| Taint externally controlled string | test.py:10 | test.py:10:9:10:14 | Subscript | | --> | Taint externally controlled string | test.py:11 | test.py:11:16:11:16 | c | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:15 | test.py:15:9:15:22 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:16 | test.py:16:9:16:22 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:17 | test.py:17:9:17:22 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:18 | test.py:18:9:18:22 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:19 | test.py:19:18:19:31 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:20 | test.py:20:14:20:27 | tainted_string | | -| Taint externally controlled string | test.py:14 | test.py:14:22:14:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:21 | test.py:21:9:21:22 | tainted_string | | -| Taint externally controlled string | test.py:15 | test.py:15:9:15:22 | tainted_string | | --> | Taint externally controlled string | test.py:15 | test.py:15:9:15:31 | Attribute() | | -| Taint externally controlled string | test.py:15 | test.py:15:9:15:31 | Attribute() | | --> | Taint externally controlled string | test.py:22 | test.py:22:10:22:10 | a | | -| Taint externally controlled string | test.py:16 | test.py:16:9:16:22 | tainted_string | | --> | Taint externally controlled string | test.py:16 | test.py:16:9:16:29 | Attribute() | | -| Taint externally controlled string | test.py:16 | test.py:16:9:16:29 | Attribute() | | --> | Taint externally controlled string | test.py:22 | test.py:22:13:22:13 | b | | -| Taint externally controlled string | test.py:17 | test.py:17:9:17:22 | tainted_string | | --> | Taint externally controlled string | test.py:17 | test.py:17:9:17:25 | Subscript | | -| Taint externally controlled string | test.py:17 | test.py:17:9:17:25 | Subscript | | --> | Taint externally controlled string | test.py:22 | test.py:22:16:22:16 | c | | -| Taint externally controlled string | test.py:18 | test.py:18:9:18:22 | tainted_string | | --> | Taint externally controlled string | test.py:18 | test.py:18:9:18:27 | Subscript | | -| Taint externally controlled string | test.py:18 | test.py:18:9:18:27 | Subscript | | --> | Taint externally controlled string | test.py:22 | test.py:22:19:22:19 | d | | -| Taint externally controlled string | test.py:19 | test.py:19:9:19:32 | reversed() | | --> | Taint externally controlled string | test.py:22 | test.py:22:22:22:22 | e | | -| Taint externally controlled string | test.py:19 | test.py:19:18:19:31 | tainted_string | | --> | Taint externally controlled string | test.py:19 | test.py:19:9:19:32 | reversed() | | -| Taint externally controlled string | test.py:20 | test.py:20:9:20:28 | copy() | | --> | Taint externally controlled string | test.py:22 | test.py:22:25:22:25 | f | | -| Taint externally controlled string | test.py:20 | test.py:20:14:20:27 | tainted_string | | --> | Taint externally controlled string | test.py:20 | test.py:20:9:20:28 | copy() | | -| Taint externally controlled string | test.py:21 | test.py:21:9:21:22 | tainted_string | | --> | Taint externally controlled string | test.py:21 | test.py:21:9:21:30 | Attribute() | | -| Taint externally controlled string | test.py:21 | test.py:21:9:21:30 | Attribute() | | --> | Taint externally controlled string | test.py:22 | test.py:22:28:22:28 | g | | -| Taint externally controlled string | test.py:25 | test.py:25:22:25:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:26 | test.py:26:8:26:21 | tainted_string | | -| Taint externally controlled string | test.py:25 | test.py:25:22:25:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:29 | test.py:29:14:29:27 | tainted_string | | -| Taint externally controlled string | test.py:32 | test.py:32:22:32:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:33 | test.py:33:8:33:21 | tainted_string | | -| Taint externally controlled string | test.py:32 | test.py:32:22:32:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:33 | test.py:33:34:33:47 | tainted_string | | -| Taint externally controlled string | test.py:32 | test.py:32:22:32:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:36 | test.py:36:14:36:27 | tainted_string | | -| Taint externally controlled string | test.py:39 | test.py:39:22:39:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:40 | test.py:40:13:40:26 | tainted_string | | -| Taint externally controlled string | test.py:39 | test.py:39:22:39:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:41 | test.py:41:15:41:28 | tainted_string | | -| Taint externally controlled string | test.py:39 | test.py:39:22:39:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:42 | test.py:42:15:42:28 | tainted_string | | -| Taint externally controlled string | test.py:40 | test.py:40:9:40:27 | str() | | --> | Taint externally controlled string | test.py:43 | test.py:43:10:43:10 | a | | -| Taint externally controlled string | test.py:40 | test.py:40:13:40:26 | tainted_string | | --> | Taint externally controlled string | test.py:40 | test.py:40:9:40:27 | str() | | -| Taint externally controlled string | test.py:41 | test.py:41:9:41:29 | bytes() | | --> | Taint externally controlled string | test.py:43 | test.py:43:13:43:13 | b | | -| Taint externally controlled string | test.py:41 | test.py:41:15:41:28 | tainted_string | | --> | Taint externally controlled string | test.py:41 | test.py:41:9:41:29 | bytes() | | -| Taint externally controlled string | test.py:42 | test.py:42:9:42:46 | bytes() | | --> | Taint externally controlled string | test.py:43 | test.py:43:16:43:16 | c | | -| Taint externally controlled string | test.py:42 | test.py:42:15:42:28 | tainted_string | | --> | Taint externally controlled string | test.py:42 | test.py:42:9:42:46 | bytes() | | -| Taint externally controlled string | test.py:45 | test.py:45:22:45:26 | taint | p1 = externally controlled string | --> | Taint externally controlled string | test.py:46 | test.py:46:17:46:21 | taint | p1 = externally controlled string | -| Taint externally controlled string | test.py:46 | test.py:46:17:46:21 | taint | p1 = externally controlled string | --> | Taint externally controlled string | test.py:46 | test.py:46:12:46:22 | func() | p1 = externally controlled string | -| Taint externally controlled string | test.py:46 | test.py:46:17:46:21 | taint | p1 = externally controlled string | --> | Taint externally controlled string | test.py:53 | test.py:53:19:53:21 | arg | p0 = externally controlled string | -| Taint externally controlled string | test.py:53 | test.py:53:19:53:21 | arg | p0 = externally controlled string | --> | Taint externally controlled string | test.py:54 | test.py:54:12:54:14 | arg | p0 = externally controlled string | -| Taint externally controlled string | test.py:57 | test.py:57:11:57:24 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:58 | test.py:58:38:58:40 | ext | | -| Taint externally controlled string | test.py:58 | test.py:58:11:58:41 | cross_over() | | --> | Taint externally controlled string | test.py:59 | test.py:59:10:59:12 | res | | -| Taint externally controlled string | test.py:58 | test.py:58:38:58:40 | ext | | --> | Taint externally controlled string | test.py:45 | test.py:45:22:45:26 | taint | p1 = externally controlled string | -| Taint externally controlled string | test.py:58 | test.py:58:38:58:40 | ext | | --> | Taint externally controlled string | test.py:58 | test.py:58:11:58:41 | cross_over() | | -| Taint externally controlled string | test.py:70 | test.py:70:22:70:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:71 | test.py:71:18:71:31 | tainted_string | | -| Taint externally controlled string | test.py:70 | test.py:70:22:70:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:72 | test.py:72:18:72:31 | tainted_string | | -| Taint externally controlled string | test.py:70 | test.py:70:22:70:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:73 | test.py:73:18:73:31 | tainted_string | | -| Taint externally controlled string | test.py:70 | test.py:70:22:70:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:74 | test.py:74:19:74:32 | tainted_string | | -| Taint externally controlled string | test.py:71 | test.py:71:18:71:31 | tainted_string | | --> | Taint [externally controlled string] | test.py:71 | test.py:71:9:71:32 | urlsplit() | | -| Taint externally controlled string | test.py:72 | test.py:72:18:72:31 | tainted_string | | --> | Taint [externally controlled string] | test.py:72 | test.py:72:9:72:32 | urlparse() | | -| Taint externally controlled string | test.py:73 | test.py:73:18:73:31 | tainted_string | | --> | Taint {externally controlled string} | test.py:73 | test.py:73:9:73:32 | parse_qs() | | -| Taint externally controlled string | test.py:74 | test.py:74:19:74:32 | tainted_string | | --> | Taint [[externally controlled string]] | test.py:74 | test.py:74:9:74:33 | parse_qsl() | | -| Taint externally controlled string | test.py:78 | test.py:78:22:78:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:80 | test.py:80:9:80:22 | tainted_string | | -| Taint externally controlled string | test.py:78 | test.py:78:22:78:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:82 | test.py:82:12:82:25 | tainted_string | | -| Taint externally controlled string | test.py:80 | test.py:80:9:80:22 | tainted_string | | --> | Taint externally controlled string | test.py:80 | test.py:80:9:80:30 | Attribute() | | -| Taint externally controlled string | test.py:80 | test.py:80:9:80:30 | Attribute() | | --> | Taint externally controlled string | test.py:85 | test.py:85:10:85:10 | a | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:91 | test.py:91:9:91:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:92 | test.py:92:9:92:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:93 | test.py:93:9:93:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:94 | test.py:94:9:94:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:95 | test.py:95:9:95:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:96 | test.py:96:9:96:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:97 | test.py:97:9:97:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:98 | test.py:98:9:98:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:99 | test.py:99:9:99:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:100 | test.py:100:9:100:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:101 | test.py:101:9:101:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:102 | test.py:102:9:102:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:103 | test.py:103:9:103:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:104 | test.py:104:9:104:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:105 | test.py:105:9:105:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:106 | test.py:106:9:106:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:107 | test.py:107:9:107:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:108 | test.py:108:9:108:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:109 | test.py:109:9:109:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:110 | test.py:110:9:110:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:111 | test.py:111:9:111:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:112 | test.py:112:9:112:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:113 | test.py:113:9:113:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:114 | test.py:114:9:114:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:115 | test.py:115:9:115:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:116 | test.py:116:9:116:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:117 | test.py:117:9:117:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:118 | test.py:118:9:118:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:121 | test.py:121:9:121:22 | tainted_string | | -| Taint externally controlled string | test.py:88 | test.py:88:22:88:35 | TAINTED_STRING | | --> | Taint externally controlled string | test.py:122 | test.py:122:9:122:22 | tainted_string | | -| Taint externally controlled string | test.py:91 | test.py:91:9:91:22 | tainted_string | | --> | Taint externally controlled string | test.py:91 | test.py:91:9:91:35 | Attribute() | | -| Taint externally controlled string | test.py:92 | test.py:92:9:92:22 | tainted_string | | --> | Taint externally controlled string | test.py:92 | test.py:92:9:92:33 | Attribute() | | -| Taint externally controlled string | test.py:93 | test.py:93:9:93:22 | tainted_string | | --> | Taint externally controlled string | test.py:93 | test.py:93:9:93:31 | Attribute() | | -| Taint externally controlled string | test.py:94 | test.py:94:9:94:22 | tainted_string | | --> | Taint externally controlled string | test.py:94 | test.py:94:9:94:38 | Attribute() | | -| Taint externally controlled string | test.py:95 | test.py:95:9:95:22 | tainted_string | | --> | Taint externally controlled string | test.py:95 | test.py:95:9:95:38 | Attribute() | | -| Taint externally controlled string | test.py:95 | test.py:95:9:95:38 | Attribute() | | --> | Taint externally controlled string | test.py:95 | test.py:95:9:95:54 | Attribute() | | -| Taint externally controlled string | test.py:96 | test.py:96:9:96:22 | tainted_string | | --> | Taint externally controlled string | test.py:96 | test.py:96:9:96:35 | Attribute() | | -| Taint externally controlled string | test.py:97 | test.py:97:9:97:22 | tainted_string | | --> | Taint externally controlled string | test.py:97 | test.py:97:9:97:37 | Attribute() | | -| Taint externally controlled string | test.py:98 | test.py:98:9:98:22 | tainted_string | | --> | Taint externally controlled string | test.py:98 | test.py:98:9:98:46 | Attribute() | | -| Taint externally controlled string | test.py:99 | test.py:99:9:99:22 | tainted_string | | --> | Taint externally controlled string | test.py:99 | test.py:99:9:99:33 | Attribute() | | -| Taint externally controlled string | test.py:100 | test.py:100:9:100:22 | tainted_string | | --> | Taint externally controlled string | test.py:100 | test.py:100:9:100:30 | Attribute() | | -| Taint externally controlled string | test.py:101 | test.py:101:9:101:22 | tainted_string | | --> | Taint externally controlled string | test.py:101 | test.py:101:9:101:31 | Attribute() | | -| Taint externally controlled string | test.py:102 | test.py:102:9:102:22 | tainted_string | | --> | Taint externally controlled string | test.py:102 | test.py:102:9:102:35 | Attribute() | | -| Taint externally controlled string | test.py:103 | test.py:103:9:103:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:103 | test.py:103:9:103:37 | Attribute() | | -| Taint externally controlled string | test.py:104 | test.py:104:9:104:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:104 | test.py:104:9:104:37 | Attribute() | | -| Taint externally controlled string | test.py:105 | test.py:105:9:105:22 | tainted_string | | --> | Taint externally controlled string | test.py:105 | test.py:105:9:105:42 | Attribute() | | -| Taint externally controlled string | test.py:106 | test.py:106:9:106:22 | tainted_string | | --> | Taint externally controlled string | test.py:106 | test.py:106:9:106:33 | Attribute() | | -| Taint externally controlled string | test.py:107 | test.py:107:9:107:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:107 | test.py:107:9:107:38 | Attribute() | | -| Taint externally controlled string | test.py:108 | test.py:108:9:108:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:108 | test.py:108:9:108:38 | Attribute() | | -| Taint externally controlled string | test.py:109 | test.py:109:9:109:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:109 | test.py:109:9:109:37 | Attribute() | | -| Taint externally controlled string | test.py:110 | test.py:110:9:110:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:110 | test.py:110:9:110:37 | Attribute() | | -| Taint externally controlled string | test.py:111 | test.py:111:9:111:22 | tainted_string | | --> | Taint externally controlled string | test.py:111 | test.py:111:9:111:31 | Attribute() | | -| Taint externally controlled string | test.py:112 | test.py:112:9:112:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:112 | test.py:112:9:112:30 | Attribute() | | -| Taint externally controlled string | test.py:113 | test.py:113:9:113:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:113 | test.py:113:9:113:30 | Attribute() | | -| Taint externally controlled string | test.py:114 | test.py:114:9:114:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:114 | test.py:114:9:114:35 | Attribute() | | -| Taint externally controlled string | test.py:115 | test.py:115:9:115:22 | tainted_string | | --> | Taint [externally controlled string] | test.py:115 | test.py:115:9:115:35 | Attribute() | | -| Taint externally controlled string | test.py:116 | test.py:116:9:116:22 | tainted_string | | --> | Taint externally controlled string | test.py:116 | test.py:116:9:116:30 | Attribute() | | -| Taint externally controlled string | test.py:117 | test.py:117:9:117:22 | tainted_string | | --> | Taint externally controlled string | test.py:117 | test.py:117:9:117:33 | Attribute() | | -| Taint externally controlled string | test.py:118 | test.py:118:9:118:22 | tainted_string | | --> | Taint externally controlled string | test.py:118 | test.py:118:9:118:30 | Attribute() | | -| Taint externally controlled string | test.py:121 | test.py:121:9:121:22 | tainted_string | | --> | Taint externally controlled string | test.py:121 | test.py:121:9:121:30 | Attribute() | | -| Taint externally controlled string | test.py:122 | test.py:122:9:122:22 | tainted_string | | --> | Taint externally controlled string | test.py:122 | test.py:122:9:122:33 | Attribute() | | -| Taint externally controlled string | test.py:133 | test.py:133:5:133:29 | For | | --> | Taint externally controlled string | test.py:134 | test.py:134:14:134:17 | line | | -| Taint file[externally controlled string] | test.py:126 | test.py:126:20:126:31 | TAINTED_FILE | | --> | Taint file[externally controlled string] | test.py:128 | test.py:128:9:128:20 | tainted_file | | -| Taint file[externally controlled string] | test.py:126 | test.py:126:20:126:31 | TAINTED_FILE | | --> | Taint file[externally controlled string] | test.py:129 | test.py:129:9:129:20 | tainted_file | | -| Taint file[externally controlled string] | test.py:126 | test.py:126:20:126:31 | TAINTED_FILE | | --> | Taint file[externally controlled string] | test.py:130 | test.py:130:9:130:20 | tainted_file | | -| Taint file[externally controlled string] | test.py:126 | test.py:126:20:126:31 | TAINTED_FILE | | --> | Taint file[externally controlled string] | test.py:131 | test.py:131:9:131:20 | tainted_file | | -| Taint file[externally controlled string] | test.py:126 | test.py:126:20:126:31 | TAINTED_FILE | | --> | Taint file[externally controlled string] | test.py:133 | test.py:133:17:133:28 | tainted_file | | -| Taint file[externally controlled string] | test.py:129 | test.py:129:9:129:20 | tainted_file | | --> | Taint externally controlled string | test.py:129 | test.py:129:9:129:27 | Attribute() | | -| Taint file[externally controlled string] | test.py:130 | test.py:130:9:130:20 | tainted_file | | --> | Taint externally controlled string | test.py:130 | test.py:130:9:130:31 | Attribute() | | -| Taint file[externally controlled string] | test.py:131 | test.py:131:9:131:20 | tainted_file | | --> | Taint [externally controlled string] | test.py:131 | test.py:131:9:131:32 | Attribute() | | -| Taint file[externally controlled string] | test.py:133 | test.py:133:17:133:28 | tainted_file | | --> | Taint externally controlled string | test.py:133 | test.py:133:5:133:29 | For | | -| Taint json[externally controlled string] | test.py:7 | test.py:7:20:7:45 | Attribute() | | --> | Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:20 | tainted_json | | -| Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:20 | tainted_json | | --> | Taint externally controlled string | test.py:8 | test.py:8:9:8:25 | Subscript | | -| Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:20 | tainted_json | | --> | Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:25 | Subscript | | -| Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:25 | Subscript | | --> | Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:9 | a | | -| Taint json[externally controlled string] | test.py:8 | test.py:8:9:8:25 | Subscript | | --> | Taint json[externally controlled string] | test.py:11 | test.py:11:10:11:10 | a | | -| Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:9 | a | | --> | Taint externally controlled string | test.py:9 | test.py:9:9:9:18 | Attribute() | | -| Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:9 | a | | --> | Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:18 | Attribute() | | -| Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:18 | Attribute() | | --> | Taint json[externally controlled string] | test.py:10 | test.py:10:9:10:9 | b | | -| Taint json[externally controlled string] | test.py:9 | test.py:9:9:9:18 | Attribute() | | --> | Taint json[externally controlled string] | test.py:11 | test.py:11:13:11:13 | b | | -| Taint json[externally controlled string] | test.py:10 | test.py:10:9:10:9 | b | | --> | Taint externally controlled string | test.py:10 | test.py:10:9:10:14 | Subscript | | -| Taint json[externally controlled string] | test.py:10 | test.py:10:9:10:9 | b | | --> | Taint json[externally controlled string] | test.py:10 | test.py:10:9:10:14 | Subscript | | -| Taint json[externally controlled string] | test.py:10 | test.py:10:9:10:14 | Subscript | | --> | Taint json[externally controlled string] | test.py:11 | test.py:11:16:11:16 | c | | -| Taint {externally controlled string} | test.py:73 | test.py:73:9:73:32 | parse_qs() | | --> | Taint {externally controlled string} | test.py:75 | test.py:75:16:75:16 | c | | diff --git a/python/ql/test/library-tests/taint/strings/TestStep.ql b/python/ql/test/library-tests/taint/strings/TestStep.ql deleted file mode 100644 index 177edce3498..00000000000 --- a/python/ql/test/library-tests/taint/strings/TestStep.ql +++ /dev/null @@ -1,11 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from TaintedNode n, TaintedNode s -where - n.getLocation().getFile().getShortName() = "test.py" and - s.getLocation().getFile().getShortName() = "test.py" and - s = n.getASuccessor() -select "Taint " + n.getTaintKind(), n.getLocation().toString(), n.getAstNode(), n.getContext(), - " --> ", "Taint " + s.getTaintKind(), s.getLocation().toString(), s.getAstNode(), s.getContext() diff --git a/python/ql/test/library-tests/taint/strings/TestTaint.expected b/python/ql/test/library-tests/taint/strings/TestTaint.expected deleted file mode 100644 index afc30f98899..00000000000 --- a/python/ql/test/library-tests/taint/strings/TestTaint.expected +++ /dev/null @@ -1,63 +0,0 @@ -| test.py:11 | test_json | a | externally controlled string | -| test.py:11 | test_json | a | json[externally controlled string] | -| test.py:11 | test_json | b | externally controlled string | -| test.py:11 | test_json | b | json[externally controlled string] | -| test.py:11 | test_json | c | externally controlled string | -| test.py:11 | test_json | c | json[externally controlled string] | -| test.py:22 | test_str | a | externally controlled string | -| test.py:22 | test_str | b | externally controlled string | -| test.py:22 | test_str | c | externally controlled string | -| test.py:22 | test_str | d | externally controlled string | -| test.py:22 | test_str | e | externally controlled string | -| test.py:22 | test_str | f | externally controlled string | -| test.py:22 | test_str | g | externally controlled string | -| test.py:27 | test_const_sanitizer1 | tainted_string | NO TAINT | -| test.py:29 | test_const_sanitizer1 | tainted_string | externally controlled string | -| test.py:34 | test_const_sanitizer2 | tainted_string | NO TAINT | -| test.py:36 | test_const_sanitizer2 | tainted_string | externally controlled string | -| test.py:43 | test_str2 | a | externally controlled string | -| test.py:43 | test_str2 | b | externally controlled string | -| test.py:43 | test_str2 | c | externally controlled string | -| test.py:51 | test_exc_info | res | exception.info | -| test.py:59 | test_untrusted | res | externally controlled string | -| test.py:75 | test_urlsplit_urlparse | a | [externally controlled string] | -| test.py:75 | test_urlsplit_urlparse | b | [externally controlled string] | -| test.py:75 | test_urlsplit_urlparse | c | {externally controlled string} | -| test.py:75 | test_urlsplit_urlparse | d | [[externally controlled string]] | -| test.py:85 | test_method_reference | a | externally controlled string | -| test.py:85 | test_method_reference | b | NO TAINT | -| test.py:91 | test_str_methods | Attribute() | externally controlled string | -| test.py:92 | test_str_methods | Attribute() | externally controlled string | -| test.py:93 | test_str_methods | Attribute() | externally controlled string | -| test.py:94 | test_str_methods | Attribute() | externally controlled string | -| test.py:95 | test_str_methods | Attribute() | externally controlled string | -| test.py:96 | test_str_methods | Attribute() | externally controlled string | -| test.py:97 | test_str_methods | Attribute() | externally controlled string | -| test.py:98 | test_str_methods | Attribute() | externally controlled string | -| test.py:99 | test_str_methods | Attribute() | externally controlled string | -| test.py:100 | test_str_methods | Attribute() | externally controlled string | -| test.py:101 | test_str_methods | Attribute() | externally controlled string | -| test.py:102 | test_str_methods | Attribute() | externally controlled string | -| test.py:103 | test_str_methods | Attribute() | [externally controlled string] | -| test.py:104 | test_str_methods | Subscript | externally controlled string | -| test.py:105 | test_str_methods | Attribute() | externally controlled string | -| test.py:106 | test_str_methods | Attribute() | externally controlled string | -| test.py:107 | test_str_methods | Attribute() | [externally controlled string] | -| test.py:108 | test_str_methods | Subscript | externally controlled string | -| test.py:109 | test_str_methods | Attribute() | [externally controlled string] | -| test.py:110 | test_str_methods | Subscript | externally controlled string | -| test.py:111 | test_str_methods | Attribute() | externally controlled string | -| test.py:112 | test_str_methods | Attribute() | [externally controlled string] | -| test.py:113 | test_str_methods | Subscript | externally controlled string | -| test.py:114 | test_str_methods | Attribute() | [externally controlled string] | -| test.py:115 | test_str_methods | Subscript | externally controlled string | -| test.py:116 | test_str_methods | Attribute() | externally controlled string | -| test.py:117 | test_str_methods | Attribute() | externally controlled string | -| test.py:118 | test_str_methods | Attribute() | externally controlled string | -| test.py:121 | test_str_methods | Attribute() | externally controlled string | -| test.py:122 | test_str_methods | Attribute() | externally controlled string | -| test.py:128 | test_tainted_file | tainted_file | file[externally controlled string] | -| test.py:129 | test_tainted_file | Attribute() | externally controlled string | -| test.py:130 | test_tainted_file | Attribute() | externally controlled string | -| test.py:131 | test_tainted_file | Attribute() | [externally controlled string] | -| test.py:134 | test_tainted_file | line | externally controlled string | diff --git a/python/ql/test/library-tests/taint/strings/TestTaint.ql b/python/ql/test/library-tests/taint/strings/TestTaint.ql deleted file mode 100644 index 47883578516..00000000000 --- a/python/ql/test/library-tests/taint/strings/TestTaint.ql +++ /dev/null @@ -1,19 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from Call call, Expr arg, string taint_string -where - call.getLocation().getFile().getShortName() = "test.py" and - call.getFunc().(Name).getId() = "test" and - arg = call.getAnArg() and - ( - not exists(TaintedNode tainted | tainted.getAstNode() = arg) and - taint_string = "NO TAINT" - or - exists(TaintedNode tainted | tainted.getAstNode() = arg | - taint_string = tainted.getTaintKind().toString() - ) - ) -select arg.getLocation().toString(), call.getScope().(Function).getName(), arg.toString(), - taint_string diff --git a/python/ql/test/library-tests/taint/strings/test.py b/python/ql/test/library-tests/taint/strings/test.py deleted file mode 100644 index 78a0712ceca..00000000000 --- a/python/ql/test/library-tests/taint/strings/test.py +++ /dev/null @@ -1,134 +0,0 @@ -import json -from copy import copy -import sys - -def test_json(): - tainted_string = TAINTED_STRING - tainted_json = json.loads(tainted_string) - a = tainted_json["x"] - b = a.get("y") - c = b["z"] - test(a, b, c) - -def test_str(): - tainted_string = TAINTED_STRING - a = tainted_string.ljust(8) - b = tainted_string.copy() - c = tainted_string[:] - d = tainted_string[::2] - e = reversed(tainted_string) - f = copy(tainted_string) - g = tainted_string.strip() - test(a, b, c, d, e, f, g) - -def test_const_sanitizer1(): - tainted_string = TAINTED_STRING - if tainted_string == "OK": - test(tainted_string) # not tainted - else: - test(tainted_string) # still tainted - -def test_const_sanitizer2(): - tainted_string = TAINTED_STRING - if tainted_string == "OK" or tainted_string == "ALSO_OK": - test(tainted_string) # not tainted - else: - test(tainted_string) # still tainted - -def test_str2(): - tainted_string = TAINTED_STRING - a = str(tainted_string) - b = bytes(tainted_string) # This is an error in Python 3 - c = bytes(tainted_string, encoding="utf8") # This is an error in Python 2 - test(a, b, c) - -def cross_over(func, taint): - return func(taint) - -def test_exc_info(): - info = TAINTED_EXCEPTION_INFO - res = cross_over(exc_info_call, info) - test(res) - -def exc_info_call(arg): - return arg - -def test_untrusted(): - ext = TAINTED_STRING - res = cross_over(untrusted_call, ext) - test(res) - -def exc_untrusted_call(arg): - return arg - -if sys.version_info[0] == 2: - from urlparse import urlsplit, urlparse, parse_qs, parse_qsl -if sys.version_info[0] == 3: - from urllib.parse import urlsplit, urlparse, parse_qs, parse_qsl - -def test_urlsplit_urlparse(): - tainted_string = TAINTED_STRING - a = urlsplit(tainted_string) - b = urlparse(tainted_string) - c = parse_qs(tainted_string) - d = parse_qsl(tainted_string) - test(a, b, c, d) - -def test_method_reference(): - tainted_string = TAINTED_STRING - - a = tainted_string.title() - - func = tainted_string.title - b = func() - - test(a, b) # TODO: `b` not tainted - -def test_str_methods(): - tainted_string = TAINTED_STRING - - test( - tainted_string.capitalize(), - tainted_string.casefold(), - tainted_string.center(), - tainted_string.encode('utf-8'), - tainted_string.encode('utf-8').decode('utf-8'), - tainted_string.expandtabs(), - tainted_string.format(foo=42), - tainted_string.format_map({'foo': 42}), - tainted_string.ljust(100), - tainted_string.lower(), - tainted_string.lstrip(), - tainted_string.lstrip('w.'), - tainted_string.partition(';'), - tainted_string.partition(';')[0], - tainted_string.replace('/', '', 1), - tainted_string.rjust(100), - tainted_string.rpartition(';'), - tainted_string.rpartition(';')[2], - tainted_string.rsplit(';', 4), - tainted_string.rsplit(';', 4)[-1], - tainted_string.rstrip(), - tainted_string.split(), - tainted_string.split()[0], - tainted_string.splitlines(), - tainted_string.splitlines()[0], - tainted_string.strip(), - tainted_string.swapcase(), - tainted_string.title(), - # ignoring, as I have never seen this in practice - # tainted_string.translate(translation_table), - tainted_string.upper(), - tainted_string.zfill(100), - ) - -def test_tainted_file(): - tainted_file = TAINTED_FILE - test( - tainted_file, - tainted_file.read(), - tainted_file.readline(), - tainted_file.readlines(), - ) - for line in tainted_file: - test(line) diff --git a/python/ql/test/library-tests/taint/unpacking/Taint.qll b/python/ql/test/library-tests/taint/unpacking/Taint.qll deleted file mode 100644 index 010b9738c5c..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/Taint.qll +++ /dev/null @@ -1,27 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.security.strings.Untrusted - -class SimpleSource extends TaintSource { - SimpleSource() { this.(NameNode).getId() = "TAINTED_STRING" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringKind } - - override string toString() { result = "taint source" } -} - -class ListSource extends TaintSource { - ListSource() { this.(NameNode).getId() = "TAINTED_LIST" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringSequenceKind } - - override string toString() { result = "list taint source" } -} - -class DictSource extends TaintSource { - DictSource() { this.(NameNode).getId() = "TAINTED_DICT" } - - override predicate isSourceOf(TaintKind kind) { kind instanceof ExternalStringDictKind } - - override string toString() { result = "dict taint source" } -} diff --git a/python/ql/test/library-tests/taint/unpacking/TestStep.expected b/python/ql/test/library-tests/taint/unpacking/TestStep.expected deleted file mode 100644 index 5d800e6b5b8..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/TestStep.expected +++ /dev/null @@ -1,41 +0,0 @@ -| Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | --> | Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | -| Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | --> | Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | -| Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | --> | Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | -| Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:22:23:22 | b | | -| Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | --> | Taint [externally controlled string] | test.py:23 | test.py:23:25:23:25 | c | | -| Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | --> | Taint externally controlled string | test.py:23 | test.py:23:10:23:11 | a1 | | -| Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | --> | Taint externally controlled string | test.py:23 | test.py:23:14:23:15 | a2 | | -| Taint [[externally controlled string]] | test.py:22 | test.py:22:28:22:29 | ll | | --> | Taint externally controlled string | test.py:23 | test.py:23:18:23:19 | a3 | | -| Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | --> | Taint [externally controlled string] | test.py:27 | test.py:27:22:27:22 | b | | -| Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | --> | Taint [externally controlled string] | test.py:27 | test.py:27:25:27:25 | c | | -| Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | --> | Taint externally controlled string | test.py:27 | test.py:27:10:27:11 | a1 | | -| Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | --> | Taint externally controlled string | test.py:27 | test.py:27:14:27:15 | a2 | | -| Taint [[externally controlled string]] | test.py:26 | test.py:26:28:26:29 | ll | | --> | Taint externally controlled string | test.py:27 | test.py:27:18:27:19 | a3 | | -| Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | --> | Taint [externally controlled string] | test.py:31 | test.py:31:22:31:22 | b | | -| Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | --> | Taint [externally controlled string] | test.py:31 | test.py:31:25:31:25 | c | | -| Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | --> | Taint externally controlled string | test.py:31 | test.py:31:10:31:11 | a1 | | -| Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | --> | Taint externally controlled string | test.py:31 | test.py:31:14:31:15 | a2 | | -| Taint [[externally controlled string]] | test.py:30 | test.py:30:28:30:29 | ll | | --> | Taint externally controlled string | test.py:31 | test.py:31:18:31:19 | a3 | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:10:48:10 | a | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:13:48:13 | b | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:16:48:16 | c | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:19:48:19 | d | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:22:48:22 | e | | -| Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | --> | Taint externally controlled string | test.py:48 | test.py:48:25:48:25 | f | | -| Taint [externally controlled string] | test.py:6 | test.py:6:9:6:20 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:7 | test.py:7:15:7:15 | l | | -| Taint [externally controlled string] | test.py:7 | test.py:7:15:7:15 | l | | --> | Taint externally controlled string | test.py:8 | test.py:8:10:8:10 | a | | -| Taint [externally controlled string] | test.py:7 | test.py:7:15:7:15 | l | | --> | Taint externally controlled string | test.py:8 | test.py:8:13:8:13 | b | | -| Taint [externally controlled string] | test.py:7 | test.py:7:15:7:15 | l | | --> | Taint externally controlled string | test.py:8 | test.py:8:16:8:16 | c | | -| Taint [externally controlled string] | test.py:12 | test.py:12:9:12:20 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:13 | test.py:13:17:13:17 | l | | -| Taint [externally controlled string] | test.py:13 | test.py:13:17:13:17 | l | | --> | Taint externally controlled string | test.py:14 | test.py:14:10:14:10 | a | | -| Taint [externally controlled string] | test.py:13 | test.py:13:17:13:17 | l | | --> | Taint externally controlled string | test.py:14 | test.py:14:13:14:13 | b | | -| Taint [externally controlled string] | test.py:13 | test.py:13:17:13:17 | l | | --> | Taint externally controlled string | test.py:14 | test.py:14:16:14:16 | c | | -| Taint [externally controlled string] | test.py:18 | test.py:18:9:18:20 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:19 | test.py:19:11:19:11 | l | | -| Taint [externally controlled string] | test.py:18 | test.py:18:9:18:20 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:19 | test.py:19:14:19:14 | l | | -| Taint [externally controlled string] | test.py:18 | test.py:18:9:18:20 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:19 | test.py:19:17:19:17 | l | | -| Taint [externally controlled string] | test.py:19 | test.py:19:11:19:11 | l | | --> | Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | -| Taint [externally controlled string] | test.py:19 | test.py:19:14:19:14 | l | | --> | Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | -| Taint [externally controlled string] | test.py:19 | test.py:19:17:19:17 | l | | --> | Taint [[externally controlled string]] | test.py:19 | test.py:19:10:19:18 | List | | -| Taint [externally controlled string] | test.py:43 | test.py:43:20:43:31 | TAINTED_LIST | | --> | Taint [externally controlled string] | test.py:47 | test.py:47:28:47:39 | tainted_list | | -| Taint [externally controlled string] | test.py:47 | test.py:47:28:47:39 | tainted_list | | --> | Taint [[externally controlled string]] | test.py:47 | test.py:47:28:47:54 | Tuple | | -| Taint [externally controlled string] | test.py:55 | test.py:55:27:55:38 | TAINTED_LIST | | --> | Taint [[externally controlled string]] | test.py:55 | test.py:55:25:55:40 | List | | diff --git a/python/ql/test/library-tests/taint/unpacking/TestStep.ql b/python/ql/test/library-tests/taint/unpacking/TestStep.ql deleted file mode 100644 index 177edce3498..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/TestStep.ql +++ /dev/null @@ -1,11 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from TaintedNode n, TaintedNode s -where - n.getLocation().getFile().getShortName() = "test.py" and - s.getLocation().getFile().getShortName() = "test.py" and - s = n.getASuccessor() -select "Taint " + n.getTaintKind(), n.getLocation().toString(), n.getAstNode(), n.getContext(), - " --> ", "Taint " + s.getTaintKind(), s.getLocation().toString(), s.getAstNode(), s.getContext() diff --git a/python/ql/test/library-tests/taint/unpacking/TestTaint.expected b/python/ql/test/library-tests/taint/unpacking/TestTaint.expected deleted file mode 100644 index d1bad70f811..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/TestTaint.expected +++ /dev/null @@ -1,33 +0,0 @@ -| test.py:8 | unpacking | a | externally controlled string | -| test.py:8 | unpacking | b | externally controlled string | -| test.py:8 | unpacking | c | externally controlled string | -| test.py:14 | unpacking_to_list | a | externally controlled string | -| test.py:14 | unpacking_to_list | b | externally controlled string | -| test.py:14 | unpacking_to_list | c | externally controlled string | -| test.py:23 | nested | a1 | externally controlled string | -| test.py:23 | nested | a2 | externally controlled string | -| test.py:23 | nested | a3 | externally controlled string | -| test.py:23 | nested | b | [externally controlled string] | -| test.py:23 | nested | c | [externally controlled string] | -| test.py:27 | nested | a1 | externally controlled string | -| test.py:27 | nested | a2 | externally controlled string | -| test.py:27 | nested | a3 | externally controlled string | -| test.py:27 | nested | b | [externally controlled string] | -| test.py:27 | nested | c | [externally controlled string] | -| test.py:31 | nested | a1 | externally controlled string | -| test.py:31 | nested | a2 | externally controlled string | -| test.py:31 | nested | a3 | externally controlled string | -| test.py:31 | nested | b | [externally controlled string] | -| test.py:31 | nested | c | [externally controlled string] | -| test.py:38 | unpack_from_set | a | NO TAINT | -| test.py:38 | unpack_from_set | b | NO TAINT | -| test.py:38 | unpack_from_set | c | NO TAINT | -| test.py:48 | contrived_1 | a | externally controlled string | -| test.py:48 | contrived_1 | b | externally controlled string | -| test.py:48 | contrived_1 | c | externally controlled string | -| test.py:48 | contrived_1 | d | externally controlled string | -| test.py:48 | contrived_1 | e | externally controlled string | -| test.py:48 | contrived_1 | f | externally controlled string | -| test.py:56 | contrived_2 | a | NO TAINT | -| test.py:56 | contrived_2 | b | NO TAINT | -| test.py:56 | contrived_2 | c | NO TAINT | diff --git a/python/ql/test/library-tests/taint/unpacking/TestTaint.ql b/python/ql/test/library-tests/taint/unpacking/TestTaint.ql deleted file mode 100644 index 47883578516..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/TestTaint.ql +++ /dev/null @@ -1,19 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import Taint - -from Call call, Expr arg, string taint_string -where - call.getLocation().getFile().getShortName() = "test.py" and - call.getFunc().(Name).getId() = "test" and - arg = call.getAnArg() and - ( - not exists(TaintedNode tainted | tainted.getAstNode() = arg) and - taint_string = "NO TAINT" - or - exists(TaintedNode tainted | tainted.getAstNode() = arg | - taint_string = tainted.getTaintKind().toString() - ) - ) -select arg.getLocation().toString(), call.getScope().(Function).getName(), arg.toString(), - taint_string diff --git a/python/ql/test/library-tests/taint/unpacking/test.py b/python/ql/test/library-tests/taint/unpacking/test.py deleted file mode 100644 index df3961ad6ab..00000000000 --- a/python/ql/test/library-tests/taint/unpacking/test.py +++ /dev/null @@ -1,58 +0,0 @@ -def test(*args): - pass - - -def unpacking(): - l = TAINTED_LIST - a, b, c = l - test(a, b, c) - - -def unpacking_to_list(): - l = TAINTED_LIST - [a, b, c] = l - test(a, b, c) - - -def nested(): - l = TAINTED_LIST - ll = [l, l, l] - - # list - [[a1, a2, a3], b, c] = ll - test(a1, a2, a3, b, c) - - # tuple - ((a1, a2, a3), b, c) = ll - test(a1, a2, a3, b, c) - - # mixed - [(a1, a2, a3), b, c] = ll - test(a1, a2, a3, b, c) - - -def unpack_from_set(): - # no guarantee on ordering ... don't know why you would ever do this - a, b, c = {"foo", "bar", TAINTED_STRING} - # either all should be tainted, or none of them - test(a, b, c) - - -def contrived_1(): - # A contrived example. Don't know why anyone would ever actually do this. - tainted_list = TAINTED_LIST - no_taint_list = [1,2,3] - - # We don't handle this case currently, since we mark `d`, `e` and `f` as tainted. - (a, b, c), (d, e, f) = tainted_list, no_taint_list - test(a, b, c, d, e, f) - - -def contrived_2(): - # A contrived example. Don't know why anyone would ever actually do this. - - # We currently only handle taint nested 2 levels. - [[[ (a,b,c) ]]] = [[[ TAINTED_LIST ]]] - test(a, b, c) - -# For Python 3, see https://www.python.org/dev/peps/pep-3132/ diff --git a/python/ql/test/library-tests/web/bottle/HttpResponseSinks.expected b/python/ql/test/library-tests/web/bottle/HttpResponseSinks.expected deleted file mode 100644 index 196468fd4c1..00000000000 --- a/python/ql/test/library-tests/web/bottle/HttpResponseSinks.expected +++ /dev/null @@ -1,5 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:9:12:9:26 | bottle handler function result | externally controlled string | -| test.py:13:12:13:24 | bottle handler function result | externally controlled string | -| test.py:19:12:19:33 | bottle handler function result | externally controlled string | -| test.py:36:21:36:51 | Taint sink | externally controlled string | diff --git a/python/ql/test/library-tests/web/bottle/HttpResponseSinks.ql b/python/ql/test/library-tests/web/bottle/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/bottle/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/bottle/HttpSources.expected b/python/ql/test/library-tests/web/bottle/HttpSources.expected deleted file mode 100644 index 63d149e955a..00000000000 --- a/python/ql/test/library-tests/web/bottle/HttpSources.expected +++ /dev/null @@ -1,9 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| ../../../query-tests/Security/lib/bottle.py:64:11:64:24 | LocalRequest() | bottle.request | -| test.py:3:35:3:41 | ImportMember | bottle.request | -| test.py:8:11:8:14 | name | externally controlled string | -| test.py:12:9:12:12 | name | externally controlled string | -| test.py:18:12:18:18 | request | bottle.request | -| test.py:27:12:27:16 | where | externally controlled string | -| test.py:32:14:32:20 | request | bottle.request | -| test.py:36:34:36:40 | request | bottle.request | diff --git a/python/ql/test/library-tests/web/bottle/HttpSources.ql b/python/ql/test/library-tests/web/bottle/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/bottle/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/bottle/Routing.expected b/python/ql/test/library-tests/web/bottle/Routing.expected deleted file mode 100644 index d07889879a3..00000000000 --- a/python/ql/test/library-tests/web/bottle/Routing.expected +++ /dev/null @@ -1,8 +0,0 @@ -WARNING: Type BottleRoute has been deprecated and may be removed in future (Routing.ql:4,6-17) -| /args | test.py:31:1:31:14 | Function unsafe2 | -| /bye/ | test.py:12:1:12:25 | Function bye | -| /hello/ | test.py:8:1:8:27 | Function hello | -| /other | test.py:17:1:17:12 | Function other | -| /wrong/ | test.py:27:1:27:31 | Function unsafe | -| /wrong/url | test.py:23:1:23:11 | Function safe | -| /xss | test.py:35:1:35:16 | Function maybe_xss | diff --git a/python/ql/test/library-tests/web/bottle/Routing.ql b/python/ql/test/library-tests/web/bottle/Routing.ql deleted file mode 100644 index 988b8398f04..00000000000 --- a/python/ql/test/library-tests/web/bottle/Routing.ql +++ /dev/null @@ -1,5 +0,0 @@ -import python -import semmle.python.web.bottle.General - -from BottleRoute route -select route.getUrl(), route.getFunction() diff --git a/python/ql/test/library-tests/web/bottle/Taint.expected b/python/ql/test/library-tests/web/bottle/Taint.expected deleted file mode 100644 index 451b1ee3e00..00000000000 --- a/python/ql/test/library-tests/web/bottle/Taint.expected +++ /dev/null @@ -1,23 +0,0 @@ -| ../../../query-tests/Security/lib/bottle.py:64 | LocalRequest() | bottle.request | -| ../../../query-tests/Security/lib/bottle.py:68 | url | externally controlled string | -| test.py:3 | ImportMember | bottle.request | -| test.py:8 | name | externally controlled string | -| test.py:9 | BinaryExpr | externally controlled string | -| test.py:9 | name | externally controlled string | -| test.py:12 | name | externally controlled string | -| test.py:13 | BinaryExpr | externally controlled string | -| test.py:13 | name | externally controlled string | -| test.py:18 | Attribute | bottle.FormsDict | -| test.py:18 | Attribute | externally controlled string | -| test.py:18 | request | bottle.request | -| test.py:19 | BinaryExpr | externally controlled string | -| test.py:19 | name | externally controlled string | -| test.py:27 | where | externally controlled string | -| test.py:28 | where | externally controlled string | -| test.py:32 | Attribute | bottle.FormsDict | -| test.py:32 | Attribute | externally controlled string | -| test.py:32 | request | bottle.request | -| test.py:36 | Attribute | bottle.FormsDict | -| test.py:36 | Attribute | externally controlled string | -| test.py:36 | BinaryExpr | externally controlled string | -| test.py:36 | request | bottle.request | diff --git a/python/ql/test/library-tests/web/bottle/Taint.ql b/python/ql/test/library-tests/web/bottle/Taint.ql deleted file mode 100644 index 09972af5f98..00000000000 --- a/python/ql/test/library-tests/web/bottle/Taint.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -select node.getLocation().toString(), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/bottle/options b/python/ql/test/library-tests/web/bottle/options deleted file mode 100644 index 7fb713d5924..00000000000 --- a/python/ql/test/library-tests/web/bottle/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/bottle/test.py b/python/ql/test/library-tests/web/bottle/test.py deleted file mode 100644 index 8975de72ea4..00000000000 --- a/python/ql/test/library-tests/web/bottle/test.py +++ /dev/null @@ -1,36 +0,0 @@ - - -from bottle import Bottle, route, request, redirect, response - -app = Bottle() - -@app.route('/hello/') -def hello(name = "World!"): - return "Hello " + name - -@route('/bye/') -def bye(name = "World!"): - return "Bye " + name - - -@route('/other') -def other(): - name = request.cookies.username - return "User name is " + name - - -@route('/wrong/url') -def safe(): - redirect("/right/url") - -@route('/wrong/') -def unsafe(where="/right/url"): - redirect(where) - -@route('/args') -def unsafe2(): - redirect(request.query.where, code) - -@route('/xss') -def maybe_xss(): - response.body = "name is " + request.query.name diff --git a/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.expected b/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.expected deleted file mode 100644 index d45cfd65989..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| red.py:8:16:8:20 | cherrypy handler function result | externally controlled string | -| test.py:11:16:11:29 | cherrypy handler function result | externally controlled string | -| test.py:17:16:17:27 | cherrypy handler function result | externally controlled string | diff --git a/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.ql b/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/cherrypy/HttpSources.expected b/python/ql/test/library-tests/web/cherrypy/HttpSources.expected deleted file mode 100644 index e0d1d7c4e59..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/HttpSources.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| ../../../query-tests/Security/lib/cherrypy/__init__.py:10:11:10:38 | _ThreadLocalProxy() | cherrypy.request | -| test.py:10:17:10:19 | arg | externally controlled string | -| test.py:16:17:16:19 | arg | externally controlled string | diff --git a/python/ql/test/library-tests/web/cherrypy/HttpSources.ql b/python/ql/test/library-tests/web/cherrypy/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/cherrypy/options b/python/ql/test/library-tests/web/cherrypy/options deleted file mode 100644 index 7fb713d5924..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/cherrypy/red.py b/python/ql/test/library-tests/web/cherrypy/red.py deleted file mode 100644 index 5fa25b5aa0f..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/red.py +++ /dev/null @@ -1,11 +0,0 @@ - -import cherrypy - -class MultiPath(object): - - @cherrypy.expose(['color', 'colour']) - def red(self): - return "RED" - -if __name__ == '__main__': - cherrypy.quickstart(MultiPath()) diff --git a/python/ql/test/library-tests/web/cherrypy/test.py b/python/ql/test/library-tests/web/cherrypy/test.py deleted file mode 100644 index 5d44b54077b..00000000000 --- a/python/ql/test/library-tests/web/cherrypy/test.py +++ /dev/null @@ -1,23 +0,0 @@ - -import random -import string - -import cherrypy - -class A(object): - - @cherrypy.expose - def a(self, arg): - return "hello " + arg - -class B(object): - - @cherrypy.expose - def b(self, arg): - return "bye " + arg - -cherrypy.tree.mount(A(), '/a', a_conf) -cherrypy.tree.mount(B(), '/b', b_conf) - -cherrypy.engine.start() -cherrypy.engine.block() \ No newline at end of file diff --git a/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.expected b/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.expected deleted file mode 100644 index fa93ffe7e88..00000000000 --- a/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.expected +++ /dev/null @@ -1,3 +0,0 @@ -WARNING: Module Client has been deprecated and may be removed in future (ClientHttpRequests.ql:5,6-12) -| test.py:3:1:3:27 | ControlFlowNode for Attribute() | test.py:3:14:3:26 | ControlFlowNode for Str | GET | -| test.py:4:1:4:28 | ControlFlowNode for Attribute() | test.py:4:15:4:27 | ControlFlowNode for Str | POST | diff --git a/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.ql b/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.ql deleted file mode 100644 index 52fd7ff218e..00000000000 --- a/python/ql/test/library-tests/web/client/requests/ClientHttpRequests.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.Http -import semmle.python.web.ClientHttpRequest - -from Client::HttpRequest req, string method -where if exists(req.getMethodUpper()) then method = req.getMethodUpper() else method = "" -select req, req.getAUrlPart(), method diff --git a/python/ql/test/library-tests/web/client/requests/options b/python/ql/test/library-tests/web/client/requests/options deleted file mode 100644 index f1858a6caf9..00000000000 --- a/python/ql/test/library-tests/web/client/requests/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: -p ../../../../query-tests/Security/lib/ --max-import-depth=1 diff --git a/python/ql/test/library-tests/web/client/requests/test.py b/python/ql/test/library-tests/web/client/requests/test.py deleted file mode 100644 index 1cb5e47e166..00000000000 --- a/python/ql/test/library-tests/web/client/requests/test.py +++ /dev/null @@ -1,4 +0,0 @@ -import requests - -requests.get('example.com') -requests.post('example.com') diff --git a/python/ql/test/library-tests/web/client/six/ClientHttpRequests.expected b/python/ql/test/library-tests/web/client/six/ClientHttpRequests.expected deleted file mode 100644 index 40400cce819..00000000000 --- a/python/ql/test/library-tests/web/client/six/ClientHttpRequests.expected +++ /dev/null @@ -1,11 +0,0 @@ -WARNING: Module Client has been deprecated and may be removed in future (ClientHttpRequests.ql:5,6-12) -| test.py:6:5:6:32 | ControlFlowNode for Attribute() | test.py:5:27:5:39 | ControlFlowNode for Str | GET | -| test.py:6:5:6:32 | ControlFlowNode for Attribute() | test.py:6:25:6:31 | ControlFlowNode for Str | GET | -| test.py:15:5:15:33 | ControlFlowNode for Attribute() | test.py:10:28:10:40 | ControlFlowNode for Str | POST | -| test.py:15:5:15:33 | ControlFlowNode for Attribute() | test.py:15:26:15:32 | ControlFlowNode for Str | POST | -| test.py:20:5:20:33 | ControlFlowNode for Attribute() | test.py:19:27:19:39 | ControlFlowNode for Str | | -| test.py:20:5:20:33 | ControlFlowNode for Attribute() | test.py:20:26:20:32 | ControlFlowNode for Str | | -| test.py:30:5:30:32 | ControlFlowNode for Attribute() | test.py:28:27:28:30 | ControlFlowNode for fake | GET | -| test.py:30:5:30:32 | ControlFlowNode for Attribute() | test.py:30:25:30:31 | ControlFlowNode for Str | GET | -| test.py:37:5:37:29 | ControlFlowNode for req_meth() | test.py:35:27:35:39 | ControlFlowNode for Str | HEAD | -| test.py:37:5:37:29 | ControlFlowNode for req_meth() | test.py:37:22:37:28 | ControlFlowNode for Str | HEAD | diff --git a/python/ql/test/library-tests/web/client/six/ClientHttpRequests.ql b/python/ql/test/library-tests/web/client/six/ClientHttpRequests.ql deleted file mode 100644 index 52fd7ff218e..00000000000 --- a/python/ql/test/library-tests/web/client/six/ClientHttpRequests.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.Http -import semmle.python.web.ClientHttpRequest - -from Client::HttpRequest req, string method -where if exists(req.getMethodUpper()) then method = req.getMethodUpper() else method = "" -select req, req.getAUrlPart(), method diff --git a/python/ql/test/library-tests/web/client/six/options b/python/ql/test/library-tests/web/client/six/options deleted file mode 100644 index 1f95e64d742..00000000000 --- a/python/ql/test/library-tests/web/client/six/options +++ /dev/null @@ -1,2 +0,0 @@ -semmle-extractor-options: --max-import-depth=2 -optimize: true diff --git a/python/ql/test/library-tests/web/client/six/test.py b/python/ql/test/library-tests/web/client/six/test.py deleted file mode 100644 index cdd79021d87..00000000000 --- a/python/ql/test/library-tests/web/client/six/test.py +++ /dev/null @@ -1,37 +0,0 @@ -from six.moves.http_client import HTTPConnection, HTTPSConnection - - -def basic(): - conn = HTTPConnection('example.com') - conn.request('GET', '/path') - - -def indirect_caller(): - conn = HTTPSConnection('example.com') - indirect_callee(conn) - - -def indirect_callee(conn): - conn.request('POST', '/path') - - -def method_not_known(method): - conn = HTTPConnection('example.com') - conn.request(method, '/path') - - -def sneaky_setting_host(): - # We don't handle that the host is overwritten directly. - # A contrived example; you're not supposed to do this, but you certainly can. - fake = 'fakehost.com' - real = 'realhost.com' - conn = HTTPConnection(fake) - conn.host = real - conn.request('GET', '/path') - - -def tricky_not_attribute_node(): - # A contrived example; you're not supposed to do this, but you certainly can. - conn = HTTPConnection('example.com') - req_meth = conn.request - req_meth('HEAD', '/path') diff --git a/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.expected b/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.expected deleted file mode 100644 index 73540db65e6..00000000000 --- a/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.expected +++ /dev/null @@ -1,11 +0,0 @@ -WARNING: Module Client has been deprecated and may be removed in future (ClientHttpRequests.ql:5,6-12) -| test.py:13:5:13:32 | ControlFlowNode for Attribute() | test.py:12:27:12:39 | ControlFlowNode for Str | GET | -| test.py:13:5:13:32 | ControlFlowNode for Attribute() | test.py:13:25:13:31 | ControlFlowNode for Str | GET | -| test.py:22:5:22:33 | ControlFlowNode for Attribute() | test.py:17:28:17:40 | ControlFlowNode for Str | POST | -| test.py:22:5:22:33 | ControlFlowNode for Attribute() | test.py:22:26:22:32 | ControlFlowNode for Str | POST | -| test.py:27:5:27:33 | ControlFlowNode for Attribute() | test.py:26:27:26:39 | ControlFlowNode for Str | | -| test.py:27:5:27:33 | ControlFlowNode for Attribute() | test.py:27:26:27:32 | ControlFlowNode for Str | | -| test.py:37:5:37:32 | ControlFlowNode for Attribute() | test.py:35:27:35:30 | ControlFlowNode for fake | GET | -| test.py:37:5:37:32 | ControlFlowNode for Attribute() | test.py:37:25:37:31 | ControlFlowNode for Str | GET | -| test.py:44:5:44:29 | ControlFlowNode for req_meth() | test.py:42:27:42:39 | ControlFlowNode for Str | HEAD | -| test.py:44:5:44:29 | ControlFlowNode for req_meth() | test.py:44:22:44:28 | ControlFlowNode for Str | HEAD | diff --git a/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.ql b/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.ql deleted file mode 100644 index 52fd7ff218e..00000000000 --- a/python/ql/test/library-tests/web/client/stdlib/ClientHttpRequests.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.Http -import semmle.python.web.ClientHttpRequest - -from Client::HttpRequest req, string method -where if exists(req.getMethodUpper()) then method = req.getMethodUpper() else method = "" -select req, req.getAUrlPart(), method diff --git a/python/ql/test/library-tests/web/client/stdlib/options b/python/ql/test/library-tests/web/client/stdlib/options deleted file mode 100644 index eb214fc2931..00000000000 --- a/python/ql/test/library-tests/web/client/stdlib/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=1 diff --git a/python/ql/test/library-tests/web/client/stdlib/test.py b/python/ql/test/library-tests/web/client/stdlib/test.py deleted file mode 100644 index 179f9b30858..00000000000 --- a/python/ql/test/library-tests/web/client/stdlib/test.py +++ /dev/null @@ -1,44 +0,0 @@ -import sys -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - -if PY2: - from httplib import HTTPConnection, HTTPSConnection -if PY3: - from http.client import HTTPConnection, HTTPSConnection - - -def basic(): - conn = HTTPConnection('example.com') - conn.request('GET', '/path') - - -def indirect_caller(): - conn = HTTPSConnection('example.com') - indirect_callee(conn) - - -def indirect_callee(conn): - conn.request('POST', '/path') - - -def method_not_known(method): - conn = HTTPConnection('example.com') - conn.request(method, '/path') - - -def sneaky_setting_host(): - # We don't handle that the host is overwritten directly. - # A contrived example; you're not supposed to do this, but you certainly can. - fake = 'fakehost.com' - real = 'realhost.com' - conn = HTTPConnection(fake) - conn.host = real - conn.request('GET', '/path') - - -def tricky_not_attribute_node(): - # A contrived example; you're not supposed to do this, but you certainly can. - conn = HTTPConnection('example.com') - req_meth = conn.request - req_meth('HEAD', '/path') diff --git a/python/ql/test/library-tests/web/django/HttpRedirectSinks.expected b/python/ql/test/library-tests/web/django/HttpRedirectSinks.expected deleted file mode 100644 index 6753f22d31f..00000000000 --- a/python/ql/test/library-tests/web/django/HttpRedirectSinks.expected +++ /dev/null @@ -1,5 +0,0 @@ -WARNING: Type HttpRedirectTaintSink has been deprecated and may be removed in future (HttpRedirectSinks.ql:5,6-27) -| test_1x.py:13:21:13:24 | DjangoShortcutsRedirectSink | externally controlled string | -| test_2x_3x.py:13:21:13:24 | DjangoShortcutsRedirectSink | externally controlled string | -| views_1x.py:99:33:99:55 | DjangoRedirectResponseSink | externally controlled string | -| views_2x_3x.py:120:33:120:55 | DjangoRedirectResponseSink | externally controlled string | diff --git a/python/ql/test/library-tests/web/django/HttpRedirectSinks.ql b/python/ql/test/library-tests/web/django/HttpRedirectSinks.ql deleted file mode 100644 index 157ef2d4430..00000000000 --- a/python/ql/test/library-tests/web/django/HttpRedirectSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRedirect -import semmle.python.security.strings.Untrusted - -from HttpRedirectTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/django/HttpResponseSinks.expected b/python/ql/test/library-tests/web/django/HttpResponseSinks.expected deleted file mode 100644 index 2f620ac508f..00000000000 --- a/python/ql/test/library-tests/web/django/HttpResponseSinks.expected +++ /dev/null @@ -1,32 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| views_1x.py:8:25:8:63 | django.Response(...) | externally controlled string | -| views_1x.py:12:25:12:52 | django.Response(...) | externally controlled string | -| views_1x.py:16:25:16:53 | django.Response(...) | externally controlled string | -| views_1x.py:21:15:21:42 | django.Response.write(...) | externally controlled string | -| views_1x.py:30:29:30:60 | django.Response(...) | externally controlled string | -| views_1x.py:36:29:36:65 | django.Response(...) | externally controlled string | -| views_1x.py:41:25:41:63 | django.Response(...) | externally controlled string | -| views_1x.py:45:25:45:70 | django.Response(...) | externally controlled string | -| views_1x.py:66:25:66:55 | django.Response(...) | externally controlled string | -| views_1x.py:75:25:75:33 | django.Response(...) | externally controlled string | -| views_1x.py:90:25:90:33 | django.Response(...) | externally controlled string | -| views_1x.py:94:25:94:58 | django.Response(...) | externally controlled string | -| views_1x.py:103:33:103:55 | django.Response(...) | externally controlled string | -| views_1x.py:107:25:107:47 | django.Response(...) | externally controlled string | -| views_2x_3x.py:8:25:8:63 | django.Response(...) | externally controlled string | -| views_2x_3x.py:12:25:12:52 | django.Response(...) | externally controlled string | -| views_2x_3x.py:16:25:16:53 | django.Response(...) | externally controlled string | -| views_2x_3x.py:21:15:21:42 | django.Response.write(...) | externally controlled string | -| views_2x_3x.py:30:29:30:60 | django.Response(...) | externally controlled string | -| views_2x_3x.py:36:29:36:65 | django.Response(...) | externally controlled string | -| views_2x_3x.py:41:25:41:63 | django.Response(...) | externally controlled string | -| views_2x_3x.py:45:25:45:70 | django.Response(...) | externally controlled string | -| views_2x_3x.py:66:25:66:40 | django.Response(...) | externally controlled string | -| views_2x_3x.py:79:25:79:61 | django.Response(...) | externally controlled string | -| views_2x_3x.py:82:25:82:69 | django.Response(...) | externally controlled string | -| views_2x_3x.py:85:25:85:64 | django.Response(...) | externally controlled string | -| views_2x_3x.py:88:25:88:32 | django.Response(...) | externally controlled string | -| views_2x_3x.py:111:25:111:33 | django.Response(...) | externally controlled string | -| views_2x_3x.py:115:25:115:58 | django.Response(...) | externally controlled string | -| views_2x_3x.py:124:33:124:55 | django.Response(...) | externally controlled string | -| views_2x_3x.py:128:25:128:47 | django.Response(...) | externally controlled string | diff --git a/python/ql/test/library-tests/web/django/HttpResponseSinks.ql b/python/ql/test/library-tests/web/django/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/django/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/django/HttpSources.expected b/python/ql/test/library-tests/web/django/HttpSources.expected deleted file mode 100644 index 2aa9c979334..00000000000 --- a/python/ql/test/library-tests/web/django/HttpSources.expected +++ /dev/null @@ -1,53 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test_1x.py:6:19:6:25 | request | django.request.HttpRequest | -| test_1x.py:6:28:6:31 | path | externally controlled string | -| test_1x.py:12:19:12:25 | request | django.request.HttpRequest | -| test_1x.py:12:28:12:31 | path | externally controlled string | -| test_2x_3x.py:6:19:6:25 | request | django.request.HttpRequest | -| test_2x_3x.py:6:28:6:31 | path | externally controlled string | -| test_2x_3x.py:12:19:12:25 | request | django.request.HttpRequest | -| test_2x_3x.py:12:28:12:31 | path | externally controlled string | -| views_1x.py:7:19:7:25 | request | django.request.HttpRequest | -| views_1x.py:7:28:7:30 | foo | externally controlled string | -| views_1x.py:7:33:7:35 | bar | externally controlled string | -| views_1x.py:11:20:11:26 | request | django.request.HttpRequest | -| views_1x.py:15:21:15:27 | request | django.request.HttpRequest | -| views_1x.py:19:21:19:27 | request | django.request.HttpRequest | -| views_1x.py:29:20:29:26 | request | django.request.HttpRequest | -| views_1x.py:29:29:29:37 | untrusted | externally controlled string | -| views_1x.py:35:19:35:25 | request | django.request.HttpRequest | -| views_1x.py:35:28:35:36 | untrusted | externally controlled string | -| views_1x.py:39:19:39:25 | request | django.request.HttpRequest | -| views_1x.py:39:28:39:38 | page_number | externally controlled string | -| views_1x.py:44:24:44:30 | request | django.request.HttpRequest | -| views_1x.py:44:33:44:36 | arg0 | externally controlled string | -| views_1x.py:44:39:44:42 | arg1 | externally controlled string | -| views_1x.py:65:15:65:21 | request | django.request.HttpRequest | -| views_1x.py:65:24:65:31 | username | externally controlled string | -| views_1x.py:74:13:74:19 | request | django.request.HttpRequest | -| views_2x_3x.py:7:19:7:25 | request | django.request.HttpRequest | -| views_2x_3x.py:7:28:7:30 | foo | externally controlled string | -| views_2x_3x.py:7:33:7:35 | bar | externally controlled string | -| views_2x_3x.py:11:20:11:26 | request | django.request.HttpRequest | -| views_2x_3x.py:15:21:15:27 | request | django.request.HttpRequest | -| views_2x_3x.py:19:21:19:27 | request | django.request.HttpRequest | -| views_2x_3x.py:29:20:29:26 | request | django.request.HttpRequest | -| views_2x_3x.py:29:29:29:37 | untrusted | externally controlled string | -| views_2x_3x.py:35:19:35:25 | request | django.request.HttpRequest | -| views_2x_3x.py:35:28:35:36 | untrusted | externally controlled string | -| views_2x_3x.py:39:19:39:25 | request | django.request.HttpRequest | -| views_2x_3x.py:39:28:39:38 | page_number | externally controlled string | -| views_2x_3x.py:44:24:44:30 | request | django.request.HttpRequest | -| views_2x_3x.py:44:33:44:36 | arg0 | externally controlled string | -| views_2x_3x.py:44:39:44:42 | arg1 | externally controlled string | -| views_2x_3x.py:65:20:65:26 | request | django.request.HttpRequest | -| views_2x_3x.py:78:17:78:23 | request | django.request.HttpRequest | -| views_2x_3x.py:78:26:78:36 | page_number | externally controlled string | -| views_2x_3x.py:81:17:81:23 | request | django.request.HttpRequest | -| views_2x_3x.py:81:26:81:28 | foo | externally controlled string | -| views_2x_3x.py:81:31:81:33 | bar | externally controlled string | -| views_2x_3x.py:81:36:81:38 | baz | externally controlled string | -| views_2x_3x.py:84:17:84:23 | request | django.request.HttpRequest | -| views_2x_3x.py:84:26:84:28 | foo | externally controlled string | -| views_2x_3x.py:84:31:84:33 | bar | externally controlled string | -| views_2x_3x.py:87:26:87:32 | request | django.request.HttpRequest | diff --git a/python/ql/test/library-tests/web/django/HttpSources.ql b/python/ql/test/library-tests/web/django/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/django/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/django/SqlInjectionSinks.expected b/python/ql/test/library-tests/web/django/SqlInjectionSinks.expected deleted file mode 100644 index d9850f2f7c6..00000000000 --- a/python/ql/test/library-tests/web/django/SqlInjectionSinks.expected +++ /dev/null @@ -1,9 +0,0 @@ -| sql.py:13:24:13:64 | db.connection.execute | externally controlled string | -| sql.py:14:26:14:66 | django.models.QuerySet.raw(sink,...) | externally controlled string | -| sql.py:17:24:17:77 | db.connection.execute | externally controlled string | -| sql.py:20:38:20:95 | django.db.models.expressions.RawSQL(sink,...) | externally controlled string | -| sql.py:21:26:21:83 | django.models.QuerySet.raw(sink,...) | externally controlled string | -| sql.py:22:28:22:85 | django.models.QuerySet.extra(sink,...) | externally controlled string | -| sql.py:36:26:36:68 | django.models.QuerySet.raw(sink,...) | externally controlled string | -| sql.py:42:11:42:52 | django.models.QuerySet.raw(sink,...) | externally controlled string | -| sql.py:47:13:47:54 | django.models.QuerySet.extra(sink,...) | externally controlled string | diff --git a/python/ql/test/library-tests/web/django/SqlInjectionSinks.ql b/python/ql/test/library-tests/web/django/SqlInjectionSinks.ql deleted file mode 100644 index b12dd8ea041..00000000000 --- a/python/ql/test/library-tests/web/django/SqlInjectionSinks.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.security.injection.Sql -import semmle.python.web.django.Db -import semmle.python.web.django.Model - -from SqlInjectionSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/django/options b/python/ql/test/library-tests/web/django/options deleted file mode 100644 index a87f995c396..00000000000 --- a/python/ql/test/library-tests/web/django/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --lang=3 --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/django/sql.py b/python/ql/test/library-tests/web/django/sql.py deleted file mode 100644 index 7809c24edc1..00000000000 --- a/python/ql/test/library-tests/web/django/sql.py +++ /dev/null @@ -1,53 +0,0 @@ -from django.db import connection, models -from django.db.models.expressions import RawSQL - - -class User(models.Model): - username = models.CharField(max_length=100) - description = models.TextField(blank=True) - - -def show_user(username): - with connection.cursor() as cursor: - # GOOD -- Using parameters - cursor.execute("SELECT * FROM users WHERE username = %s", username) - User.objects.raw("SELECT * FROM users WHERE username = %s", (username,)) - - # BAD -- Using string formatting - cursor.execute("SELECT * FROM users WHERE username = '%s'" % username) - - # BAD -- other ways of executing raw SQL code with string interpolation - User.objects.annotate(RawSQL("insert into names_file ('name') values ('%s')" % username)) - User.objects.raw("insert into names_file ('name') values ('%s')" % username) - User.objects.extra("insert into names_file ('name') values ('%s')" % username) - - # BAD (but currently no custom query to find this) - # - # It is exposed to SQL injection (https://docs.djangoproject.com/en/2.2/ref/models/querysets/#extra) - # For example, using name = "; DROP ALL TABLES -- " - # will result in SQL: SELECT * FROM name WHERE name = ''; DROP ALL TABLES -- '' - # - # This shouldn't be very widespread, since using a normal string will result in invalid SQL - # Using name = "example", will result in SQL: SELECT * FROM name WHERE name = ''example'' - # which in MySQL will give a syntax error - # - # When testing this out locally, none of the queries worked against SQLite3, but I could use - # the SQL injection against MySQL. - User.objects.raw("SELECT * FROM users WHERE username = '%s'", (username,)) - - -def raw3(arg): - m = User.objects.filter('foo') - m = m.filter('bar') - m.raw("select foo from bar where baz = %s" % arg) - - -def raw4(arg): - m = User.objects.filter('foo') - m.extra("select foo from bar where baz = %s" % arg) - - -def update_user(key, description1): - # Neither of these are exposed to sql-injections - user = User.objects.get(pk=key) - item.description = description diff --git a/python/ql/test/library-tests/web/django/test_1x.py b/python/ql/test/library-tests/web/django/test_1x.py deleted file mode 100644 index ce15a5e71bf..00000000000 --- a/python/ql/test/library-tests/web/django/test_1x.py +++ /dev/null @@ -1,19 +0,0 @@ -"""tests for Django 1.x""" -from django.conf.urls import url -from django.shortcuts import redirect, render - - -def with_template(request, path='default'): - env = {'path': path} - # We would need to understand django templates to know if this is safe or not - return render(request, 'possibly-vulnerable-template.html', env) - - -def vuln_redirect(request, path): - return redirect(path) - - -urlpatterns = [ - url(r'^(?P.*)$', with_template), - url(r'^redirect/(?P.*)$', vuln_redirect), -] diff --git a/python/ql/test/library-tests/web/django/test_2x_3x.py b/python/ql/test/library-tests/web/django/test_2x_3x.py deleted file mode 100644 index da08a80c27c..00000000000 --- a/python/ql/test/library-tests/web/django/test_2x_3x.py +++ /dev/null @@ -1,19 +0,0 @@ -"""tests for Django 2.x and 3.x""" -from django.urls import path -from django.shortcuts import redirect, render - - -def with_template(request, path='default'): - env = {'path': path} - # We would need to understand django templates to know if this is safe or not - return render(request, 'possibly-vulnerable-template.html', env) - - -def vuln_redirect(request, path): - return redirect(path) - - -urlpatterns = [ - path('/', with_template), - path('/redirect/', vuln_redirect), -] diff --git a/python/ql/test/library-tests/web/django/views_1x.py b/python/ql/test/library-tests/web/django/views_1x.py deleted file mode 100644 index f5476a13cef..00000000000 --- a/python/ql/test/library-tests/web/django/views_1x.py +++ /dev/null @@ -1,107 +0,0 @@ -"""test of views for Django 1.x""" -from django.conf.urls import patterns, url -from django.http.response import HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseNotFound -from django.views.generic import View - - -def url_match_xss(request, foo, bar, no_taint=None): - return HttpResponse('url_match_xss: {} {}'.format(foo, bar)) - - -def get_params_xss(request): - return HttpResponse(request.GET.get("untrusted")) - - -def post_params_xss(request): - return HttpResponse(request.POST.get("untrusted")) - - -def http_resp_write(request): - rsp = HttpResponse() - rsp.write(request.GET.get("untrusted")) - return rsp - - -class Foo(object): - # Note: since Foo is used as the super type in a class view, it will be able to handle requests. - - - def post(self, request, untrusted): - return HttpResponse('Foo post: {}'.format(untrusted)) - - -class ClassView(View, Foo): - - def get(self, request, untrusted): - return HttpResponse('ClassView get: {}'.format(untrusted)) - - -def show_articles(request, page_number=1): - page_number = int(page_number) - return HttpResponse('articles page: {}'.format(page_number)) - - -def xxs_positional_arg(request, arg0, arg1, no_taint=None): - return HttpResponse('xxs_positional_arg: {} {}'.format(arg0, arg1)) - - -urlpatterns = [ - url(r'^url_match/(?P[^/]+)/(?P[^/]+)$', url_match_xss), - url(r'^get_params$', get_params_xss), - url(r'^post_params$', post_params_xss), - url(r'^http_resp_write$', http_resp_write), - url(r'^class_view/(?P.+)$', ClassView.as_view()), - - # one pattern to support `articles/page-` and ensuring that articles/ goes to page-1 - url(r'articles/^(?:page-(?P\d+)/)?$', show_articles), - # passing as positional argument is not the recommended way of doing things, but it is certainly - # possible - url(r'^([^/]+)/(?:foo|bar)/([^/]+)$', xxs_positional_arg, name='xxs_positional_arg'), -] - -################################################################################ -# Using patterns() for routing - -def show_user(request, username): - return HttpResponse('show_user {}'.format(username)) - - -urlpatterns = patterns(url(r'^users/(?P[^/]+)$', show_user)) - -################################################################################ -# Show we understand the keyword arguments to django.conf.urls.url - -def kw_args(request): - return HttpResponse('kw_args') - -urlpatterns = [ - url(view=kw_args, regex=r'^kw_args$') -] - -# Not an XSS sink, since the Content-Type is not "text/html" -# FP reported in https://github.com/github/codeql-python-team/issues/38 -def fp_json_response(request): - # implicitly sets Content-Type to "application/json" - return JsonResponse({"foo": request.GET.get("foo")}) - -# Not an XSS sink, since the Content-Type is not "text/html" -def fp_manual_json_response(request): - json_data = '{"json": "{}"}'.format(request.GET.get("foo")) - return HttpResponse(json_data, content_type="application/json") - -# Not an XSS sink, since the Content-Type is not "text/html" -def fp_manual_content_type(reuqest): - return HttpResponse('', content_type="text/plain") - -# XSS FP reported in https://github.com/github/codeql/issues/3466 -# Note: This should be a open-redirect sink, but not a XSS sink. -def fp_redirect(request): - return HttpResponseRedirect(request.GET.get("next")) - -# Ensure that simple subclasses are still vuln to XSS -def tp_not_found(request): - return HttpResponseNotFound(request.GET.get("name")) - -# Ensure we still have a XSS sink when manually setting the content_type to HTML -def tp_manual_response_type(request): - return HttpResponse(request.GET.get("name"), content_type="text/html; charset=utf-8") diff --git a/python/ql/test/library-tests/web/django/views_2x_3x.py b/python/ql/test/library-tests/web/django/views_2x_3x.py deleted file mode 100644 index d61792004e9..00000000000 --- a/python/ql/test/library-tests/web/django/views_2x_3x.py +++ /dev/null @@ -1,128 +0,0 @@ -"""testing views for Django 2.x and 3.x""" -from django.urls import path, re_path -from django.http import HttpResponse, HttpResponseRedirect, JsonResponse, HttpResponseNotFound -from django.views import View - - -def url_match_xss(request, foo, bar, no_taint=None): - return HttpResponse('url_match_xss: {} {}'.format(foo, bar)) - - -def get_params_xss(request): - return HttpResponse(request.GET.get("untrusted")) - - -def post_params_xss(request): - return HttpResponse(request.POST.get("untrusted")) - - -def http_resp_write(request): - rsp = HttpResponse() - rsp.write(request.GET.get("untrusted")) - return rsp - - -class Foo(object): - # Note: since Foo is used as the super type in a class view, it will be able to handle requests. - - - def post(self, request, untrusted): - return HttpResponse('Foo post: {}'.format(untrusted)) - - -class ClassView(View, Foo): - - def get(self, request, untrusted): - return HttpResponse('ClassView get: {}'.format(untrusted)) - - -def show_articles(request, page_number=1): - page_number = int(page_number) - return HttpResponse('articles page: {}'.format(page_number)) - - -def xxs_positional_arg(request, arg0, arg1, no_taint=None): - return HttpResponse('xxs_positional_arg: {} {}'.format(arg0, arg1)) - - -urlpatterns = [ - re_path(r'^url_match/(?P[^/]+)/(?P[^/]+)$', url_match_xss), - re_path(r'^get_params$', get_params_xss), - re_path(r'^post_params$', post_params_xss), - re_path(r'^http_resp_write$', http_resp_write), - re_path(r'^class_view/(?P.+)$', ClassView.as_view()), - - # one pattern to support `articles/page-` and ensuring that articles/ goes to page-1 - re_path(r'articles/^(?:page-(?P\d+)/)?$', show_articles), - # passing as positional argument is not the recommended way of doing things, but it is certainly - # possible - re_path(r'^([^/]+)/(?:foo|bar)/([^/]+)$', xxs_positional_arg, name='xxs_positional_arg'), -] - - -# Show we understand the keyword arguments to from django.urls.re_path - -def re_path_kwargs(request): - return HttpResponse('re_path_kwargs') - - -urlpatterns = [ - re_path(view=re_path_kwargs, route=r'^specifying-as-kwargs-is-not-a-problem$') -] - -################################################################################ -# Using path -################################################################################ - -# saying page_number is an externally controlled *string* is a bit strange, when we have an int converter :O -def page_number(request, page_number=1): - return HttpResponse('page_number: {}'.format(page_number)) - -def foo_bar_baz(request, foo, bar, baz): - return HttpResponse('foo_bar_baz: {} {} {}'.format(foo, bar, baz)) - -def path_kwargs(request, foo, bar): - return HttpResponse('path_kwargs: {} {} {}'.format(foo, bar)) - -def not_valid_identifier(request): - return HttpResponse('') - -urlpatterns = [ - path('articles/', page_number), - path('articles/page-', page_number), - path('//', foo_bar_baz, name='foo-bar-baz'), - - path(view=path_kwargs, route='/'), - - # We should not report there is a request parameter called `not_valid!` - path('not_valid/', not_valid_identifier), -] - - -# Not an XSS sink, since the Content-Type is not "text/html" -# FP reported in https://github.com/github/codeql-python-team/issues/38 -def fp_json_response(request): - # implicitly sets Content-Type to "application/json" - return JsonResponse({"foo": request.GET.get("foo")}) - -# Not an XSS sink, since the Content-Type is not "text/html" -def fp_manual_json_response(request): - json_data = '{"json": "{}"}'.format(request.GET.get("foo")) - return HttpResponse(json_data, content_type="application/json") - -# Not an XSS sink, since the Content-Type is not "text/html" -def fp_manual_content_type(reuqest): - return HttpResponse('', content_type="text/plain") - -# XSS FP reported in https://github.com/github/codeql/issues/3466 -# Note: This should be a open-redirect sink, but not a XSS sink. -def fp_redirect(request): - return HttpResponseRedirect(request.GET.get("next")) - -# Ensure that simple subclasses are still vuln to XSS -def tp_not_found(request): - return HttpResponseNotFound(request.GET.get("name")) - -# Ensure we still have a XSS sink when manually setting the content_type to HTML -def tp_manual_response_type(request): - return HttpResponse(request.GET.get("name"), content_type="text/html; charset=utf-8") diff --git a/python/ql/test/library-tests/web/falcon/HttpResponseSinks.expected b/python/ql/test/library-tests/web/falcon/HttpResponseSinks.expected deleted file mode 100644 index 76fe8773866..00000000000 --- a/python/ql/test/library-tests/web/falcon/HttpResponseSinks.expected +++ /dev/null @@ -1 +0,0 @@ -| FIXME: temporarily disabled since it's not working | diff --git a/python/ql/test/library-tests/web/falcon/HttpResponseSinks.ql b/python/ql/test/library-tests/web/falcon/HttpResponseSinks.ql deleted file mode 100644 index eec9b1ef3cf..00000000000 --- a/python/ql/test/library-tests/web/falcon/HttpResponseSinks.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -// from HttpResponseTaintSink sink, TaintKind kind -// where sink.sinks(kind) -// select sink, kind -select "FIXME: temporarily disabled since it's not working" diff --git a/python/ql/test/library-tests/web/falcon/HttpSources.expected b/python/ql/test/library-tests/web/falcon/HttpSources.expected deleted file mode 100644 index 3cc29f418ab..00000000000 --- a/python/ql/test/library-tests/web/falcon/HttpSources.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:9:22:9:24 | req | falcon.request | -| test.py:19:23:19:25 | req | falcon.request | -| test.py:22:25:22:27 | req | falcon.request | diff --git a/python/ql/test/library-tests/web/falcon/HttpSources.ql b/python/ql/test/library-tests/web/falcon/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/falcon/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/falcon/Routing.expected b/python/ql/test/library-tests/web/falcon/Routing.expected deleted file mode 100644 index 47bcb473273..00000000000 --- a/python/ql/test/library-tests/web/falcon/Routing.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type FalconRoute has been deprecated and may be removed in future (Routing.ql:4,6-17) -| /hello | delete | test.py:22:5:22:35 | Function on_delete | -| /hello | get | test.py:9:5:9:32 | Function on_get | -| /hello | post | test.py:19:5:19:33 | Function on_post | diff --git a/python/ql/test/library-tests/web/falcon/Routing.ql b/python/ql/test/library-tests/web/falcon/Routing.ql deleted file mode 100644 index fde6c933b65..00000000000 --- a/python/ql/test/library-tests/web/falcon/Routing.ql +++ /dev/null @@ -1,5 +0,0 @@ -import python -import semmle.python.web.falcon.General - -from FalconRoute route, string method -select route.getUrl(), method, route.getHandlerFunction(method) diff --git a/python/ql/test/library-tests/web/falcon/Sinks.ql b/python/ql/test/library-tests/web/falcon/Sinks.ql deleted file mode 100644 index efaafe17f02..00000000000 --- a/python/ql/test/library-tests/web/falcon/Sinks.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink.getLocation().toString(), sink.(ControlFlowNode).getNode().toString(), kind diff --git a/python/ql/test/library-tests/web/falcon/Taint.expected b/python/ql/test/library-tests/web/falcon/Taint.expected deleted file mode 100644 index f1e7abb4f0d..00000000000 --- a/python/ql/test/library-tests/web/falcon/Taint.expected +++ /dev/null @@ -1,20 +0,0 @@ -| test.py:9 | req | falcon.request | -| test.py:9 | resp | falcon.response | -| test.py:10 | Attribute | file[externally controlled string] | -| test.py:10 | Attribute() | externally controlled string | -| test.py:10 | req | falcon.request | -| test.py:11 | Attribute() | json[externally controlled string] | -| test.py:11 | raw_json | externally controlled string | -| test.py:12 | resp | falcon.response | -| test.py:13 | Dict | {json[externally controlled string]} | -| test.py:15 | result | json[externally controlled string] | -| test.py:17 | result | {json[externally controlled string]} | -| test.py:19 | req | falcon.request | -| test.py:19 | resp | falcon.response | -| test.py:22 | req | falcon.request | -| test.py:22 | resp | falcon.response | -| test.py:23 | Attribute | wsgi.environment | -| test.py:23 | req | falcon.request | -| test.py:24 | Subscript | externally controlled string | -| test.py:24 | env | wsgi.environment | -| test.py:25 | qs | externally controlled string | diff --git a/python/ql/test/library-tests/web/falcon/Taint.ql b/python/ql/test/library-tests/web/falcon/Taint.ql deleted file mode 100644 index d68b12079b8..00000000000 --- a/python/ql/test/library-tests/web/falcon/Taint.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -where node.getLocation().getFile().getShortName() = "test.py" -select node.getLocation().toString(), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/falcon/options b/python/ql/test/library-tests/web/falcon/options deleted file mode 100644 index 7fb713d5924..00000000000 --- a/python/ql/test/library-tests/web/falcon/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/falcon/test.py b/python/ql/test/library-tests/web/falcon/test.py deleted file mode 100644 index 72853c94ad0..00000000000 --- a/python/ql/test/library-tests/web/falcon/test.py +++ /dev/null @@ -1,28 +0,0 @@ -import json - -from falcon import API - -app = API() - -class Handler(object): - - def on_get(self, req, resp): - raw_json = req.stream.read() - result = json.loads(raw_json) - resp.status = 200 - result = { - 'status': 'success', - 'data': result - } - resp.body = json.dumps(result) - - def on_post(self, req, resp): - pass - - def on_delete(self, req, resp): - env = req.env - qs = env["QUERY_STRING"] - return qs - -app.add_route('/hello', Handler()) - diff --git a/python/ql/test/library-tests/web/flask/HttpResponseSinks.expected b/python/ql/test/library-tests/web/flask/HttpResponseSinks.expected deleted file mode 100644 index e860c6f2f87..00000000000 --- a/python/ql/test/library-tests/web/flask/HttpResponseSinks.expected +++ /dev/null @@ -1,17 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:8:12:8:25 | flask.routed.response | externally controlled string | -| test.py:29:12:29:38 | flask.routed.response | externally controlled string | -| test.py:35:16:35:37 | flask.routed.response | externally controlled string | -| test.py:36:12:36:15 | flask.routed.response | externally controlled string | -| test.py:41:12:41:54 | flask.routed.response | externally controlled string | -| test.py:41:26:41:53 | flask.response.argument | externally controlled string | -| test.py:46:12:46:62 | flask.routed.response | externally controlled string | -| test.py:46:26:46:61 | flask.response.argument | externally controlled string | -| test.py:50:12:50:48 | flask.routed.response | externally controlled string | -| test.py:50:26:50:47 | flask.response.argument | externally controlled string | -| test.py:54:12:54:53 | flask.routed.response | externally controlled string | -| test.py:54:26:54:52 | flask.response.argument | externally controlled string | -| test.py:60:12:60:62 | flask.routed.response | externally controlled string | -| test.py:60:26:60:61 | flask.response.argument | externally controlled string | -| test.py:64:12:64:58 | flask.routed.response | externally controlled string | -| test.py:64:26:64:57 | flask.response.argument | externally controlled string | diff --git a/python/ql/test/library-tests/web/flask/HttpResponseSinks.ql b/python/ql/test/library-tests/web/flask/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/flask/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/flask/HttpSources.expected b/python/ql/test/library-tests/web/flask/HttpSources.expected deleted file mode 100644 index e313f9bf1c2..00000000000 --- a/python/ql/test/library-tests/web/flask/HttpSources.expected +++ /dev/null @@ -1,10 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:29:12:29:23 | Attribute | {externally controlled string} | -| test.py:33:9:33:20 | Attribute | {externally controlled string} | -| test.py:35:16:35:27 | Attribute | {externally controlled string} | -| test.py:40:18:40:29 | Attribute | {externally controlled string} | -| test.py:45:18:45:29 | Attribute | {externally controlled string} | -| test.py:49:11:49:14 | name | externally controlled string | -| test.py:53:9:53:15 | subpath | externally controlled string | -| test.py:59:24:59:26 | bar | externally controlled string | -| test.py:63:13:63:21 | lang_code | externally controlled string | diff --git a/python/ql/test/library-tests/web/flask/HttpSources.ql b/python/ql/test/library-tests/web/flask/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/flask/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/flask/Routing.expected b/python/ql/test/library-tests/web/flask/Routing.expected deleted file mode 100644 index 90e70bcee8a..00000000000 --- a/python/ql/test/library-tests/web/flask/Routing.expected +++ /dev/null @@ -1,11 +0,0 @@ -WARNING: Predicate flask_routing has been deprecated and may be removed in future (Routing.ql:5,7-20) -| / | Function hello_world | -| /complex/ | Function complex | -| /dangerous | Function dangerous | -| /dangerous-with-cfg-split | Function dangerous2 | -| /foo/ | Function foo | -| /hello/ | Function hello | -| /multiple/bar/ | Function multiple | -| /safe | Function safe | -| /the/ | Function get | -| /unsafe | Function unsafe | diff --git a/python/ql/test/library-tests/web/flask/Routing.ql b/python/ql/test/library-tests/web/flask/Routing.ql deleted file mode 100644 index 92ae6740f0d..00000000000 --- a/python/ql/test/library-tests/web/flask/Routing.ql +++ /dev/null @@ -1,6 +0,0 @@ -import python -import semmle.python.web.flask.General - -from ControlFlowNode regex, Function func -where flask_routing(regex, func) -select regex.getNode().(StrConst).getText(), func.toString() diff --git a/python/ql/test/library-tests/web/flask/Taint.expected b/python/ql/test/library-tests/web/flask/Taint.expected deleted file mode 100644 index 48562648096..00000000000 --- a/python/ql/test/library-tests/web/flask/Taint.expected +++ /dev/null @@ -1,33 +0,0 @@ -| test.py:22 | Attribute() | flask/MyView.as.view | -| test.py:25 | the_view | flask/MyView.as.view | -| test.py:29 | Attribute | {externally controlled string} | -| test.py:29 | Attribute() | externally controlled string | -| test.py:33 | Attribute | {externally controlled string} | -| test.py:33 | Subscript | externally controlled string | -| test.py:35 | Attribute | {externally controlled string} | -| test.py:35 | Subscript | externally controlled string | -| test.py:40 | Attribute | {externally controlled string} | -| test.py:40 | Attribute() | externally controlled string | -| test.py:41 | BinaryExpr | externally controlled string | -| test.py:41 | first_name | externally controlled string | -| test.py:41 | make_response() | flask.Response | -| test.py:45 | Attribute | {externally controlled string} | -| test.py:45 | Attribute() | externally controlled string | -| test.py:46 | first_name | externally controlled string | -| test.py:46 | make_response() | flask.Response | -| test.py:49 | name | externally controlled string | -| test.py:50 | BinaryExpr | externally controlled string | -| test.py:50 | make_response() | flask.Response | -| test.py:50 | name | externally controlled string | -| test.py:53 | subpath | externally controlled string | -| test.py:54 | BinaryExpr | externally controlled string | -| test.py:54 | make_response() | flask.Response | -| test.py:54 | subpath | externally controlled string | -| test.py:59 | bar | externally controlled string | -| test.py:60 | Attribute() | externally controlled string | -| test.py:60 | bar | externally controlled string | -| test.py:60 | make_response() | flask.Response | -| test.py:63 | lang_code | externally controlled string | -| test.py:64 | Attribute() | externally controlled string | -| test.py:64 | lang_code | externally controlled string | -| test.py:64 | make_response() | flask.Response | diff --git a/python/ql/test/library-tests/web/flask/Taint.ql b/python/ql/test/library-tests/web/flask/Taint.ql deleted file mode 100644 index d68b12079b8..00000000000 --- a/python/ql/test/library-tests/web/flask/Taint.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -where node.getLocation().getFile().getShortName() = "test.py" -select node.getLocation().toString(), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/flask/options b/python/ql/test/library-tests/web/flask/options deleted file mode 100644 index 7fb713d5924..00000000000 --- a/python/ql/test/library-tests/web/flask/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/flask/test.py b/python/ql/test/library-tests/web/flask/test.py deleted file mode 100644 index bedeaa56423..00000000000 --- a/python/ql/test/library-tests/web/flask/test.py +++ /dev/null @@ -1,67 +0,0 @@ -import flask - -from flask import Flask, request, make_response -app = Flask(__name__) - -@app.route("/") -def hello_world(): - return "Hello World!" - -from flask.views import MethodView - -class MyView(MethodView): - - def get(self, user_id): - if user_id is None: - # return a list of users - pass - else: - # expose a single user - pass - -the_view = MyView.as_view('my_view') - -app.add_url_rule('/the/', defaults={'user_id': None}, - view_func=the_view, methods=['GET',]) - -@app.route("/dangerous") -def dangerous(): - return request.args.get('payload') - -@app.route("/dangerous-with-cfg-split") -def dangerous2(): - x = request.form['param0'] - if request.method == "POST": - return request.form['param1'] - return None - -@app.route('/unsafe') -def unsafe(): - first_name = request.args.get('name', '') - return make_response("Your name is " + first_name) - -@app.route('/safe') -def safe(): - first_name = request.args.get('name', '') - return make_response("Your name is " + escape(first_name)) - -@app.route('/hello/') -def hello(name): - return make_response("Your name is " + name) - -@app.route('/foo/') -def foo(subpath): - return make_response("The subpath is " + subpath) - -@app.route('/multiple/') # TODO: not recognized as route -@app.route('/multiple/foo/') # TODO: not recognized as route -@app.route('/multiple/bar/') -def multiple(foo=None, bar=None): - return make_response("foo={!r} bar={!r}".format(foo, bar)) - -@app.route('/complex/') -def complex(lang_code): - return make_response("lang_code {}".format(lang_code)) - -if __name__ == "__main__": - app.run(debug=True) diff --git a/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.expected b/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.expected deleted file mode 100644 index 959217e0acd..00000000000 --- a/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:8:12:8:31 | pyramid.routed.response | externally controlled string | -| test.py:17:12:17:41 | pyramid.routed.response | externally controlled string | -| test.py:25:12:25:43 | pyramid.routed.response | externally controlled string | diff --git a/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.ql b/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/pyramid/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/pyramid/HttpSources.expected b/python/ql/test/library-tests/web/pyramid/HttpSources.expected deleted file mode 100644 index 23f8ab8e3ab..00000000000 --- a/python/ql/test/library-tests/web/pyramid/HttpSources.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:7:10:7:16 | request | pyramid.request | -| test.py:15:11:15:17 | request | pyramid.request | -| test.py:24:11:24:17 | request | pyramid.request | diff --git a/python/ql/test/library-tests/web/pyramid/HttpSources.ql b/python/ql/test/library-tests/web/pyramid/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/pyramid/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/pyramid/Routing.expected b/python/ql/test/library-tests/web/pyramid/Routing.expected deleted file mode 100644 index 41e66136a68..00000000000 --- a/python/ql/test/library-tests/web/pyramid/Routing.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Predicate is_pyramid_view_function has been deprecated and may be removed in future (Routing.ql:5,7-31) -| test.py:7 | Function home | -| test.py:15 | Function greet | -| test.py:24 | Function stuff | diff --git a/python/ql/test/library-tests/web/pyramid/Routing.ql b/python/ql/test/library-tests/web/pyramid/Routing.ql deleted file mode 100644 index 4a442c1115e..00000000000 --- a/python/ql/test/library-tests/web/pyramid/Routing.ql +++ /dev/null @@ -1,6 +0,0 @@ -import python -import semmle.python.web.pyramid.View - -from Function func -where is_pyramid_view_function(func) -select func.getLocation().toString(), func.toString() diff --git a/python/ql/test/library-tests/web/pyramid/Taint.expected b/python/ql/test/library-tests/web/pyramid/Taint.expected deleted file mode 100644 index 94b8f844efb..00000000000 --- a/python/ql/test/library-tests/web/pyramid/Taint.expected +++ /dev/null @@ -1,11 +0,0 @@ -| test.py:7 | request | pyramid.request | -| test.py:15 | request | pyramid.request | -| test.py:16 | Attribute | {externally controlled string} | -| test.py:16 | Subscript | externally controlled string | -| test.py:16 | request | pyramid.request | -| test.py:17 | BinaryExpr | externally controlled string | -| test.py:17 | name | externally controlled string | -| test.py:24 | request | pyramid.request | -| test.py:25 | Attribute | externally controlled string | -| test.py:25 | Dict | {externally controlled string} | -| test.py:25 | request | pyramid.request | diff --git a/python/ql/test/library-tests/web/pyramid/Taint.ql b/python/ql/test/library-tests/web/pyramid/Taint.ql deleted file mode 100644 index d68b12079b8..00000000000 --- a/python/ql/test/library-tests/web/pyramid/Taint.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -where node.getLocation().getFile().getShortName() = "test.py" -select node.getLocation().toString(), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/pyramid/options b/python/ql/test/library-tests/web/pyramid/options deleted file mode 100644 index 1d132442a3b..00000000000 --- a/python/ql/test/library-tests/web/pyramid/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=2 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/pyramid/test.py b/python/ql/test/library-tests/web/pyramid/test.py deleted file mode 100644 index 9fad8a7ba00..00000000000 --- a/python/ql/test/library-tests/web/pyramid/test.py +++ /dev/null @@ -1,25 +0,0 @@ -from pyramid.view import view_config -from pyramid.response import Response - -@view_config( - route_name='home' -) -def home(request): - return Response('Welcome!') - - -@view_config( - route_name='greet', - request_method='POST' -) -def greet(request): - name = request.POST['arg'] - return Response('Welcome %s!' % name) - - -@view_config( - route_name='stuff', - renderer='json' -) -def stuff(request): - return {"err": 0, "body": request.body} diff --git a/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.expected b/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.expected deleted file mode 100644 index c4344d158b7..00000000000 --- a/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.expected +++ /dev/null @@ -1,3 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:72:26:72:58 | Taint sink | externally controlled string | -| test.py:73:31:73:54 | Taint sink | [externally controlled string] | diff --git a/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.ql b/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/stdlib/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/stdlib/HttpSources.expected b/python/ql/test/library-tests/web/stdlib/HttpSources.expected deleted file mode 100644 index e979c63fd84..00000000000 --- a/python/ql/test/library-tests/web/stdlib/HttpSources.expected +++ /dev/null @@ -1,35 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:18:13:18:16 | self | BaseHTTPRequestHandlerKind | -| test.py:20:13:20:16 | self | BaseHTTPRequestHandlerKind | -| test.py:22:13:22:16 | self | BaseHTTPRequestHandlerKind | -| test.py:24:13:24:16 | self | BaseHTTPRequestHandlerKind | -| test.py:25:13:25:16 | self | BaseHTTPRequestHandlerKind | -| test.py:26:13:26:16 | self | BaseHTTPRequestHandlerKind | -| test.py:27:13:27:16 | self | BaseHTTPRequestHandlerKind | -| test.py:28:13:28:16 | self | BaseHTTPRequestHandlerKind | -| test.py:29:13:29:16 | self | BaseHTTPRequestHandlerKind | -| test.py:30:13:30:16 | self | BaseHTTPRequestHandlerKind | -| test.py:31:13:31:16 | self | BaseHTTPRequestHandlerKind | -| test.py:32:13:32:16 | self | BaseHTTPRequestHandlerKind | -| test.py:33:17:33:20 | self | BaseHTTPRequestHandlerKind | -| test.py:34:19:34:22 | self | BaseHTTPRequestHandlerKind | -| test.py:36:13:36:16 | self | BaseHTTPRequestHandlerKind | -| test.py:37:13:37:16 | self | BaseHTTPRequestHandlerKind | -| test.py:40:16:44:9 | Attribute() | CgiFieldStorageFormKind | -| test.py:41:13:41:16 | self | BaseHTTPRequestHandlerKind | -| test.py:42:13:42:16 | self | BaseHTTPRequestHandlerKind | -| test.py:43:64:43:67 | self | BaseHTTPRequestHandlerKind | -| test.py:69:9:69:12 | self | BaseHTTPRequestHandlerKind | -| test.py:70:9:70:12 | self | BaseHTTPRequestHandlerKind | -| test.py:71:9:71:12 | self | BaseHTTPRequestHandlerKind | -| test.py:72:9:72:12 | self | BaseHTTPRequestHandlerKind | -| test.py:73:9:73:12 | self | BaseHTTPRequestHandlerKind | -| test.py:74:15:74:18 | self | BaseHTTPRequestHandlerKind | -| test.py:78:16:82:9 | Attribute() | CgiFieldStorageFormKind | -| test.py:79:13:79:16 | self | BaseHTTPRequestHandlerKind | -| test.py:80:13:80:16 | self | BaseHTTPRequestHandlerKind | -| test.py:81:64:81:67 | self | BaseHTTPRequestHandlerKind | -| test.py:85:13:85:16 | self | BaseHTTPRequestHandlerKind | -| test.py:86:13:86:16 | self | BaseHTTPRequestHandlerKind | -| test.py:96:9:96:12 | self | BaseHTTPRequestHandlerKind | -| test.py:97:9:97:12 | self | BaseHTTPRequestHandlerKind | diff --git a/python/ql/test/library-tests/web/stdlib/HttpSources.ql b/python/ql/test/library-tests/web/stdlib/HttpSources.ql deleted file mode 100644 index f4e9a1b48d3..00000000000 --- a/python/ql/test/library-tests/web/stdlib/HttpSources.ql +++ /dev/null @@ -1,9 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where - source.isSourceOf(kind) and - source.getLocation().getFile().getShortName() != "cgi.py" -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/stdlib/TestTaint.expected b/python/ql/test/library-tests/web/stdlib/TestTaint.expected deleted file mode 100644 index eba1bff195a..00000000000 --- a/python/ql/test/library-tests/web/stdlib/TestTaint.expected +++ /dev/null @@ -1,32 +0,0 @@ -| test.py:18 | ok | taint_sources | self | BaseHTTPRequestHandlerKind | -| test.py:20 | ok | taint_sources | Attribute | externally controlled string | -| test.py:22 | ok | taint_sources | Attribute | externally controlled string | -| test.py:24 | ok | taint_sources | Attribute | {externally controlled string} | -| test.py:25 | ok | taint_sources | Subscript | externally controlled string | -| test.py:26 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:27 | ok | taint_sources | Attribute() | [externally controlled string] | -| test.py:28 | fail | taint_sources | Attribute() | | -| test.py:29 | ok | taint_sources | Attribute() | [externally controlled string] | -| test.py:30 | fail | taint_sources | Attribute() | | -| test.py:31 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:32 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:33 | ok | taint_sources | str() | externally controlled string | -| test.py:34 | ok | taint_sources | bytes() | externally controlled string | -| test.py:36 | ok | taint_sources | Attribute | file[externally controlled string] | -| test.py:37 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:47 | ok | taint_sources | form | CgiFieldStorageFormKind | -| test.py:49 | ok | taint_sources | Subscript | CgiFieldStorageFieldKind | -| test.py:49 | ok | taint_sources | Subscript | [CgiFieldStorageFieldKind] | -| test.py:50 | ok | taint_sources | Attribute | externally controlled string | -| test.py:51 | ok | taint_sources | Attribute | file[externally controlled string] | -| test.py:52 | ok | taint_sources | Attribute | externally controlled string | -| test.py:53 | ok | taint_sources | Subscript | CgiFieldStorageFieldKind | -| test.py:54 | ok | taint_sources | Attribute | externally controlled string | -| test.py:55 | ok | taint_sources | Attribute | file[externally controlled string] | -| test.py:56 | ok | taint_sources | Attribute | externally controlled string | -| test.py:58 | ok | taint_sources | Attribute() | [externally controlled string] | -| test.py:58 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:59 | ok | taint_sources | Subscript | externally controlled string | -| test.py:61 | ok | taint_sources | Attribute() | externally controlled string | -| test.py:63 | ok | taint_sources | Attribute() | [externally controlled string] | -| test.py:64 | ok | taint_sources | Subscript | externally controlled string | diff --git a/python/ql/test/library-tests/web/stdlib/TestTaint.ql b/python/ql/test/library-tests/web/stdlib/TestTaint.ql deleted file mode 100644 index cd2b08ef235..00000000000 --- a/python/ql/test/library-tests/web/stdlib/TestTaint.ql +++ /dev/null @@ -1,32 +0,0 @@ -import python -import semmle.python.dataflow.TaintTracking -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from - Call call, Expr arg, boolean expected_taint, boolean has_taint, string test_res, - string taint_string -where - call.getLocation().getFile().getShortName() = "test.py" and - ( - call.getFunc().(Name).getId() = "ensure_tainted" and - expected_taint = true - or - call.getFunc().(Name).getId() = "ensure_not_tainted" and - expected_taint = false - ) and - arg = call.getAnArg() and - ( - not exists(TaintedNode tainted | tainted.getAstNode() = arg) and - taint_string = "" and - has_taint = false - or - exists(TaintedNode tainted | tainted.getAstNode() = arg | - taint_string = tainted.getTaintKind().toString() - ) and - has_taint = true - ) and - if expected_taint = has_taint then test_res = "ok " else test_res = "fail" -// if expected_taint = has_taint then test_res = "✓" else test_res = "✕" -select arg.getLocation().toString(), test_res, call.getScope().(Function).getName(), arg.toString(), - taint_string diff --git a/python/ql/test/library-tests/web/stdlib/test.py b/python/ql/test/library-tests/web/stdlib/test.py deleted file mode 100644 index 1c239f776bb..00000000000 --- a/python/ql/test/library-tests/web/stdlib/test.py +++ /dev/null @@ -1,108 +0,0 @@ -import sys -import os -import cgi - -if sys.version_info[0] == 2: - from BaseHTTPServer import BaseHTTPRequestHandler - from BaseHTTPServer import HTTPServer - -if sys.version_info[0] == 3: - from http.server import HTTPServer, BaseHTTPRequestHandler - - -class MyHandler(BaseHTTPRequestHandler): - - def taint_sources(self): - - ensure_tainted( - self, - - self.requestline, - - self.path, - - self.headers, - self.headers['Foo'], - self.headers.get('Foo'), - self.headers.get_all('Foo'), - self.headers.keys(), - self.headers.values(), - self.headers.items(), - self.headers.as_bytes(), - self.headers.as_string(), - str(self.headers), - bytes(self.headers), - - self.rfile, - self.rfile.read(), - ) - - form = cgi.FieldStorage( - self.rfile, - self.headers, - environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers.get('content-type')}, - ) - - ensure_tainted( - form, - - form['key'], - form['key'].value, - form['key'].file, - form['key'].filename, - form['key'][0], # will be a list, if multiple fields named "key" are provided - form['key'][0].value, - form['key'][0].file, - form['key'][0].filename, - - form.getvalue('key'), - form.getvalue('key')[0], # will be a list, if multiple fields named "key" are provided - - form.getfirst('key'), - - form.getlist('key'), - form.getlist('key')[0], - ) - - def do_GET(self): - # send_response will log a line to stderr - self.send_response(200) - self.send_header("Content-type", "text/plain; charset=utf-8") - self.end_headers() - self.wfile.write(b"Hello BaseHTTPRequestHandler\n") - self.wfile.writelines([b"1\n", b"2\n", b"3\n"]) - print(self.headers) - - - def do_POST(self): - form = cgi.FieldStorage( - self.rfile, - self.headers, - environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers.get('content-type')}, - ) - - if 'myfile' not in form: - self.send_response(422) - self.end_headers() - return - - field = form['myfile'] - - field.file.seek(0, os.SEEK_END) - filesize = field.file.tell() - - print("Uploaded {!r} with {} bytes".format(field.filename, filesize)) - - self.send_response(200) - self.end_headers() - - -if __name__ == "__main__": - server = HTTPServer(("127.0.0.1", 8080), MyHandler) - server.serve_forever() - - # Headers works case insensitvely, so self.headers['foo'] == self.headers['FOO'] - # curl localhost:8080 --header "Foo: 1" --header "foo: 2" - - # To test file submission through forms, use - # curl -F myfile=@ localhost:8080 diff --git a/python/ql/test/library-tests/web/tornado/Classes.expected b/python/ql/test/library-tests/web/tornado/Classes.expected deleted file mode 100644 index 693976a2480..00000000000 --- a/python/ql/test/library-tests/web/tornado/Classes.expected +++ /dev/null @@ -1,5 +0,0 @@ -WARNING: Predicate aTornadoRequestHandlerClass has been deprecated and may be removed in future (Classes.ql:6,13-40) -| test.py:4 | class Handler1 | -| test.py:8 | class Handler2 | -| test.py:14 | class Handler3 | -| test.py:23 | class DeepInheritance | diff --git a/python/ql/test/library-tests/web/tornado/Classes.ql b/python/ql/test/library-tests/web/tornado/Classes.ql deleted file mode 100644 index fda9b6eb00a..00000000000 --- a/python/ql/test/library-tests/web/tornado/Classes.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.TestUtils -import semmle.python.web.tornado.Tornado - -from ClassValue cls -where cls = aTornadoRequestHandlerClass() -select remove_library_prefix(cls.getScope().getLocation()), cls.toString() diff --git a/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.expected b/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.expected deleted file mode 100644 index aced656734c..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.expected +++ /dev/null @@ -1,2 +0,0 @@ -WARNING: Type HttpRedirectTaintSink has been deprecated and may be removed in future (HttpRedirectSinks.ql:5,6-27) -| test.py:20:23:20:25 | tornado.HttpRequestHandler.redirect | externally controlled string | diff --git a/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.ql b/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.ql deleted file mode 100644 index 157ef2d4430..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpRedirectSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRedirect -import semmle.python.security.strings.Untrusted - -from HttpRedirectTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/tornado/HttpResponseSinks.expected b/python/ql/test/library-tests/web/tornado/HttpResponseSinks.expected deleted file mode 100644 index 0681e121664..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpResponseSinks.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:6:20:6:43 | tornado.HttpRequestHandler.write | externally controlled string | -| test.py:12:20:12:23 | tornado.HttpRequestHandler.write | externally controlled string | -| test.py:26:20:26:48 | tornado.HttpRequestHandler.write | externally controlled string | diff --git a/python/ql/test/library-tests/web/tornado/HttpResponseSinks.ql b/python/ql/test/library-tests/web/tornado/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/tornado/HttpSources.expected b/python/ql/test/library-tests/web/tornado/HttpSources.expected deleted file mode 100644 index 7e882de7791..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpSources.expected +++ /dev/null @@ -1,5 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:6:20:6:43 | Attribute() | externally controlled string | -| test.py:10:16:10:40 | Attribute() | [externally controlled string] | -| test.py:17:15:17:26 | Attribute | tornado.request.HttpRequest | -| test.py:26:20:26:48 | Attribute() | externally controlled string | diff --git a/python/ql/test/library-tests/web/tornado/HttpSources.ql b/python/ql/test/library-tests/web/tornado/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/tornado/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/tornado/Taint.expected b/python/ql/test/library-tests/web/tornado/Taint.expected deleted file mode 100644 index 6028c194b94..00000000000 --- a/python/ql/test/library-tests/web/tornado/Taint.expected +++ /dev/null @@ -1,12 +0,0 @@ -| test.py:6 | Attribute() | externally controlled string | -| test.py:10 | Attribute() | [externally controlled string] | -| test.py:11 | Subscript | externally controlled string | -| test.py:11 | args | [externally controlled string] | -| test.py:12 | name | externally controlled string | -| test.py:17 | Attribute | tornado.request.HttpRequest | -| test.py:18 | Attribute | {externally controlled string} | -| test.py:18 | req | tornado.request.HttpRequest | -| test.py:19 | Subscript | externally controlled string | -| test.py:19 | h | {externally controlled string} | -| test.py:20 | url | externally controlled string | -| test.py:26 | Attribute() | externally controlled string | diff --git a/python/ql/test/library-tests/web/tornado/Taint.ql b/python/ql/test/library-tests/web/tornado/Taint.ql deleted file mode 100644 index d4fc34b643c..00000000000 --- a/python/ql/test/library-tests/web/tornado/Taint.ql +++ /dev/null @@ -1,10 +0,0 @@ -import python -import semmle.python.TestUtils -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -// Add this restriction to keep Python2 and 3 results the same. -where not exists(node.getContext().getCaller()) -select remove_library_prefix(node.getLocation()), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/tornado/options b/python/ql/test/library-tests/web/tornado/options deleted file mode 100644 index 1d132442a3b..00000000000 --- a/python/ql/test/library-tests/web/tornado/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=2 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/tornado/test.py b/python/ql/test/library-tests/web/tornado/test.py deleted file mode 100644 index a5a467a81ab..00000000000 --- a/python/ql/test/library-tests/web/tornado/test.py +++ /dev/null @@ -1,26 +0,0 @@ - -import tornado.web - -class Handler1(tornado.web.RequestHandler): - def get(self): - self.write(self.get_argument("xss")) - -class Handler2(tornado.web.RequestHandler): - def get(self): - args = self.get_body_arguments() - name = args[0] - self.write(name) - -class Handler3(tornado.web.RequestHandler): - - def get(self): - req = self.request - h = req.headers - url = h["url"] - self.redirect(url) - - -class DeepInheritance(Handler3): - - def get(self): - self.write(self.get_argument("also_xss")) diff --git a/python/ql/test/library-tests/web/turbogears/Controller.expected b/python/ql/test/library-tests/web/turbogears/Controller.expected deleted file mode 100644 index 1f47639b5a5..00000000000 --- a/python/ql/test/library-tests/web/turbogears/Controller.expected +++ /dev/null @@ -1,6 +0,0 @@ -WARNING: Type TurboGearsControllerMethod has been deprecated and may be removed in future (Controller.ql:4,6-32) -| test.py:7:5:7:32 | Function onerror | -| test.py:13:5:13:50 | Function ok_validated | -| test.py:18:5:18:57 | Function partially_validated | -| test.py:22:5:22:51 | Function not_validated | -| test.py:26:5:26:28 | Function with_template | diff --git a/python/ql/test/library-tests/web/turbogears/Controller.ql b/python/ql/test/library-tests/web/turbogears/Controller.ql deleted file mode 100644 index 850e56ef453..00000000000 --- a/python/ql/test/library-tests/web/turbogears/Controller.ql +++ /dev/null @@ -1,5 +0,0 @@ -import python -import semmle.python.web.turbogears.TurboGears - -from TurboGearsControllerMethod m -select m diff --git a/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.expected b/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.expected deleted file mode 100644 index f2c1d0ee324..00000000000 --- a/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.expected +++ /dev/null @@ -1,6 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:8:16:8:69 | TurboGears ControllerMethodReturnValue | externally controlled string | -| test.py:14:16:14:50 | TurboGears ControllerMethodReturnValue | externally controlled string | -| test.py:19:16:19:50 | TurboGears ControllerMethodReturnValue | externally controlled string | -| test.py:23:16:23:50 | TurboGears ControllerMethodReturnValue | externally controlled string | -| test.py:27:16:27:38 | TurboGears ControllerMethodTemplatedReturnValue | {externally controlled string} | diff --git a/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.ql b/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/turbogears/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/turbogears/HttpSources.expected b/python/ql/test/library-tests/web/turbogears/HttpSources.expected deleted file mode 100644 index 0d0dc0f72fe..00000000000 --- a/python/ql/test/library-tests/web/turbogears/HttpSources.expected +++ /dev/null @@ -1,4 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:18:43:18:43 | b | externally controlled string | -| test.py:22:29:22:29 | a | externally controlled string | -| test.py:22:37:22:37 | b | externally controlled string | diff --git a/python/ql/test/library-tests/web/turbogears/HttpSources.ql b/python/ql/test/library-tests/web/turbogears/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/turbogears/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/turbogears/Taint.expected b/python/ql/test/library-tests/web/turbogears/Taint.expected deleted file mode 100644 index 45b84df72c2..00000000000 --- a/python/ql/test/library-tests/web/turbogears/Taint.expected +++ /dev/null @@ -1,12 +0,0 @@ -| test.py:18 | b | externally controlled string | -| test.py:19 | BinaryExpr | [externally controlled string] | -| test.py:19 | BinaryExpr | externally controlled string | -| test.py:19 | Tuple | [externally controlled string] | -| test.py:19 | b | externally controlled string | -| test.py:22 | a | externally controlled string | -| test.py:22 | b | externally controlled string | -| test.py:23 | BinaryExpr | [externally controlled string] | -| test.py:23 | BinaryExpr | externally controlled string | -| test.py:23 | Tuple | [externally controlled string] | -| test.py:23 | a | externally controlled string | -| test.py:23 | b | externally controlled string | diff --git a/python/ql/test/library-tests/web/turbogears/Taint.ql b/python/ql/test/library-tests/web/turbogears/Taint.ql deleted file mode 100644 index 09972af5f98..00000000000 --- a/python/ql/test/library-tests/web/turbogears/Taint.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -select node.getLocation().toString(), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/turbogears/options b/python/ql/test/library-tests/web/turbogears/options deleted file mode 100644 index 7fb713d5924..00000000000 --- a/python/ql/test/library-tests/web/turbogears/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=3 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/turbogears/test.py b/python/ql/test/library-tests/web/turbogears/test.py deleted file mode 100644 index bae3a460f43..00000000000 --- a/python/ql/test/library-tests/web/turbogears/test.py +++ /dev/null @@ -1,27 +0,0 @@ - -from tg import request, validate, expose, TGController -from formencode import validators - -class RootController(TGController): - @expose() - def onerror(self, **kwargs): - return 'An error occurred: %s' % request.validation['errors'] - - @expose() - @validate({"a": validators.Int(not_empty=True), "b": validators.Email}, - error_handler=onerror) - def ok_validated(self, a=None, b=None, *args): - return 'Values: %s, %s, %s' % (a, b, args) - - @expose() - @validate({"a": validators.Int(not_empty=True)}) - def partially_validated(self, a=None, b=None, *args): - return 'Values: %s, %s, %s' % (a, b, args) - - @expose() - def not_validated(self, a=None, b=None, *args): - return 'Values: %s, %s, %s' % (a, b, args) - - @expose("") - def with_template(self): - return {'template_var': 'foo'} diff --git a/python/ql/test/library-tests/web/twisted/Classes.expected b/python/ql/test/library-tests/web/twisted/Classes.expected deleted file mode 100644 index b818907e98f..00000000000 --- a/python/ql/test/library-tests/web/twisted/Classes.expected +++ /dev/null @@ -1,6 +0,0 @@ -WARNING: Predicate aTwistedRequestHandlerClass has been deprecated and may be removed in future (Classes.ql:6,13-40) -| class MyRequestHandler1 | test.py:3 | -| class MyRequestHandler2 | test.py:23 | -| class MyRequestHandler3 | test.py:27 | -| class MyRequestHandler4 | test.py:38 | -| class MyRequestHandler5 | test.py:42 | diff --git a/python/ql/test/library-tests/web/twisted/Classes.ql b/python/ql/test/library-tests/web/twisted/Classes.ql deleted file mode 100644 index ccc3618b61e..00000000000 --- a/python/ql/test/library-tests/web/twisted/Classes.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.TestUtils -import semmle.python.web.twisted.Twisted - -from ClassValue cls -where cls = aTwistedRequestHandlerClass() -select cls.toString(), remove_library_prefix(cls.getScope().getLocation()) diff --git a/python/ql/test/library-tests/web/twisted/HttpResponseSinks.expected b/python/ql/test/library-tests/web/twisted/HttpResponseSinks.expected deleted file mode 100644 index 763655ffe37..00000000000 --- a/python/ql/test/library-tests/web/twisted/HttpResponseSinks.expected +++ /dev/null @@ -1,11 +0,0 @@ -WARNING: Type HttpResponseTaintSink has been deprecated and may be removed in future (HttpResponseSinks.ql:5,6-27) -| test.py:7:16:7:23 | Twisted response | externally controlled string | -| test.py:14:16:14:23 | Twisted response | externally controlled string | -| test.py:21:16:21:23 | Twisted response | externally controlled string | -| test.py:36:16:36:37 | Twisted response | externally controlled string | -| test.py:40:23:40:30 | Twisted request setter | externally controlled string | -| test.py:44:27:44:31 | Twisted request setter | externally controlled string | -| test.py:44:34:44:38 | Twisted request setter | externally controlled string | -| test.py:45:27:45:31 | Twisted request setter | externally controlled string | -| test.py:45:34:45:40 | Twisted request setter | externally controlled string | -| test.py:46:16:46:37 | Twisted response | externally controlled string | diff --git a/python/ql/test/library-tests/web/twisted/HttpResponseSinks.ql b/python/ql/test/library-tests/web/twisted/HttpResponseSinks.ql deleted file mode 100644 index e62ec486da6..00000000000 --- a/python/ql/test/library-tests/web/twisted/HttpResponseSinks.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from HttpResponseTaintSink sink, TaintKind kind -where sink.sinks(kind) -select sink, kind diff --git a/python/ql/test/library-tests/web/twisted/HttpSources.expected b/python/ql/test/library-tests/web/twisted/HttpSources.expected deleted file mode 100644 index 4e7cb4c7abb..00000000000 --- a/python/ql/test/library-tests/web/twisted/HttpSources.expected +++ /dev/null @@ -1,9 +0,0 @@ -WARNING: Type HttpRequestTaintSource has been deprecated and may be removed in future (HttpSources.ql:5,6-28) -| test.py:4:22:4:28 | request | twisted.request.http.Request | -| test.py:9:26:9:32 | request | twisted.request.http.Request | -| test.py:16:27:16:33 | request | twisted.request.http.Request | -| test.py:24:24:24:30 | request | twisted.request.http.Request | -| test.py:28:22:28:30 | myrequest | twisted.request.http.Request | -| test.py:31:27:31:37 | postrequest | twisted.request.http.Request | -| test.py:39:22:39:28 | request | twisted.request.http.Request | -| test.py:43:22:43:28 | request | twisted.request.http.Request | diff --git a/python/ql/test/library-tests/web/twisted/HttpSources.ql b/python/ql/test/library-tests/web/twisted/HttpSources.ql deleted file mode 100644 index 6fa1a7d2a6b..00000000000 --- a/python/ql/test/library-tests/web/twisted/HttpSources.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.web.HttpRequest -import semmle.python.security.strings.Untrusted - -from HttpRequestTaintSource source, TaintKind kind -where source.isSourceOf(kind) -select source.(ControlFlowNode).getNode(), kind diff --git a/python/ql/test/library-tests/web/twisted/Methods.expected b/python/ql/test/library-tests/web/twisted/Methods.expected deleted file mode 100644 index 6578ef88da9..00000000000 --- a/python/ql/test/library-tests/web/twisted/Methods.expected +++ /dev/null @@ -1,9 +0,0 @@ -WARNING: Predicate getTwistedRequestHandlerMethod has been deprecated and may be removed in future (Methods.ql:6,14-44) -| myrender | Function MyRequestHandler2.myrender | test.py:24 | -| render | Function MyRequestHandler1.render | test.py:4 | -| render | Function MyRequestHandler3.render | test.py:28 | -| render | Function MyRequestHandler4.render | test.py:39 | -| render | Function MyRequestHandler5.render | test.py:43 | -| render_GET | Function MyRequestHandler1.render_GET | test.py:9 | -| render_POST | Function MyRequestHandler1.render_POST | test.py:16 | -| render_POST | Function MyRequestHandler3.render_POST | test.py:31 | diff --git a/python/ql/test/library-tests/web/twisted/Methods.ql b/python/ql/test/library-tests/web/twisted/Methods.ql deleted file mode 100644 index f997b7deef3..00000000000 --- a/python/ql/test/library-tests/web/twisted/Methods.ql +++ /dev/null @@ -1,7 +0,0 @@ -import python -import semmle.python.TestUtils -import semmle.python.web.twisted.Twisted - -from FunctionValue func, string name -where func = getTwistedRequestHandlerMethod(name) -select name, func.toString(), remove_library_prefix(func.getScope().getLocation()) diff --git a/python/ql/test/library-tests/web/twisted/Taint.expected b/python/ql/test/library-tests/web/twisted/Taint.expected deleted file mode 100644 index 1c793c973bd..00000000000 --- a/python/ql/test/library-tests/web/twisted/Taint.expected +++ /dev/null @@ -1,41 +0,0 @@ -| test.py:4 | request | twisted.request.http.Request | -| test.py:5 | Attribute | externally controlled string | -| test.py:5 | request | twisted.request.http.Request | -| test.py:6 | request | twisted.request.http.Request | -| test.py:9 | request | twisted.request.http.Request | -| test.py:10 | request | twisted.request.http.Request | -| test.py:11 | Attribute | externally controlled string | -| test.py:11 | x | twisted.request.http.Request | -| test.py:12 | request | twisted.request.http.Request | -| test.py:13 | request | twisted.request.http.Request | -| test.py:16 | request | twisted.request.http.Request | -| test.py:17 | Attribute | {[externally controlled string]} | -| test.py:17 | request | twisted.request.http.Request | -| test.py:18 | Attribute | {[externally controlled string]} | -| test.py:18 | Attribute() | [externally controlled string] | -| test.py:18 | request | twisted.request.http.Request | -| test.py:19 | Subscript | externally controlled string | -| test.py:19 | foo | [externally controlled string] | -| test.py:20 | quux | externally controlled string | -| test.py:24 | request | twisted.request.http.Request | -| test.py:25 | request | twisted.request.http.Request | -| test.py:28 | myrequest | twisted.request.http.Request | -| test.py:29 | myrequest | twisted.request.http.Request | -| test.py:31 | postrequest | twisted.request.http.Request | -| test.py:32 | Attribute() | externally controlled string | -| test.py:32 | postrequest | twisted.request.http.Request | -| test.py:33 | Attribute() | externally controlled string | -| test.py:33 | postrequest | twisted.request.http.Request | -| test.py:34 | Attribute() | externally controlled string | -| test.py:34 | postrequest | twisted.request.http.Request | -| test.py:35 | Attribute() | externally controlled string | -| test.py:35 | postrequest | twisted.request.http.Request | -| test.py:36 | w | externally controlled string | -| test.py:36 | x | externally controlled string | -| test.py:36 | y | externally controlled string | -| test.py:36 | z | externally controlled string | -| test.py:39 | request | twisted.request.http.Request | -| test.py:40 | request | twisted.request.http.Request | -| test.py:43 | request | twisted.request.http.Request | -| test.py:44 | request | twisted.request.http.Request | -| test.py:45 | request | twisted.request.http.Request | diff --git a/python/ql/test/library-tests/web/twisted/Taint.ql b/python/ql/test/library-tests/web/twisted/Taint.ql deleted file mode 100644 index e92616b6b29..00000000000 --- a/python/ql/test/library-tests/web/twisted/Taint.ql +++ /dev/null @@ -1,8 +0,0 @@ -import python -import semmle.python.TestUtils -import semmle.python.web.HttpRequest -import semmle.python.web.HttpResponse -import semmle.python.security.strings.Untrusted - -from TaintedNode node -select remove_library_prefix(node.getLocation()), node.getAstNode().toString(), node.getTaintKind() diff --git a/python/ql/test/library-tests/web/twisted/options b/python/ql/test/library-tests/web/twisted/options deleted file mode 100644 index 4084b102b55..00000000000 --- a/python/ql/test/library-tests/web/twisted/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --max-import-depth=1 -p ../../../query-tests/Security/lib/ diff --git a/python/ql/test/library-tests/web/twisted/test.py b/python/ql/test/library-tests/web/twisted/test.py deleted file mode 100644 index f6691b84d95..00000000000 --- a/python/ql/test/library-tests/web/twisted/test.py +++ /dev/null @@ -1,51 +0,0 @@ -from twisted.web import resource - -class MyRequestHandler1(resource.Resource): - def render(self, request): - foo(request.uri) - response = do_stuff_with(request) - return response - - def render_GET(self, request): - x = request - bar(x.uri) - do_stuff_with(request) - response = do_stuff_with(request) - return response - - def render_POST(self, request): - baz(request.args) - foo = request.args.get("baz") - quux = foo[5] - response = do_stuff_with(quux) - return response - -class MyRequestHandler2(resource.Resource): - def myrender(self, request): - do_stuff_with(request) - -class MyRequestHandler3(resource.Resource): - def render(self, myrequest): - do_stuff_with(myrequest) - - def render_POST(self, postrequest): - x = postrequest.getHeader("someheader") - y = postrequest.getCookie("somecookie") - z = postrequest.getUser() - w = postrequest.getPassword() - return do_stuff_with(x,y,z,w) - -class MyRequestHandler4(resource.Resource): - def render(self, request): - request.write("Foobar") - -class MyRequestHandler5(resource.Resource): - def render(self, request): - request.setHeader("foo", "bar") - request.addCookie("key", "value") - return "This is my response." - -class NotATwistedRequestHandler(object): - def render(self, request): - return do_stuff_with(request) - diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected index e69de29bb2d..48de9172b36 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql index 3e4853b7b20..97a01fd4b5f 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.ql @@ -4,17 +4,15 @@ import TestUtilities.InlineExpectationsTest import semmle.python.functions.ModificationOfParameterWithDefault private import semmle.python.dataflow.new.internal.PrintNode -class ModificationOfParameterWithDefaultTest extends InlineExpectationsTest { - ModificationOfParameterWithDefaultTest() { this = "ModificationOfParameterWithDefaultTest" } +module ModificationOfParameterWithDefaultTest implements TestSig { + string getARelevantTag() { result = "modification" } - override string getARelevantTag() { result = "modification" } - - predicate relevant_node(DataFlow::Node sink) { + private predicate relevant_node(DataFlow::Node sink) { exists(ModificationOfParameterWithDefault::Configuration cfg | cfg.hasFlowTo(sink)) } - override predicate hasActualResult(Location location, string element, string tag, string value) { - exists(DataFlow::Node n | this.relevant_node(n) | + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node n | relevant_node(n) | n.getLocation() = location and tag = "modification" and value = prettyNode(n) and @@ -22,3 +20,5 @@ class ModificationOfParameterWithDefaultTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected b/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected index f9a03ca8d5e..14048735594 100644 --- a/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected +++ b/python/ql/test/query-tests/Security/CWE-020-ExternalAPIs/UntrustedDataToExternalAPI.expected @@ -6,40 +6,50 @@ edges | test.py:5:26:5:32 | GSSA Variable request | test.py:42:12:42:18 | ControlFlowNode for request | | test.py:5:26:5:32 | GSSA Variable request | test.py:54:12:54:18 | ControlFlowNode for request | | test.py:13:16:13:22 | ControlFlowNode for request | test.py:13:16:13:27 | ControlFlowNode for Attribute | -| test.py:13:16:13:27 | ControlFlowNode for Attribute | test.py:15:36:15:39 | ControlFlowNode for data | +| test.py:13:16:13:27 | ControlFlowNode for Attribute | test.py:13:16:13:39 | ControlFlowNode for Attribute() | +| test.py:13:16:13:39 | ControlFlowNode for Attribute() | test.py:15:36:15:39 | ControlFlowNode for data | | test.py:23:16:23:22 | ControlFlowNode for request | test.py:23:16:23:27 | ControlFlowNode for Attribute | -| test.py:23:16:23:27 | ControlFlowNode for Attribute | test.py:25:44:25:47 | ControlFlowNode for data | +| test.py:23:16:23:27 | ControlFlowNode for Attribute | test.py:23:16:23:39 | ControlFlowNode for Attribute() | +| test.py:23:16:23:39 | ControlFlowNode for Attribute() | test.py:25:44:25:47 | ControlFlowNode for data | | test.py:34:12:34:18 | ControlFlowNode for request | test.py:34:12:34:23 | ControlFlowNode for Attribute | -| test.py:34:12:34:23 | ControlFlowNode for Attribute | test.py:35:10:35:13 | ControlFlowNode for data | -| test.py:34:12:34:23 | ControlFlowNode for Attribute | test.py:36:13:36:16 | ControlFlowNode for data | +| test.py:34:12:34:23 | ControlFlowNode for Attribute | test.py:34:12:34:35 | ControlFlowNode for Attribute() | +| test.py:34:12:34:35 | ControlFlowNode for Attribute() | test.py:35:10:35:13 | ControlFlowNode for data | +| test.py:34:12:34:35 | ControlFlowNode for Attribute() | test.py:36:13:36:16 | ControlFlowNode for data | | test.py:42:12:42:18 | ControlFlowNode for request | test.py:42:12:42:23 | ControlFlowNode for Attribute | -| test.py:42:12:42:23 | ControlFlowNode for Attribute | test.py:43:22:43:25 | ControlFlowNode for data | -| test.py:42:12:42:23 | ControlFlowNode for Attribute | test.py:44:25:44:28 | ControlFlowNode for data | +| test.py:42:12:42:23 | ControlFlowNode for Attribute | test.py:42:12:42:35 | ControlFlowNode for Attribute() | +| test.py:42:12:42:35 | ControlFlowNode for Attribute() | test.py:43:22:43:25 | ControlFlowNode for data | +| test.py:42:12:42:35 | ControlFlowNode for Attribute() | test.py:44:25:44:28 | ControlFlowNode for data | | test.py:47:17:47:19 | ControlFlowNode for arg | test.py:50:32:50:34 | ControlFlowNode for arg | | test.py:54:12:54:18 | ControlFlowNode for request | test.py:54:12:54:23 | ControlFlowNode for Attribute | -| test.py:54:12:54:23 | ControlFlowNode for Attribute | test.py:55:17:55:20 | ControlFlowNode for data | +| test.py:54:12:54:23 | ControlFlowNode for Attribute | test.py:54:12:54:35 | ControlFlowNode for Attribute() | +| test.py:54:12:54:35 | ControlFlowNode for Attribute() | test.py:55:17:55:20 | ControlFlowNode for data | | test.py:55:17:55:20 | ControlFlowNode for data | test.py:47:17:47:19 | ControlFlowNode for arg | nodes | test.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:5:26:5:32 | GSSA Variable request | semmle.label | GSSA Variable request | | test.py:13:16:13:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:13:16:13:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:13:16:13:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:15:36:15:39 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:23:16:23:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:23:16:23:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:23:16:23:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:25:44:25:47 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:34:12:34:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:34:12:34:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:34:12:34:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:35:10:35:13 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:36:13:36:16 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:42:12:42:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:42:12:42:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:42:12:42:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:43:22:43:25 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:44:25:44:28 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | | test.py:47:17:47:19 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:50:32:50:34 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:54:12:54:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:54:12:54:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:54:12:54:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:55:17:55:20 | ControlFlowNode for data | semmle.label | ControlFlowNode for data | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected index 3875da4e143..04431311999 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected @@ -1,2 +1,3 @@ missingAnnotationOnSink failures +testFailures diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 58bdb917690..f907f96930b 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -2,7 +2,8 @@ edges | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | GSSA Variable request | | flask_path_injection.py:1:26:1:32 | GSSA Variable request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | -| flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | +| flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | +| flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:3:26:3:32 | GSSA Variable request | | path_injection.py:3:26:3:32 | GSSA Variable request | path_injection.py:12:16:12:22 | ControlFlowNode for request | | path_injection.py:3:26:3:32 | GSSA Variable request | path_injection.py:19:16:19:22 | ControlFlowNode for request | @@ -16,42 +17,54 @@ edges | path_injection.py:3:26:3:32 | GSSA Variable request | path_injection.py:138:16:138:22 | ControlFlowNode for request | | path_injection.py:3:26:3:32 | GSSA Variable request | path_injection.py:149:16:149:22 | ControlFlowNode for request | | path_injection.py:12:16:12:22 | ControlFlowNode for request | path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | -| path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | +| path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | +| path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | | path_injection.py:19:16:19:22 | ControlFlowNode for request | path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | -| path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | +| path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | +| path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | | path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | path_injection.py:21:14:21:18 | ControlFlowNode for npath | | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | | path_injection.py:27:16:27:22 | ControlFlowNode for request | path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | -| path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | +| path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | +| path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | | path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | path_injection.py:31:14:31:18 | ControlFlowNode for npath | | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | | path_injection.py:46:16:46:22 | ControlFlowNode for request | path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | -| path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | +| path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | +| path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | | path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | path_injection.py:48:14:48:18 | ControlFlowNode for npath | | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | | path_injection.py:63:16:63:22 | ControlFlowNode for request | path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | -| path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | +| path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | +| path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | | path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | path_injection.py:65:14:65:18 | ControlFlowNode for npath | | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | | path_injection.py:84:16:84:22 | ControlFlowNode for request | path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | -| path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | +| path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | +| path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:94:14:94:17 | ControlFlowNode for path | | path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:102:14:102:17 | ControlFlowNode for path | | path_injection.py:107:16:107:22 | ControlFlowNode for request | path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | -| path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | path_injection.py:113:14:113:17 | ControlFlowNode for path | +| path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | +| path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | path_injection.py:113:14:113:17 | ControlFlowNode for path | | path_injection.py:118:16:118:22 | ControlFlowNode for request | path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | -| path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | path_injection.py:124:14:124:17 | ControlFlowNode for path | +| path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | +| path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | path_injection.py:124:14:124:17 | ControlFlowNode for path | | path_injection.py:129:16:129:22 | ControlFlowNode for request | path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | -| path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | +| path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | +| path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | | path_injection.py:138:16:138:22 | ControlFlowNode for request | path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | -| path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | path_injection.py:142:14:142:17 | ControlFlowNode for path | +| path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | +| path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | path_injection.py:142:14:142:17 | ControlFlowNode for path | | path_injection.py:149:16:149:22 | ControlFlowNode for request | path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | -| path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | path_injection.py:152:18:152:21 | ControlFlowNode for path | +| path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | +| path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | path_injection.py:152:18:152:21 | ControlFlowNode for path | | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:3:26:3:32 | GSSA Variable request | | pathlib_use.py:3:26:3:32 | GSSA Variable request | pathlib_use.py:12:16:12:22 | ControlFlowNode for request | | pathlib_use.py:12:16:12:22 | ControlFlowNode for request | pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | -| pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | -| pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | +| pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | +| pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | +| pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:3:26:3:32 | GSSA Variable request | | test.py:3:26:3:32 | GSSA Variable request | test.py:9:12:9:18 | ControlFlowNode for request | | test.py:9:12:9:18 | ControlFlowNode for request | test.py:9:12:9:23 | ControlFlowNode for Attribute | @@ -77,34 +90,41 @@ nodes | flask_path_injection.py:1:26:1:32 | GSSA Variable request | semmle.label | GSSA Variable request | | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_path_injection.py:19:15:19:26 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| flask_path_injection.py:19:15:19:45 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | semmle.label | ControlFlowNode for dirname | | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | path_injection.py:3:26:3:32 | GSSA Variable request | semmle.label | GSSA Variable request | | path_injection.py:12:16:12:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:12:16:12:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:12:16:12:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:19:16:19:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:19:16:19:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:19:16:19:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:20:13:20:64 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:20:30:20:63 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:21:14:21:18 | ControlFlowNode for npath | semmle.label | ControlFlowNode for npath | | path_injection.py:27:16:27:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:27:16:27:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:27:16:27:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:28:13:28:64 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:28:30:28:63 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:31:14:31:18 | ControlFlowNode for npath | semmle.label | ControlFlowNode for npath | | path_injection.py:46:16:46:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:46:16:46:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:46:16:46:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:47:13:47:64 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:47:30:47:63 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:48:14:48:18 | ControlFlowNode for npath | semmle.label | ControlFlowNode for npath | | path_injection.py:63:16:63:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:63:16:63:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:63:16:63:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:64:13:64:63 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:64:29:64:62 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:65:14:65:18 | ControlFlowNode for npath | semmle.label | ControlFlowNode for npath | | path_injection.py:84:16:84:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:84:16:84:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:84:16:84:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | semmle.label | ControlFlowNode for possibly_unsafe_path | | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | semmle.label | ControlFlowNode for foo_id | | path_injection.py:94:14:94:17 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | @@ -112,23 +132,29 @@ nodes | path_injection.py:102:14:102:17 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | path_injection.py:107:16:107:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:107:16:107:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:107:16:107:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:113:14:113:17 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | path_injection.py:118:16:118:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:118:16:118:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:118:16:118:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:124:14:124:17 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | path_injection.py:129:16:129:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:129:16:129:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:129:16:129:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | semmle.label | ControlFlowNode for sanitized | | path_injection.py:138:16:138:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:138:16:138:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:138:16:138:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:142:14:142:17 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | path_injection.py:149:16:149:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | path_injection.py:149:16:149:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| path_injection.py:149:16:149:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | path_injection.py:152:18:152:21 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | pathlib_use.py:3:26:3:32 | GSSA Variable request | semmle.label | GSSA Variable request | | pathlib_use.py:12:16:12:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | pathlib_use.py:12:16:12:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pathlib_use.py:12:16:12:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | semmle.label | ControlFlowNode for p | | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | semmle.label | ControlFlowNode for p2 | | test.py:3:26:3:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | diff --git a/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected b/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected index aa6baf79588..2cf670a65e5 100644 --- a/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-078-CommandInjection-py2/CommandInjection.expected @@ -2,20 +2,22 @@ edges | command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | command_injection.py:5:26:5:32 | GSSA Variable request | | command_injection.py:5:26:5:32 | GSSA Variable request | command_injection.py:18:13:18:19 | ControlFlowNode for request | | command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:19:15:19:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:20:15:20:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:21:15:21:27 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:23:20:23:32 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:25:19:25:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:26:19:26:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:27:19:27:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:28:19:28:31 | ControlFlowNode for BinaryExpr | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:29:19:29:31 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:19:15:19:27 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:20:15:20:27 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:21:15:21:27 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:23:20:23:32 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:25:19:25:31 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:26:19:26:31 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:27:19:27:31 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:28:19:28:31 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:29:19:29:31 | ControlFlowNode for BinaryExpr | nodes | command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | command_injection.py:5:26:5:32 | GSSA Variable request | semmle.label | GSSA Variable request | | command_injection.py:18:13:18:19 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:19:15:19:27 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:20:15:20:27 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:21:15:21:27 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | diff --git a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected index 7a0c72e07d6..db33e40d9d8 100644 --- a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/CommandInjection.expected @@ -9,47 +9,61 @@ edges | command_injection.py:5:26:5:32 | GSSA Variable request | command_injection.py:71:12:71:18 | ControlFlowNode for request | | command_injection.py:5:26:5:32 | GSSA Variable request | command_injection.py:78:12:78:18 | ControlFlowNode for request | | command_injection.py:11:13:11:19 | ControlFlowNode for request | command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | -| command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | command_injection.py:13:15:13:27 | ControlFlowNode for BinaryExpr | +| command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | +| command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | command_injection.py:13:15:13:27 | ControlFlowNode for BinaryExpr | | command_injection.py:18:13:18:19 | ControlFlowNode for request | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | -| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:20:22:20:34 | ControlFlowNode for BinaryExpr | +| command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | command_injection.py:20:22:20:34 | ControlFlowNode for BinaryExpr | | command_injection.py:25:11:25:17 | ControlFlowNode for request | command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | -| command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | command_injection.py:26:23:26:25 | ControlFlowNode for cmd | +| command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | +| command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | command_injection.py:26:23:26:25 | ControlFlowNode for cmd | | command_injection.py:31:13:31:19 | ControlFlowNode for request | command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | -| command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | command_injection.py:33:14:33:26 | ControlFlowNode for BinaryExpr | +| command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | +| command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | command_injection.py:33:14:33:26 | ControlFlowNode for BinaryExpr | | command_injection.py:38:15:38:21 | ControlFlowNode for request | command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | -| command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | command_injection.py:41:15:41:21 | ControlFlowNode for command | -| command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | command_injection.py:42:15:42:21 | ControlFlowNode for command | +| command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | +| command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | command_injection.py:41:15:41:21 | ControlFlowNode for command | +| command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | command_injection.py:42:15:42:21 | ControlFlowNode for command | | command_injection.py:54:15:54:21 | ControlFlowNode for request | command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:55:15:55:21 | ControlFlowNode for command | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:56:14:56:20 | ControlFlowNode for command | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:57:21:57:27 | ControlFlowNode for command | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:58:27:58:33 | ControlFlowNode for command | -| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:59:20:59:26 | ControlFlowNode for command | +| command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:55:15:55:21 | ControlFlowNode for command | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:56:14:56:20 | ControlFlowNode for command | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:57:21:57:27 | ControlFlowNode for command | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:58:27:58:33 | ControlFlowNode for command | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | command_injection.py:59:20:59:26 | ControlFlowNode for command | | command_injection.py:71:12:71:18 | ControlFlowNode for request | command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | -| command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | command_injection.py:73:19:73:30 | ControlFlowNode for BinaryExpr | +| command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | +| command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | command_injection.py:73:19:73:30 | ControlFlowNode for BinaryExpr | | command_injection.py:78:12:78:18 | ControlFlowNode for request | command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | -| command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | command_injection.py:80:19:80:30 | ControlFlowNode for BinaryExpr | +| command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | +| command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | command_injection.py:80:19:80:30 | ControlFlowNode for BinaryExpr | nodes | command_injection.py:5:26:5:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | command_injection.py:5:26:5:32 | GSSA Variable request | semmle.label | GSSA Variable request | | command_injection.py:11:13:11:19 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:11:13:11:24 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:11:13:11:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:13:15:13:27 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:18:13:18:19 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:18:13:18:24 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:18:13:18:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:20:22:20:34 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:25:11:25:17 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:25:11:25:22 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:25:11:25:37 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:26:23:26:25 | ControlFlowNode for cmd | semmle.label | ControlFlowNode for cmd | | command_injection.py:31:13:31:19 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:31:13:31:24 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:31:13:31:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:33:14:33:26 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:38:15:38:21 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:38:15:38:26 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:38:15:38:45 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:41:15:41:21 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | | command_injection.py:42:15:42:21 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | | command_injection.py:54:15:54:21 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:54:15:54:26 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:54:15:54:45 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:55:15:55:21 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | | command_injection.py:56:14:56:20 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | | command_injection.py:57:21:57:27 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | @@ -57,9 +71,11 @@ nodes | command_injection.py:59:20:59:26 | ControlFlowNode for command | semmle.label | ControlFlowNode for command | | command_injection.py:71:12:71:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:71:12:71:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:71:12:71:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:73:19:73:30 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | command_injection.py:78:12:78:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | command_injection.py:78:12:78:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| command_injection.py:78:12:78:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | command_injection.py:80:19:80:30 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/DataflowQueryTest.expected b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/DataflowQueryTest.expected index 3875da4e143..04431311999 100644 --- a/python/ql/test/query-tests/Security/CWE-078-CommandInjection/DataflowQueryTest.expected +++ b/python/ql/test/query-tests/Security/CWE-078-CommandInjection/DataflowQueryTest.expected @@ -1,2 +1,3 @@ missingAnnotationOnSink failures +testFailures diff --git a/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/DataflowQueryTest.expected b/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/DataflowQueryTest.expected index 3875da4e143..04431311999 100644 --- a/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/DataflowQueryTest.expected +++ b/python/ql/test/query-tests/Security/CWE-078-UnsafeShellCommandConstruction/DataflowQueryTest.expected @@ -1,2 +1,3 @@ missingAnnotationOnSink failures +testFailures diff --git a/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected b/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected index cfeb912d186..bb62167c585 100644 --- a/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected +++ b/python/ql/test/query-tests/Security/CWE-079-ReflectedXss/ReflectedXss.expected @@ -4,7 +4,8 @@ edges | reflected_xss.py:2:26:2:32 | GSSA Variable request | reflected_xss.py:21:23:21:29 | ControlFlowNode for request | | reflected_xss.py:2:26:2:32 | GSSA Variable request | reflected_xss.py:27:23:27:29 | ControlFlowNode for request | | reflected_xss.py:9:18:9:24 | ControlFlowNode for request | reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | -| reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | reflected_xss.py:10:26:10:53 | ControlFlowNode for BinaryExpr | +| reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | +| reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | reflected_xss.py:10:26:10:53 | ControlFlowNode for BinaryExpr | | reflected_xss.py:21:23:21:29 | ControlFlowNode for request | reflected_xss.py:21:23:21:34 | ControlFlowNode for Attribute | | reflected_xss.py:21:23:21:34 | ControlFlowNode for Attribute | reflected_xss.py:22:26:22:41 | ControlFlowNode for Attribute() | | reflected_xss.py:27:23:27:29 | ControlFlowNode for request | reflected_xss.py:27:23:27:34 | ControlFlowNode for Attribute | @@ -14,6 +15,7 @@ nodes | reflected_xss.py:2:26:2:32 | GSSA Variable request | semmle.label | GSSA Variable request | | reflected_xss.py:9:18:9:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | reflected_xss.py:9:18:9:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| reflected_xss.py:9:18:9:45 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | reflected_xss.py:10:26:10:53 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | reflected_xss.py:21:23:21:29 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | reflected_xss.py:21:23:21:34 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | diff --git a/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected b/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected index f8e45884ff0..6e1a89a6b24 100644 --- a/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-094-CodeInjection/CodeInjection.expected @@ -3,21 +3,25 @@ edges | code_injection.py:1:26:1:32 | GSSA Variable request | code_injection.py:6:12:6:18 | ControlFlowNode for request | | code_injection.py:1:26:1:32 | GSSA Variable request | code_injection.py:18:16:18:22 | ControlFlowNode for request | | code_injection.py:6:12:6:18 | ControlFlowNode for request | code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | -| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:7:10:7:13 | ControlFlowNode for code | -| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:8:10:8:13 | ControlFlowNode for code | -| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:10:10:10:12 | ControlFlowNode for cmd | +| code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | +| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | code_injection.py:7:10:7:13 | ControlFlowNode for code | +| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | code_injection.py:8:10:8:13 | ControlFlowNode for code | +| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | code_injection.py:10:10:10:12 | ControlFlowNode for cmd | | code_injection.py:18:16:18:22 | ControlFlowNode for request | code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | -| code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | code_injection.py:21:20:21:27 | ControlFlowNode for obj_name | +| code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | +| code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | code_injection.py:21:20:21:27 | ControlFlowNode for obj_name | nodes | code_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | code_injection.py:1:26:1:32 | GSSA Variable request | semmle.label | GSSA Variable request | | code_injection.py:6:12:6:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | code_injection.py:6:12:6:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| code_injection.py:6:12:6:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | code_injection.py:7:10:7:13 | ControlFlowNode for code | semmle.label | ControlFlowNode for code | | code_injection.py:8:10:8:13 | ControlFlowNode for code | semmle.label | ControlFlowNode for code | | code_injection.py:10:10:10:12 | ControlFlowNode for cmd | semmle.label | ControlFlowNode for cmd | | code_injection.py:18:16:18:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | code_injection.py:18:16:18:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| code_injection.py:18:16:18:38 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | code_injection.py:21:20:21:27 | ControlFlowNode for obj_name | semmle.label | ControlFlowNode for obj_name | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected b/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected index d7736a271c6..4d4c98b099c 100644 --- a/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-117-LogInjection/LogInjection.expected @@ -5,27 +5,35 @@ edges | LogInjectionBad.py:7:19:7:25 | GSSA Variable request | LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | | LogInjectionBad.py:7:19:7:25 | GSSA Variable request | LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | | LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | LogInjectionBad.py:18:21:18:40 | ControlFlowNode for BinaryExpr | +| LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | +| LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:18:21:18:40 | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | LogInjectionBad.py:24:18:24:37 | ControlFlowNode for BinaryExpr | +| LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | +| LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:24:18:24:37 | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | LogInjectionBad.py:30:25:30:44 | ControlFlowNode for BinaryExpr | +| LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | +| LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:30:25:30:44 | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | -| LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | LogInjectionBad.py:37:19:37:38 | ControlFlowNode for BinaryExpr | +| LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | +| LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | LogInjectionBad.py:37:19:37:38 | ControlFlowNode for BinaryExpr | nodes | LogInjectionBad.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | LogInjectionBad.py:7:19:7:25 | GSSA Variable request | semmle.label | GSSA Variable request | | LogInjectionBad.py:17:12:17:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | LogInjectionBad.py:17:12:17:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| LogInjectionBad.py:17:12:17:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | LogInjectionBad.py:18:21:18:40 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:23:12:23:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | LogInjectionBad.py:23:12:23:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| LogInjectionBad.py:23:12:23:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | LogInjectionBad.py:24:18:24:37 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:29:12:29:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | LogInjectionBad.py:29:12:29:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| LogInjectionBad.py:29:12:29:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | LogInjectionBad.py:30:25:30:44 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | LogInjectionBad.py:35:12:35:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | LogInjectionBad.py:35:12:35:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| LogInjectionBad.py:35:12:35:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | LogInjectionBad.py:37:19:37:38 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.expected b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.expected index e69de29bb2d..48de9172b36 100644 --- a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.expected +++ b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.ql b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.ql index d4ce46b5cd8..eb837559386 100644 --- a/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.ql +++ b/python/ql/test/query-tests/Security/CWE-209-StackTraceExposure/ExceptionInfo.ql @@ -3,12 +3,10 @@ import semmle.python.dataflow.new.DataFlow import TestUtilities.InlineExpectationsTest import semmle.python.security.dataflow.ExceptionInfo -class ExceptionInfoTest extends InlineExpectationsTest { - ExceptionInfoTest() { this = "ExceptionInfoTest" } +module ExceptionInfoTest implements TestSig { + string getARelevantTag() { result = "exceptionInfo" } - override string getARelevantTag() { result = "exceptionInfo" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and exists(ExceptionInfo e | location = e.getLocation() and @@ -18,3 +16,5 @@ class ExceptionInfoTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected b/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected index 8cd6466ae11..1bcc05a954b 100644 --- a/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected +++ b/python/ql/test/query-tests/Security/CWE-285-PamAuthorization/PamAuthorization.expected @@ -2,12 +2,14 @@ edges | pam_test.py:4:26:4:32 | ControlFlowNode for ImportMember | pam_test.py:4:26:4:32 | GSSA Variable request | | pam_test.py:4:26:4:32 | GSSA Variable request | pam_test.py:71:16:71:22 | ControlFlowNode for request | | pam_test.py:71:16:71:22 | ControlFlowNode for request | pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | -| pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | pam_test.py:76:14:76:40 | ControlFlowNode for pam_authenticate() | +| pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | +| pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | pam_test.py:76:14:76:40 | ControlFlowNode for pam_authenticate() | nodes | pam_test.py:4:26:4:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | pam_test.py:4:26:4:32 | GSSA Variable request | semmle.label | GSSA Variable request | | pam_test.py:71:16:71:22 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | pam_test.py:71:16:71:27 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pam_test.py:71:16:71:47 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | pam_test.py:76:14:76:40 | ControlFlowNode for pam_authenticate() | semmle.label | ControlFlowNode for pam_authenticate() | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected b/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected index 0ee851ac1cb..a1709f0a784 100644 --- a/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected +++ b/python/ql/test/query-tests/Security/CWE-502-UnsafeDeserialization/UnsafeDeserialization.expected @@ -2,15 +2,17 @@ edges | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for ImportMember | unsafe_deserialization.py:8:26:8:32 | GSSA Variable request | | unsafe_deserialization.py:8:26:8:32 | GSSA Variable request | unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | | unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | -| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:15:18:15:24 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:16:15:16:21 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:18:19:18:25 | ControlFlowNode for payload | -| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:21:16:21:22 | ControlFlowNode for payload | +| unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:15:18:15:24 | ControlFlowNode for payload | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:16:15:16:21 | ControlFlowNode for payload | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:18:19:18:25 | ControlFlowNode for payload | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | unsafe_deserialization.py:21:16:21:22 | ControlFlowNode for payload | nodes | unsafe_deserialization.py:8:26:8:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | unsafe_deserialization.py:8:26:8:32 | GSSA Variable request | semmle.label | GSSA Variable request | | unsafe_deserialization.py:14:15:14:21 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | unsafe_deserialization.py:14:15:14:26 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| unsafe_deserialization.py:14:15:14:41 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | unsafe_deserialization.py:15:18:15:24 | ControlFlowNode for payload | semmle.label | ControlFlowNode for payload | | unsafe_deserialization.py:16:15:16:21 | ControlFlowNode for payload | semmle.label | ControlFlowNode for payload | | unsafe_deserialization.py:18:19:18:25 | ControlFlowNode for payload | semmle.label | ControlFlowNode for payload | diff --git a/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected b/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected index 5be1168abd6..9808142a4b2 100644 --- a/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected +++ b/python/ql/test/query-tests/Security/CWE-601-UrlRedirect/UrlRedirect.expected @@ -9,47 +9,63 @@ edges | test.py:1:26:1:32 | GSSA Variable request | test.py:74:17:74:23 | ControlFlowNode for request | | test.py:1:26:1:32 | GSSA Variable request | test.py:81:17:81:23 | ControlFlowNode for request | | test.py:7:14:7:20 | ControlFlowNode for request | test.py:7:14:7:25 | ControlFlowNode for Attribute | -| test.py:7:14:7:25 | ControlFlowNode for Attribute | test.py:8:21:8:26 | ControlFlowNode for target | +| test.py:7:14:7:25 | ControlFlowNode for Attribute | test.py:7:14:7:43 | ControlFlowNode for Attribute() | +| test.py:7:14:7:43 | ControlFlowNode for Attribute() | test.py:8:21:8:26 | ControlFlowNode for target | | test.py:30:17:30:23 | ControlFlowNode for request | test.py:30:17:30:28 | ControlFlowNode for Attribute | -| test.py:30:17:30:28 | ControlFlowNode for Attribute | test.py:32:21:32:24 | ControlFlowNode for safe | +| test.py:30:17:30:28 | ControlFlowNode for Attribute | test.py:30:17:30:46 | ControlFlowNode for Attribute() | +| test.py:30:17:30:46 | ControlFlowNode for Attribute() | test.py:32:21:32:24 | ControlFlowNode for safe | | test.py:37:17:37:23 | ControlFlowNode for request | test.py:37:17:37:28 | ControlFlowNode for Attribute | -| test.py:37:17:37:28 | ControlFlowNode for Attribute | test.py:39:21:39:24 | ControlFlowNode for safe | +| test.py:37:17:37:28 | ControlFlowNode for Attribute | test.py:37:17:37:46 | ControlFlowNode for Attribute() | +| test.py:37:17:37:46 | ControlFlowNode for Attribute() | test.py:39:21:39:24 | ControlFlowNode for safe | | test.py:44:17:44:23 | ControlFlowNode for request | test.py:44:17:44:28 | ControlFlowNode for Attribute | -| test.py:44:17:44:28 | ControlFlowNode for Attribute | test.py:46:21:46:24 | ControlFlowNode for safe | +| test.py:44:17:44:28 | ControlFlowNode for Attribute | test.py:44:17:44:46 | ControlFlowNode for Attribute() | +| test.py:44:17:44:46 | ControlFlowNode for Attribute() | test.py:46:21:46:24 | ControlFlowNode for safe | | test.py:60:17:60:23 | ControlFlowNode for request | test.py:60:17:60:28 | ControlFlowNode for Attribute | -| test.py:60:17:60:28 | ControlFlowNode for Attribute | test.py:62:21:62:26 | ControlFlowNode for unsafe | +| test.py:60:17:60:28 | ControlFlowNode for Attribute | test.py:60:17:60:46 | ControlFlowNode for Attribute() | +| test.py:60:17:60:46 | ControlFlowNode for Attribute() | test.py:62:21:62:26 | ControlFlowNode for unsafe | | test.py:67:17:67:23 | ControlFlowNode for request | test.py:67:17:67:28 | ControlFlowNode for Attribute | -| test.py:67:17:67:28 | ControlFlowNode for Attribute | test.py:69:21:69:26 | ControlFlowNode for unsafe | +| test.py:67:17:67:28 | ControlFlowNode for Attribute | test.py:67:17:67:46 | ControlFlowNode for Attribute() | +| test.py:67:17:67:46 | ControlFlowNode for Attribute() | test.py:69:21:69:26 | ControlFlowNode for unsafe | | test.py:74:17:74:23 | ControlFlowNode for request | test.py:74:17:74:28 | ControlFlowNode for Attribute | -| test.py:74:17:74:28 | ControlFlowNode for Attribute | test.py:76:21:76:26 | ControlFlowNode for unsafe | +| test.py:74:17:74:28 | ControlFlowNode for Attribute | test.py:74:17:74:46 | ControlFlowNode for Attribute() | +| test.py:74:17:74:46 | ControlFlowNode for Attribute() | test.py:76:21:76:26 | ControlFlowNode for unsafe | | test.py:81:17:81:23 | ControlFlowNode for request | test.py:81:17:81:28 | ControlFlowNode for Attribute | -| test.py:81:17:81:28 | ControlFlowNode for Attribute | test.py:83:21:83:26 | ControlFlowNode for unsafe | +| test.py:81:17:81:28 | ControlFlowNode for Attribute | test.py:81:17:81:46 | ControlFlowNode for Attribute() | +| test.py:81:17:81:46 | ControlFlowNode for Attribute() | test.py:83:21:83:26 | ControlFlowNode for unsafe | nodes | test.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test.py:1:26:1:32 | GSSA Variable request | semmle.label | GSSA Variable request | | test.py:7:14:7:20 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:7:14:7:25 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:7:14:7:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:8:21:8:26 | ControlFlowNode for target | semmle.label | ControlFlowNode for target | | test.py:30:17:30:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:30:17:30:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:30:17:30:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:32:21:32:24 | ControlFlowNode for safe | semmle.label | ControlFlowNode for safe | | test.py:37:17:37:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:37:17:37:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:37:17:37:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:39:21:39:24 | ControlFlowNode for safe | semmle.label | ControlFlowNode for safe | | test.py:44:17:44:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:44:17:44:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:44:17:44:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:46:21:46:24 | ControlFlowNode for safe | semmle.label | ControlFlowNode for safe | | test.py:60:17:60:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:60:17:60:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:60:17:60:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:62:21:62:26 | ControlFlowNode for unsafe | semmle.label | ControlFlowNode for unsafe | | test.py:67:17:67:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:67:17:67:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:67:17:67:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:69:21:69:26 | ControlFlowNode for unsafe | semmle.label | ControlFlowNode for unsafe | | test.py:74:17:74:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:74:17:74:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:74:17:74:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:76:21:76:26 | ControlFlowNode for unsafe | semmle.label | ControlFlowNode for unsafe | | test.py:81:17:81:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:81:17:81:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:81:17:81:46 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:83:21:83:26 | ControlFlowNode for unsafe | semmle.label | ControlFlowNode for unsafe | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected b/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected index 94a74b9baef..fcf2c26a03b 100644 --- a/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-643-XPathInjection/XpathInjection.expected @@ -9,15 +9,20 @@ edges | xpathFlow.py:2:26:2:32 | GSSA Variable request | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | | xpathFlow.py:2:26:2:32 | GSSA Variable request | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | -| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | +| xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | +| xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | -| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | +| xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | -| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | +| xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | -| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | +| xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | +| xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | -| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | +| xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | +| xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | nodes | xpathBad.py:9:7:9:13 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathBad.py:10:13:10:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -27,18 +32,23 @@ nodes | xpathFlow.py:2:26:2:32 | GSSA Variable request | semmle.label | GSSA Variable request | | xpathFlow.py:11:18:11:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:11:18:11:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:11:18:11:44 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | xpathFlow.py:14:20:14:29 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:20:18:20:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:20:18:20:44 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | xpathFlow.py:23:29:23:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:30:18:30:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:30:18:30:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:30:18:30:44 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | xpathFlow.py:32:29:32:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:39:18:39:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:39:18:39:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:39:18:39:44 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | xpathFlow.py:41:31:41:40 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | | xpathFlow.py:47:18:47:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | xpathFlow.py:47:18:47:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| xpathFlow.py:47:18:47:44 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | xpathFlow.py:49:29:49:38 | ControlFlowNode for xpathQuery | semmle.label | ControlFlowNode for xpathQuery | subpaths #select diff --git a/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected b/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected index 6ff7710ef50..3a434d227d7 100644 --- a/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected +++ b/python/ql/test/query-tests/Security/CWE-730-PolynomialReDoS/PolynomialReDoS.expected @@ -2,11 +2,12 @@ edges | test.py:2:26:2:32 | ControlFlowNode for ImportMember | test.py:2:26:2:32 | GSSA Variable request | | test.py:2:26:2:32 | GSSA Variable request | test.py:7:12:7:18 | ControlFlowNode for request | | test.py:7:12:7:18 | ControlFlowNode for request | test.py:7:12:7:23 | ControlFlowNode for Attribute | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:8:30:8:33 | ControlFlowNode for text | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:9:32:9:35 | ControlFlowNode for text | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:12:17:12:20 | ControlFlowNode for text | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:18:28:18:31 | ControlFlowNode for text | -| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:21:18:21:21 | ControlFlowNode for text | +| test.py:7:12:7:23 | ControlFlowNode for Attribute | test.py:7:12:7:35 | ControlFlowNode for Attribute() | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:8:30:8:33 | ControlFlowNode for text | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:9:32:9:35 | ControlFlowNode for text | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:12:17:12:20 | ControlFlowNode for text | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:18:28:18:31 | ControlFlowNode for text | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | test.py:21:18:21:21 | ControlFlowNode for text | | test.py:14:33:14:39 | ControlFlowNode for my_text | test.py:16:24:16:30 | ControlFlowNode for my_text | | test.py:18:28:18:31 | ControlFlowNode for text | test.py:14:33:14:39 | ControlFlowNode for my_text | nodes @@ -14,6 +15,7 @@ nodes | test.py:2:26:2:32 | GSSA Variable request | semmle.label | GSSA Variable request | | test.py:7:12:7:18 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test.py:7:12:7:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:7:12:7:35 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:8:30:8:33 | ControlFlowNode for text | semmle.label | ControlFlowNode for text | | test.py:9:32:9:35 | ControlFlowNode for text | semmle.label | ControlFlowNode for text | | test.py:12:17:12:20 | ControlFlowNode for text | semmle.label | ControlFlowNode for text | diff --git a/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected b/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected index efea6e2f054..61251a633e2 100644 --- a/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected +++ b/python/ql/test/query-tests/Security/CWE-798-HardcodedCredentials/HardcodedCredentials.expected @@ -1,8 +1,16 @@ edges -| test.py:5:12:5:24 | hard coded value | test.py:14:18:14:25 | hard coded value | -| test.py:5:12:5:24 | hard coded value | test.py:14:18:14:25 | hard coded value | -| test.py:6:12:6:25 | hard coded value | test.py:15:18:15:25 | hard coded value | -| test.py:6:12:6:25 | hard coded value | test.py:15:18:15:25 | hard coded value | +| test.py:5:1:5:8 | GSSA Variable USERNAME | test.py:14:18:14:25 | ControlFlowNode for USERNAME | +| test.py:5:12:5:24 | ControlFlowNode for Str | test.py:5:1:5:8 | GSSA Variable USERNAME | +| test.py:6:1:6:8 | GSSA Variable PASSWORD | test.py:15:18:15:25 | ControlFlowNode for PASSWORD | +| test.py:6:12:6:25 | ControlFlowNode for Str | test.py:6:1:6:8 | GSSA Variable PASSWORD | +nodes +| test.py:5:1:5:8 | GSSA Variable USERNAME | semmle.label | GSSA Variable USERNAME | +| test.py:5:12:5:24 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | +| test.py:6:1:6:8 | GSSA Variable PASSWORD | semmle.label | GSSA Variable PASSWORD | +| test.py:6:12:6:25 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | +| test.py:14:18:14:25 | ControlFlowNode for USERNAME | semmle.label | ControlFlowNode for USERNAME | +| test.py:15:18:15:25 | ControlFlowNode for PASSWORD | semmle.label | ControlFlowNode for PASSWORD | +subpaths #select -| test.py:5:12:5:24 | Str | test.py:5:12:5:24 | hard coded value | test.py:14:18:14:25 | hard coded value | This hardcoded value is $@. | test.py:14:18:14:25 | USERNAME | used as credentials | -| test.py:6:12:6:25 | Str | test.py:6:12:6:25 | hard coded value | test.py:15:18:15:25 | hard coded value | This hardcoded value is $@. | test.py:15:18:15:25 | PASSWORD | used as credentials | +| test.py:5:12:5:24 | ControlFlowNode for Str | test.py:5:12:5:24 | ControlFlowNode for Str | test.py:14:18:14:25 | ControlFlowNode for USERNAME | This hardcoded value is $@. | test.py:14:18:14:25 | ControlFlowNode for USERNAME | used as credentials | +| test.py:6:12:6:25 | ControlFlowNode for Str | test.py:6:12:6:25 | ControlFlowNode for Str | test.py:15:18:15:25 | ControlFlowNode for PASSWORD | This hardcoded value is $@. | test.py:15:18:15:25 | ControlFlowNode for PASSWORD | used as credentials | diff --git a/python/tools/recorded-call-graph-metrics/ql/lib/BytecodeExpr.qll b/python/tools/recorded-call-graph-metrics/ql/lib/BytecodeExpr.qll index 4d1bfeb3859..c8d1acff57a 100644 --- a/python/tools/recorded-call-graph-metrics/ql/lib/BytecodeExpr.qll +++ b/python/tools/recorded-call-graph-metrics/ql/lib/BytecodeExpr.qll @@ -2,27 +2,18 @@ import python abstract class XmlBytecodeExpr extends XmlElement { } -/** DEPRECATED: Alias for XmlBytecodeExpr */ -deprecated class XMLBytecodeExpr = XmlBytecodeExpr; - class XmlBytecodeConst extends XmlBytecodeExpr { XmlBytecodeConst() { this.hasName("BytecodeConst") } string get_value_data_raw() { result = this.getAChild("value").getTextValue() } } -/** DEPRECATED: Alias for XmlBytecodeConst */ -deprecated class XMLBytecodeConst = XmlBytecodeConst; - class XmlBytecodeVariableName extends XmlBytecodeExpr { XmlBytecodeVariableName() { this.hasName("BytecodeVariableName") } string get_name_data() { result = this.getAChild("name").getTextValue() } } -/** DEPRECATED: Alias for XmlBytecodeVariableName */ -deprecated class XMLBytecodeVariableName = XmlBytecodeVariableName; - class XmlBytecodeAttribute extends XmlBytecodeExpr { XmlBytecodeAttribute() { this.hasName("BytecodeAttribute") } @@ -31,9 +22,6 @@ class XmlBytecodeAttribute extends XmlBytecodeExpr { XmlBytecodeExpr get_object_data() { result.getParent() = this.getAChild("object") } } -/** DEPRECATED: Alias for XmlBytecodeAttribute */ -deprecated class XMLBytecodeAttribute = XmlBytecodeAttribute; - class XmlBytecodeSubscript extends XmlBytecodeExpr { XmlBytecodeSubscript() { this.hasName("BytecodeSubscript") } @@ -42,9 +30,6 @@ class XmlBytecodeSubscript extends XmlBytecodeExpr { XmlBytecodeExpr get_object_data() { result.getParent() = this.getAChild("object") } } -/** DEPRECATED: Alias for XmlBytecodeSubscript */ -deprecated class XMLBytecodeSubscript = XmlBytecodeSubscript; - class XmlBytecodeTuple extends XmlBytecodeExpr { XmlBytecodeTuple() { this.hasName("BytecodeTuple") } @@ -53,9 +38,6 @@ class XmlBytecodeTuple extends XmlBytecodeExpr { } } -/** DEPRECATED: Alias for XmlBytecodeTuple */ -deprecated class XMLBytecodeTuple = XmlBytecodeTuple; - class XmlBytecodeList extends XmlBytecodeExpr { XmlBytecodeList() { this.hasName("BytecodeList") } @@ -64,27 +46,18 @@ class XmlBytecodeList extends XmlBytecodeExpr { } } -/** DEPRECATED: Alias for XmlBytecodeList */ -deprecated class XMLBytecodeList = XmlBytecodeList; - class XmlBytecodeCall extends XmlBytecodeExpr { XmlBytecodeCall() { this.hasName("BytecodeCall") } XmlBytecodeExpr get_function_data() { result.getParent() = this.getAChild("function") } } -/** DEPRECATED: Alias for XmlBytecodeCall */ -deprecated class XMLBytecodeCall = XmlBytecodeCall; - class XmlBytecodeUnknown extends XmlBytecodeExpr { XmlBytecodeUnknown() { this.hasName("BytecodeUnknown") } string get_opname_data() { result = this.getAChild("opname").getTextValue() } } -/** DEPRECATED: Alias for XmlBytecodeUnknown */ -deprecated class XMLBytecodeUnknown = XmlBytecodeUnknown; - class XmlBytecodeMakeFunction extends XmlBytecodeExpr { XmlBytecodeMakeFunction() { this.hasName("BytecodeMakeFunction") } @@ -93,14 +66,8 @@ class XmlBytecodeMakeFunction extends XmlBytecodeExpr { } } -/** DEPRECATED: Alias for XmlBytecodeMakeFunction */ -deprecated class XMLBytecodeMakeFunction = XmlBytecodeMakeFunction; - class XmlSomethingInvolvingScaryBytecodeJump extends XmlBytecodeExpr { XmlSomethingInvolvingScaryBytecodeJump() { this.hasName("SomethingInvolvingScaryBytecodeJump") } string get_opname_data() { result = this.getAChild("opname").getTextValue() } } - -/** DEPRECATED: Alias for XmlSomethingInvolvingScaryBytecodeJump */ -deprecated class XMLSomethingInvolvingScaryBytecodeJump = XmlSomethingInvolvingScaryBytecodeJump; diff --git a/python/tools/recorded-call-graph-metrics/ql/lib/RecordedCalls.qll b/python/tools/recorded-call-graph-metrics/ql/lib/RecordedCalls.qll index d6ad84ae3a1..4d0c11fa3fd 100644 --- a/python/tools/recorded-call-graph-metrics/ql/lib/RecordedCalls.qll +++ b/python/tools/recorded-call-graph-metrics/ql/lib/RecordedCalls.qll @@ -57,9 +57,6 @@ class XmlRecordedCall extends XmlElement { } } -/** DEPRECATED: Alias for XmlRecordedCall */ -deprecated class XMLRecordedCall = XmlRecordedCall; - /** The XML data for the call part a recorded call. */ class XmlCall extends XmlElement { XmlCall() { this.hasName("Call") } @@ -110,15 +107,9 @@ class XmlCall extends XmlElement { } } -/** DEPRECATED: Alias for XmlCall */ -deprecated class XMLCall = XmlCall; - /** The XML data for the callee part a recorded call. */ abstract class XmlCallee extends XmlElement { } -/** DEPRECATED: Alias for XmlCallee */ -deprecated class XMLCallee = XmlCallee; - /** The XML data for the callee part a recorded call, when the callee is a Python function. */ class XmlPythonCallee extends XmlCallee { XmlPythonCallee() { this.hasName("PythonCallee") } @@ -140,9 +131,6 @@ class XmlPythonCallee extends XmlCallee { } } -/** DEPRECATED: Alias for XmlPythonCallee */ -deprecated class XMLPythonCallee = XmlPythonCallee; - /** The XML data for the callee part a recorded call, when the callee is a C function or builtin. */ class XmlExternalCallee extends XmlCallee { XmlExternalCallee() { this.hasName("ExternalCallee") } @@ -161,9 +149,6 @@ class XmlExternalCallee extends XmlCallee { } } -/** DEPRECATED: Alias for XmlExternalCallee */ -deprecated class XMLExternalCallee = XmlExternalCallee; - /** * Helper predicate. If parent = `builtins` and qualname = `list.append`, it will * return the result of `builtins.list.append`.class diff --git a/python/tools/recorded-call-graph-metrics/ql/qlpack.yml b/python/tools/recorded-call-graph-metrics/ql/qlpack.yml index 3fee59d70bc..a08193635d5 100644 --- a/python/tools/recorded-call-graph-metrics/ql/qlpack.yml +++ b/python/tools/recorded-call-graph-metrics/ql/qlpack.yml @@ -3,3 +3,4 @@ version: 0.0.1 extractor: python dependencies: codeql/python-all: '*' +warnOnImplicitThis: true diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 7f62aa9e677..7e498db849d 100644 Binary files a/ql/Cargo.lock and b/ql/Cargo.lock differ diff --git a/ql/buramu/Cargo.toml b/ql/buramu/Cargo.toml index 3c1c885037e..bfbcacef710 100644 --- a/ql/buramu/Cargo.toml +++ b/ql/buramu/Cargo.toml @@ -9,4 +9,4 @@ edition = "2018" lazy_static = "1.4.0" chrono = "0.4.26" rayon = "1.7.0" -regex = "1.8.4" +regex = "1.9.0" diff --git a/ql/extractor/Cargo.toml b/ql/extractor/Cargo.toml index 90289b0d688..92d10a57d5c 100644 --- a/ql/extractor/Cargo.toml +++ b/ql/extractor/Cargo.toml @@ -16,5 +16,5 @@ clap = { version = "4.2", features = ["derive"] } tracing = "0.1" tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } rayon = "1.7.0" -regex = "1.8.4" +regex = "1.9.0" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } diff --git a/ql/ql/consistency-queries/qlpack.yml b/ql/ql/consistency-queries/qlpack.yml index ffc5cdb7a1a..499d2130ef1 100644 --- a/ql/ql/consistency-queries/qlpack.yml +++ b/ql/ql/consistency-queries/qlpack.yml @@ -3,3 +3,4 @@ groups: [ql, test, consistency-queries] dependencies: codeql/ql: ${workspace} extractor: ql +warnOnImplicitThis: true diff --git a/ql/ql/examples/qlpack.yml b/ql/ql/examples/qlpack.yml index 0652ac37bd5..88fb9314a20 100644 --- a/ql/ql/examples/qlpack.yml +++ b/ql/ql/examples/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/ql-examples groups: [ql, examples] dependencies: codeql/ql: ${workspace} +warnOnImplicitThis: true diff --git a/ql/ql/src/codeql_ql/ast/Ast.qll b/ql/ql/src/codeql_ql/ast/Ast.qll index 616438da756..acc36be15ee 100644 --- a/ql/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/ql/src/codeql_ql/ast/Ast.qll @@ -567,7 +567,7 @@ class ClasslessPredicate extends TClasslessPredicate, Predicate, ModuleDeclarati override predicate isPrivate() { Predicate.super.isPrivate() } /** Holds if this classless predicate is a signature predicate with no body. */ - predicate isSignature() { not exists(this.getBody()) } + override predicate isSignature() { not exists(this.getBody()) } override QLDoc getQLDoc() { result = any(TopLevel m).getQLDocFor(this) @@ -611,6 +611,8 @@ class ClassPredicate extends TClassPredicate, Predicate { predicate overrides(ClassPredicate other) { predOverrides(this, other) } + predicate shadows(ClassPredicate other) { predShadows(this, other) } + override TypeExpr getReturnTypeExpr() { toQL(result) = pred.getReturnType() } override AstNode getAChild(string pred_name) { @@ -834,6 +836,12 @@ class Module extends TModule, ModuleDeclaration { toMock(result) = mod.asRight().getMember(i) } + pragma[nomagic] + Declaration getDeclaration(string name) { + result = this.getAMember() and + name = result.getName() + } + QLDoc getQLDocFor(AstNode m) { exists(int i | result = this.getMember(i) and m = this.getMember(i + 1)) } @@ -878,6 +886,36 @@ class Module extends TModule, ModuleDeclaration { class ModuleMember extends TModuleMember, AstNode { /** Holds if this member is declared as `private`. */ predicate isPrivate() { this.hasAnnotation("private") } + + /** Holds if this member is declared as `final`. */ + predicate isFinal() { this.hasAnnotation("final") } +} + +private newtype TDeclarationKind = + TClassKind() or + TModuleKind() or + TPredicateKind(int arity) { arity = any(Predicate p).getArity() } + +private TDeclarationKind getDeclarationKind(Declaration d) { + d instanceof Class and result = TClassKind() + or + d instanceof Module and result = TModuleKind() + or + d = any(Predicate p | result = TPredicateKind(p.getArity())) +} + +/** Holds if module `m` must implement signature declaration `d` with name `name` and kind `kind`. */ +pragma[nomagic] +private predicate mustImplement(Module m, string name, TDeclarationKind kind, Declaration d) { + d = m.getImplements(_).getResolvedType().getDeclaration().(Module).getAMember() and + name = d.getName() and + kind = getDeclarationKind(d) +} + +pragma[nomagic] +private Declaration getDeclaration(Module m, string name, TDeclarationKind kind) { + result = m.getDeclaration(name) and + kind = getDeclarationKind(result) } /** A declaration. E.g. a class, type, predicate, newtype... */ @@ -894,6 +932,16 @@ class Declaration extends TDeclaration, AstNode { or result = any(Class c).getQLDocFor(this) } + + predicate isSignature() { this.hasAnnotation("signature") } + + /** Holds if this declaration implements `other`. */ + predicate implements(Declaration other) { + exists(Module m, string name, TDeclarationKind kind | + this = getDeclaration(m, name, kind) and + mustImplement(m, name, kind, other) + ) + } } /** An entity that can be declared in a module. */ diff --git a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll index 46dc86113da..b45eb2166f1 100644 --- a/ql/ql/src/codeql_ql/ast/internal/Predicate.qll +++ b/ql/ql/src/codeql_ql/ast/internal/Predicate.qll @@ -90,16 +90,28 @@ private module Cached { ) } + pragma[nomagic] + private ClassPredicate getClassPredicate(Class c, string name, int arity) { + result = c.getClassPredicate(name) and + arity = result.getArity() + } + + pragma[nomagic] + private predicate resolveSelfClassCalls0(Class c, string name, int arity, MemberCall mc) { + mc.getBase() instanceof ThisAccess and + c = mc.getEnclosingPredicate().getParent() and + name = mc.getMemberName() and + arity = mc.getNumberOfArguments() + } + /** * Holds if `mc` is a `this.method()` call to a predicate defined in the same class. * helps avoid spuriously resolving to predicates in super-classes. */ private predicate resolveSelfClassCalls(MemberCall mc, PredicateOrBuiltin p) { - exists(Class c | - mc.getBase() instanceof ThisAccess and - c = mc.getEnclosingPredicate().getParent() and - p = c.getClassPredicate(mc.getMemberName()) and - p.getArity() = mc.getNumberOfArguments() + exists(Class c, string name, int arity | + resolveSelfClassCalls0(c, name, arity, mc) and + p = getClassPredicate(c, name, arity) ) } diff --git a/ql/ql/src/codeql_ql/ast/internal/Type.qll b/ql/ql/src/codeql_ql/ast/internal/Type.qll index c1aaf84d8c2..2053c657904 100644 --- a/ql/ql/src/codeql_ql/ast/internal/Type.qll +++ b/ql/ql/src/codeql_ql/ast/internal/Type.qll @@ -21,7 +21,7 @@ private newtype TType = private predicate primTypeName(string s) { s = ["int", "float", "string", "boolean", "date"] } private predicate isActualClass(Class c) { - not exists(c.getAliasType()) and + (not exists(c.getAliasType()) or c.isFinal()) and not exists(c.getUnionMember()) } @@ -36,6 +36,10 @@ class Type extends TType { /** * Gets a supertype of this type. This follows the user-visible type hierarchy, * and doesn't include internal types like the characteristic and domain types of classes. + * + * For supertypes that are `final` aliases, this returns the alias itself, and for + * types that are `final` aliases, this returns the supertypes of the type that is + * being aliased. */ Type getASuperType() { none() } @@ -94,9 +98,23 @@ class ClassType extends Type, TClass { override Class getDeclaration() { result = decl } - override Type getASuperType() { result = decl.getASuperType().getResolvedType() } + override Type getASuperType() { + result = decl.getASuperType().getResolvedType() + or + exists(ClassType alias | + this.isFinalAlias(alias) and + result = alias.getASuperType() + ) + } - Type getAnInstanceofType() { result = decl.getAnInstanceofType().getResolvedType() } + Type getAnInstanceofType() { + result = decl.getAnInstanceofType().getResolvedType() + or + exists(ClassType alias | + this.isFinalAlias(alias) and + result = alias.getAnInstanceofType() + ) + } override Type getAnInternalSuperType() { result.(ClassCharType).getClassType() = this @@ -110,6 +128,12 @@ class ClassType extends Type, TClass { other.getDeclaringType().getASuperType+() = result.getDeclaringType() ) } + + /** Holds if this class is a `final` alias of `c`. */ + predicate isFinalAlias(ClassType c) { + decl.isFinal() and + decl.getAliasType().getResolvedType() = c + } } class FileType extends Type, TFile { @@ -136,23 +160,37 @@ private PredicateOrBuiltin declaredPred(Type ty, string name, int arity) { result.getDeclaringType() = ty and result.getName() = name and result.getArity() = arity + or + exists(ClassType alias | + ty.(ClassType).isFinalAlias(alias) and + result = declaredPred(alias, name, arity) + ) } pragma[nomagic] -private PredicateOrBuiltin classPredCandidate(Type ty, string name, int arity) { - result = declaredPred(ty, name, arity) +private PredicateOrBuiltin classPredCandidate(Type ty, string name, int arity, boolean isFinal) { + result = declaredPred(ty, name, arity) and + if ty.(ClassType).getDeclaration().isFinal() then isFinal = true else isFinal = false or not exists(declaredPred(ty, name, arity)) and - result = inherClassPredCandidate(ty, name, arity) + result = inherClassPredCandidate(ty, name, arity, isFinal) } -private PredicateOrBuiltin inherClassPredCandidate(Type ty, string name, int arity) { - result = classPredCandidate(ty.getAnInternalSuperType(), name, arity) and +private PredicateOrBuiltin classPredCandidate(Type ty, string name, int arity) { + result = classPredCandidate(ty, name, arity, _) +} + +private PredicateOrBuiltin inherClassPredCandidate(Type ty, string name, int arity, boolean isFinal) { + result = classPredCandidate(ty.getAnInternalSuperType(), name, arity, isFinal) and not result.isPrivate() } predicate predOverrides(ClassPredicate sub, ClassPredicate sup) { - sup = inherClassPredCandidate(sub.getDeclaringType(), sub.getName(), sub.getArity()) + sup = inherClassPredCandidate(sub.getDeclaringType(), sub.getName(), sub.getArity(), false) +} + +predicate predShadows(ClassPredicate sub, ClassPredicate sup) { + sup = inherClassPredCandidate(sub.getDeclaringType(), sub.getName(), sub.getArity(), true) } private VarDecl declaredField(ClassType ty, string name) { @@ -376,7 +414,8 @@ private predicate defines(FileOrModule m, string name, Type t, boolean public) { exists(Class ty | t = ty.getAliasType().getResolvedType() | getEnclosingModule(ty) = m and ty.getName() = name and - public = getPublicBool(ty) + public = getPublicBool(ty) and + not ty.isFinal() ) or exists(Import im | diff --git a/ql/ql/src/codeql_ql/style/DeadCodeQuery.qll b/ql/ql/src/codeql_ql/style/DeadCodeQuery.qll index 5d6e1dc3ff7..211084f2915 100644 --- a/ql/ql/src/codeql_ql/style/DeadCodeQuery.qll +++ b/ql/ql/src/codeql_ql/style/DeadCodeQuery.qll @@ -186,6 +186,16 @@ private AstNode aliveStep(AstNode prev) { result = prev.(Module).getImplements(_) or result = prev.(PredicateExpr).getQualifier() + or + // a module argument is live if the constructed module is + result = prev.(ModuleExpr).getArgument(_) + or + // a type declaration is live if a reference to it is live + result = prev.(TypeExpr).getResolvedType().getDeclaration() + or + // a module member that implements a signature member is live if the module is + prev.(Module).getAMember() = result and + result.(Declaration).implements(_) } private AstNode deprecated() { diff --git a/ql/ql/src/queries/performance/AbstractClassImport.ql b/ql/ql/src/queries/performance/AbstractClassImport.ql index abd00689909..24e05860f0a 100644 --- a/ql/ql/src/queries/performance/AbstractClassImport.ql +++ b/ql/ql/src/queries/performance/AbstractClassImport.ql @@ -38,14 +38,15 @@ Class getASubclassOfAbstract(Class ab) { /** Gets a non-abstract subclass of `ab` that contributes to the extent of `ab`. */ Class concreteExternalSubclass(Class ab) { - ab.isAbstract() and not result.isAbstract() and result = getASubclassOfAbstract+(ab) and // Heuristic: An abstract class with subclasses in the same file and no other // imported subclasses is likely intentional. result.getLocation().getFile() != ab.getLocation().getFile() and // Exclude subclasses in tests and libraries that are only used in tests. - liveNonTestFile(result.getLocation().getFile()) + liveNonTestFile(result.getLocation().getFile()) and + // exclude `final` aliases + not result.getType().isFinalAlias(_) } /** Holds if there is a bidirectional import between the abstract class `ab` and its subclass `sub` */ diff --git a/ql/ql/src/queries/style/AndroidIdPrefix.ql b/ql/ql/src/queries/style/AndroidIdPrefix.ql new file mode 100644 index 00000000000..88b479cc7d4 --- /dev/null +++ b/ql/ql/src/queries/style/AndroidIdPrefix.ql @@ -0,0 +1,32 @@ +/** + * @name Android query without android @id prefix + * @description Android queries should include the `android/` prefix in their `@id`. + * @kind problem + * @problem.severity warning + * @id ql/android-id-prefix + * @precision high + */ + +import ql + +/** Holds if `t` transitively imports an Android module. */ +predicate importsAndroidModule(TopLevel t) { + t.getFile() = + any(YAML::QLPack pack | pack.getADependency*().getExtractor() = "java").getAFileInPack() and + exists(Import i | t.getAnImport() = i | + i.getImportString().toLowerCase().matches("%android%") + or + exists(TopLevel t2 | + t2.getAModule() = i.getResolvedModule().asModule() and + importsAndroidModule(t2) + ) + ) +} + +from QueryDoc d +where + d.getLocation().getFile().getRelativePath().matches("%src/Security/%") and + not d.getQueryId().matches("android/%") and + not d.getQueryId() = ["improper-intent-verification", "improper-webview-certificate-validation"] and // known badly identified queries that sadly we can't fix + importsAndroidModule(d.getParent()) +select d, "This Android query is missing the `android/` prefix in its `@id`." diff --git a/ql/ql/src/queries/style/FieldOnlyUsedInCharPred.ql b/ql/ql/src/queries/style/FieldOnlyUsedInCharPred.ql index e1f4810d391..3216cc9a6af 100644 --- a/ql/ql/src/queries/style/FieldOnlyUsedInCharPred.ql +++ b/ql/ql/src/queries/style/FieldOnlyUsedInCharPred.ql @@ -21,5 +21,6 @@ where any(PredicateCall call | call.getEnclosingPredicate() = c.getCharPred() and call.getTarget() instanceof NewTypeBranch ).getAnArgument() and - not f.getVarDecl().overrides(_) + not f.getVarDecl().overrides(_) and + not any(FieldDecl other).getVarDecl().overrides(f.getVarDecl()) select f, "Field is only used in CharPred." diff --git a/ql/ql/test/callgraph/packs/lib/qlpack.yml b/ql/ql/test/callgraph/packs/lib/qlpack.yml index 92e83d1e3d8..00c40b2431a 100644 --- a/ql/ql/test/callgraph/packs/lib/qlpack.yml +++ b/ql/ql/test/callgraph/packs/lib/qlpack.yml @@ -1,3 +1,4 @@ name: ql-testing-lib-pack version: 0.1.0 -extractor: ql-test-stuff \ No newline at end of file +extractor: ql-test-stuff +warnOnImplicitThis: true diff --git a/ql/ql/test/callgraph/packs/other/qlpack.yml b/ql/ql/test/callgraph/packs/other/qlpack.yml index d0b95cb68be..e0bc6a0a652 100644 --- a/ql/ql/test/callgraph/packs/other/qlpack.yml +++ b/ql/ql/test/callgraph/packs/other/qlpack.yml @@ -2,3 +2,4 @@ name: ql-other-pack-thing version: 0.1.0 dependencies: ql-testing-src-pack: '*' +warnOnImplicitThis: true diff --git a/ql/ql/test/callgraph/packs/src/qlpack.yml b/ql/ql/test/callgraph/packs/src/qlpack.yml index 2512d8f8483..c0d374d7cb4 100644 --- a/ql/ql/test/callgraph/packs/src/qlpack.yml +++ b/ql/ql/test/callgraph/packs/src/qlpack.yml @@ -1,4 +1,5 @@ name: ql-testing-src-pack version: 0.1.0 dependencies: - ql-testing-lib-pack: ${workspace} \ No newline at end of file + ql-testing-lib-pack: ${workspace} +warnOnImplicitThis: true diff --git a/ql/ql/test/dataflow/getAStringValue/getAStringValue.expected b/ql/ql/test/dataflow/getAStringValue/getAStringValue.expected index e69de29bb2d..48de9172b36 100644 --- a/ql/ql/test/dataflow/getAStringValue/getAStringValue.expected +++ b/ql/ql/test/dataflow/getAStringValue/getAStringValue.expected @@ -0,0 +1,2 @@ +failures +testFailures diff --git a/ql/ql/test/dataflow/getAStringValue/getAStringValue.ql b/ql/ql/test/dataflow/getAStringValue/getAStringValue.ql index 82534f535fe..fbd8bf0477f 100644 --- a/ql/ql/test/dataflow/getAStringValue/getAStringValue.ql +++ b/ql/ql/test/dataflow/getAStringValue/getAStringValue.ql @@ -2,12 +2,10 @@ import ql import codeql_ql.dataflow.DataFlow import TestUtilities.InlineExpectationsTest -class GetAStringValueTest extends InlineExpectationsTest { - GetAStringValueTest() { this = "getAStringValue" } +module GetAStringValueTest implements TestSig { + string getARelevantTag() { result = "getAStringValue" } - override string getARelevantTag() { result = "getAStringValue" } - - override predicate hasActualResult(Location location, string element, string tag, string value) { + predicate hasActualResult(Location location, string element, string tag, string value) { exists(Expr e | e = any(Call c).getAnArgument() and tag = "getAStringValue" and @@ -17,3 +15,5 @@ class GetAStringValueTest extends InlineExpectationsTest { ) } } + +import MakeTest diff --git a/ql/ql/test/printAst/Foo.qll b/ql/ql/test/printAst/Foo.qll index 0a28779092b..0c7f4689428 100644 --- a/ql/ql/test/printAst/Foo.qll +++ b/ql/ql/test/printAst/Foo.qll @@ -26,11 +26,8 @@ predicate calls(Foo f) { true = false } -newtype TPathNode = - pragma[assume_small_delta] - TPathNodeMid() +newtype TPathNode = TPathNodeMid() private newtype TPathNode2 = - pragma[assume_small_delta] TPathNodeMid2(boolean foo) { foo = true } or TPathNodeSink(string bar) { bar = "bar" } diff --git a/ql/ql/test/printAst/printAst.expected b/ql/ql/test/printAst/printAst.expected index 2194cf06864..88f3af7c09a 100644 --- a/ql/ql/test/printAst/printAst.expected +++ b/ql/ql/test/printAst/printAst.expected @@ -1,8 +1,8 @@ nodes | Foo.qll:1:1:1:17 | Import | semmle.label | [Import] Import | | Foo.qll:1:1:1:17 | Import | semmle.order | 1 | -| Foo.qll:1:1:36:44 | TopLevel | semmle.label | [TopLevel] TopLevel | -| Foo.qll:1:1:36:44 | TopLevel | semmle.order | 1 | +| Foo.qll:1:1:33:44 | TopLevel | semmle.label | [TopLevel] TopLevel | +| Foo.qll:1:1:33:44 | TopLevel | semmle.order | 1 | | Foo.qll:1:8:1:17 | javascript | semmle.label | [ModuleExpr] javascript | | Foo.qll:1:8:1:17 | javascript | semmle.order | 3 | | Foo.qll:3:7:3:9 | Class Foo | semmle.label | [Class] Class Foo | @@ -155,44 +155,36 @@ nodes | Foo.qll:26:10:26:14 | Boolean | semmle.order | 77 | | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.label | [NewType] NewType TPathNode | | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.order | 78 | -| Foo.qll:30:3:30:28 | annotation | semmle.label | [Annotation] annotation | -| Foo.qll:30:3:30:28 | annotation | semmle.order | 79 | -| Foo.qll:30:10:30:27 | assume_small_delta | semmle.label | [AnnotationArg] assume_small_delta | -| Foo.qll:30:10:30:27 | assume_small_delta | semmle.order | 80 | -| Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeMid | -| Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | semmle.order | 81 | -| Foo.qll:33:1:33:7 | annotation | semmle.label | [Annotation] annotation | -| Foo.qll:33:1:33:7 | annotation | semmle.order | 82 | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | semmle.label | [NewType] NewType TPathNode2 | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | semmle.order | 83 | -| Foo.qll:34:3:34:28 | annotation | semmle.label | [Annotation] annotation | -| Foo.qll:34:3:34:28 | annotation | semmle.order | 84 | -| Foo.qll:34:10:34:27 | assume_small_delta | semmle.label | [AnnotationArg] assume_small_delta | -| Foo.qll:34:10:34:27 | assume_small_delta | semmle.order | 85 | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeMid2 | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | semmle.order | 86 | -| Foo.qll:35:17:35:23 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | -| Foo.qll:35:17:35:23 | TypeExpr | semmle.order | 87 | -| Foo.qll:35:17:35:27 | foo | semmle.label | [VarDecl] foo | -| Foo.qll:35:17:35:27 | foo | semmle.order | 87 | -| Foo.qll:35:32:35:34 | foo | semmle.label | [VarAccess] foo | -| Foo.qll:35:32:35:34 | foo | semmle.order | 89 | -| Foo.qll:35:32:35:41 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | -| Foo.qll:35:32:35:41 | ComparisonFormula | semmle.order | 89 | -| Foo.qll:35:38:35:41 | Boolean | semmle.label | [Boolean] Boolean | -| Foo.qll:35:38:35:41 | Boolean | semmle.order | 91 | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeSink | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | semmle.order | 92 | -| Foo.qll:36:17:36:22 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | -| Foo.qll:36:17:36:22 | TypeExpr | semmle.order | 93 | -| Foo.qll:36:17:36:26 | bar | semmle.label | [VarDecl] bar | -| Foo.qll:36:17:36:26 | bar | semmle.order | 93 | -| Foo.qll:36:31:36:33 | bar | semmle.label | [VarAccess] bar | -| Foo.qll:36:31:36:33 | bar | semmle.order | 95 | -| Foo.qll:36:31:36:41 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | -| Foo.qll:36:31:36:41 | ComparisonFormula | semmle.order | 95 | -| Foo.qll:36:37:36:41 | String | semmle.label | [String] String | -| Foo.qll:36:37:36:41 | String | semmle.order | 97 | +| Foo.qll:29:21:29:32 | NewTypeBranch TPathNodeMid | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeMid | +| Foo.qll:29:21:29:32 | NewTypeBranch TPathNodeMid | semmle.order | 79 | +| Foo.qll:31:1:31:7 | annotation | semmle.label | [Annotation] annotation | +| Foo.qll:31:1:31:7 | annotation | semmle.order | 80 | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | semmle.label | [NewType] NewType TPathNode2 | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | semmle.order | 81 | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeMid2 | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | semmle.order | 82 | +| Foo.qll:32:17:32:23 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | +| Foo.qll:32:17:32:23 | TypeExpr | semmle.order | 83 | +| Foo.qll:32:17:32:27 | foo | semmle.label | [VarDecl] foo | +| Foo.qll:32:17:32:27 | foo | semmle.order | 83 | +| Foo.qll:32:32:32:34 | foo | semmle.label | [VarAccess] foo | +| Foo.qll:32:32:32:34 | foo | semmle.order | 85 | +| Foo.qll:32:32:32:41 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | +| Foo.qll:32:32:32:41 | ComparisonFormula | semmle.order | 85 | +| Foo.qll:32:38:32:41 | Boolean | semmle.label | [Boolean] Boolean | +| Foo.qll:32:38:32:41 | Boolean | semmle.order | 87 | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | semmle.label | [NewTypeBranch] NewTypeBranch TPathNodeSink | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | semmle.order | 88 | +| Foo.qll:33:17:33:22 | TypeExpr | semmle.label | [TypeExpr] TypeExpr | +| Foo.qll:33:17:33:22 | TypeExpr | semmle.order | 89 | +| Foo.qll:33:17:33:26 | bar | semmle.label | [VarDecl] bar | +| Foo.qll:33:17:33:26 | bar | semmle.order | 89 | +| Foo.qll:33:31:33:33 | bar | semmle.label | [VarAccess] bar | +| Foo.qll:33:31:33:33 | bar | semmle.order | 91 | +| Foo.qll:33:31:33:41 | ComparisonFormula | semmle.label | [ComparisonFormula] ComparisonFormula | +| Foo.qll:33:31:33:41 | ComparisonFormula | semmle.order | 91 | +| Foo.qll:33:37:33:41 | String | semmle.label | [String] String | +| Foo.qll:33:37:33:41 | String | semmle.order | 93 | | file://:0:0:0:0 | abs | semmle.label | [BuiltinPredicate] abs | | file://:0:0:0:0 | abs | semmle.label | [BuiltinPredicate] abs | | file://:0:0:0:0 | acos | semmle.label | [BuiltinPredicate] acos | @@ -275,26 +267,26 @@ nodes | file://:0:0:0:0 | trim | semmle.label | [BuiltinPredicate] trim | | file://:0:0:0:0 | ulp | semmle.label | [BuiltinPredicate] ulp | | printAst.ql:1:1:1:28 | Import | semmle.label | [Import] Import | -| printAst.ql:1:1:1:28 | Import | semmle.order | 98 | +| printAst.ql:1:1:1:28 | Import | semmle.order | 94 | | printAst.ql:1:1:1:29 | TopLevel | semmle.label | [TopLevel] TopLevel | -| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 98 | +| printAst.ql:1:1:1:29 | TopLevel | semmle.order | 94 | | printAst.ql:1:18:1:28 | printAstAst | semmle.label | [ModuleExpr] printAstAst | -| printAst.ql:1:18:1:28 | printAstAst | semmle.order | 100 | +| printAst.ql:1:18:1:28 | printAstAst | semmle.order | 96 | edges | Foo.qll:1:1:1:17 | Import | Foo.qll:1:8:1:17 | javascript | semmle.label | getModuleExpr() | | Foo.qll:1:1:1:17 | Import | Foo.qll:1:8:1:17 | javascript | semmle.order | 3 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | getAnImport() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.order | 1 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:3:7:3:9 | Class Foo | semmle.label | getAClass() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:3:7:3:9 | Class Foo | semmle.order | 4 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:9:17:9:19 | ClasslessPredicate foo | semmle.label | getAPredicate() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:9:17:9:19 | ClasslessPredicate foo | semmle.order | 16 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:13:11:13:15 | ClasslessPredicate calls | semmle.label | getAPredicate() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:13:11:13:15 | ClasslessPredicate calls | semmle.order | 32 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.label | getANewType() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.order | 78 | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:33:17:33:26 | NewType TPathNode2 | semmle.label | getANewType() | -| Foo.qll:1:1:36:44 | TopLevel | Foo.qll:33:17:33:26 | NewType TPathNode2 | semmle.order | 83 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.label | getAnImport() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:1:1:1:17 | Import | semmle.order | 1 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:3:7:3:9 | Class Foo | semmle.label | getAClass() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:3:7:3:9 | Class Foo | semmle.order | 4 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:9:17:9:19 | ClasslessPredicate foo | semmle.label | getAPredicate() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:9:17:9:19 | ClasslessPredicate foo | semmle.order | 16 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:13:11:13:15 | ClasslessPredicate calls | semmle.label | getAPredicate() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:13:11:13:15 | ClasslessPredicate calls | semmle.order | 32 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.label | getANewType() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:29:9:29:17 | NewType TPathNode | semmle.order | 78 | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:31:17:31:26 | NewType TPathNode2 | semmle.label | getANewType() | +| Foo.qll:1:1:33:44 | TopLevel | Foo.qll:31:17:31:26 | NewType TPathNode2 | semmle.order | 81 | | Foo.qll:3:7:3:9 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.label | getASuperType() | | Foo.qll:3:7:3:9 | Class Foo | Foo.qll:3:19:3:22 | TypeExpr | semmle.order | 5 | | Foo.qll:3:7:3:9 | Class Foo | Foo.qll:4:3:4:17 | CharPred Foo | semmle.label | getCharPred() | @@ -437,45 +429,37 @@ edges | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:3:26:6 | Boolean | semmle.order | 75 | | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.label | getRightOperand() | | Foo.qll:26:3:26:14 | ComparisonFormula | Foo.qll:26:10:26:14 | Boolean | semmle.order | 77 | -| Foo.qll:29:9:29:17 | NewType TPathNode | Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | semmle.label | getABranch() | -| Foo.qll:29:9:29:17 | NewType TPathNode | Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | semmle.order | 81 | -| Foo.qll:30:3:30:28 | annotation | Foo.qll:30:10:30:27 | assume_small_delta | semmle.label | getArgs(_) | -| Foo.qll:30:3:30:28 | annotation | Foo.qll:30:10:30:27 | assume_small_delta | semmle.order | 80 | -| Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | Foo.qll:30:3:30:28 | annotation | semmle.label | getAnAnnotation() | -| Foo.qll:31:3:31:14 | NewTypeBranch TPathNodeMid | Foo.qll:30:3:30:28 | annotation | semmle.order | 79 | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:33:1:33:7 | annotation | semmle.label | getAnAnnotation() | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:33:1:33:7 | annotation | semmle.order | 82 | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | semmle.label | getABranch() | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | semmle.order | 86 | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | semmle.label | getABranch() | -| Foo.qll:33:17:33:26 | NewType TPathNode2 | Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | semmle.order | 92 | -| Foo.qll:34:3:34:28 | annotation | Foo.qll:34:10:34:27 | assume_small_delta | semmle.label | getArgs(_) | -| Foo.qll:34:3:34:28 | annotation | Foo.qll:34:10:34:27 | assume_small_delta | semmle.order | 85 | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:34:3:34:28 | annotation | semmle.label | getAnAnnotation() | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:34:3:34:28 | annotation | semmle.order | 84 | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:35:17:35:27 | foo | semmle.label | getField(_) | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:35:17:35:27 | foo | semmle.order | 87 | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:35:32:35:41 | ComparisonFormula | semmle.label | getBody() | -| Foo.qll:35:3:35:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:35:32:35:41 | ComparisonFormula | semmle.order | 89 | -| Foo.qll:35:17:35:27 | foo | Foo.qll:35:17:35:23 | TypeExpr | semmle.label | getTypeExpr() | -| Foo.qll:35:17:35:27 | foo | Foo.qll:35:17:35:23 | TypeExpr | semmle.order | 87 | -| Foo.qll:35:32:35:41 | ComparisonFormula | Foo.qll:35:32:35:34 | foo | semmle.label | getLeftOperand() | -| Foo.qll:35:32:35:41 | ComparisonFormula | Foo.qll:35:32:35:34 | foo | semmle.order | 89 | -| Foo.qll:35:32:35:41 | ComparisonFormula | Foo.qll:35:38:35:41 | Boolean | semmle.label | getRightOperand() | -| Foo.qll:35:32:35:41 | ComparisonFormula | Foo.qll:35:38:35:41 | Boolean | semmle.order | 91 | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | Foo.qll:36:17:36:26 | bar | semmle.label | getField(_) | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | Foo.qll:36:17:36:26 | bar | semmle.order | 93 | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | Foo.qll:36:31:36:41 | ComparisonFormula | semmle.label | getBody() | -| Foo.qll:36:3:36:15 | NewTypeBranch TPathNodeSink | Foo.qll:36:31:36:41 | ComparisonFormula | semmle.order | 95 | -| Foo.qll:36:17:36:26 | bar | Foo.qll:36:17:36:22 | TypeExpr | semmle.label | getTypeExpr() | -| Foo.qll:36:17:36:26 | bar | Foo.qll:36:17:36:22 | TypeExpr | semmle.order | 93 | -| Foo.qll:36:31:36:41 | ComparisonFormula | Foo.qll:36:31:36:33 | bar | semmle.label | getLeftOperand() | -| Foo.qll:36:31:36:41 | ComparisonFormula | Foo.qll:36:31:36:33 | bar | semmle.order | 95 | -| Foo.qll:36:31:36:41 | ComparisonFormula | Foo.qll:36:37:36:41 | String | semmle.label | getRightOperand() | -| Foo.qll:36:31:36:41 | ComparisonFormula | Foo.qll:36:37:36:41 | String | semmle.order | 97 | +| Foo.qll:29:9:29:17 | NewType TPathNode | Foo.qll:29:21:29:32 | NewTypeBranch TPathNodeMid | semmle.label | getABranch() | +| Foo.qll:29:9:29:17 | NewType TPathNode | Foo.qll:29:21:29:32 | NewTypeBranch TPathNodeMid | semmle.order | 79 | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:31:1:31:7 | annotation | semmle.label | getAnAnnotation() | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:31:1:31:7 | annotation | semmle.order | 80 | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | semmle.label | getABranch() | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | semmle.order | 82 | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | semmle.label | getABranch() | +| Foo.qll:31:17:31:26 | NewType TPathNode2 | Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | semmle.order | 88 | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:32:17:32:27 | foo | semmle.label | getField(_) | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:32:17:32:27 | foo | semmle.order | 83 | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:32:32:32:41 | ComparisonFormula | semmle.label | getBody() | +| Foo.qll:32:3:32:15 | NewTypeBranch TPathNodeMid2 | Foo.qll:32:32:32:41 | ComparisonFormula | semmle.order | 85 | +| Foo.qll:32:17:32:27 | foo | Foo.qll:32:17:32:23 | TypeExpr | semmle.label | getTypeExpr() | +| Foo.qll:32:17:32:27 | foo | Foo.qll:32:17:32:23 | TypeExpr | semmle.order | 83 | +| Foo.qll:32:32:32:41 | ComparisonFormula | Foo.qll:32:32:32:34 | foo | semmle.label | getLeftOperand() | +| Foo.qll:32:32:32:41 | ComparisonFormula | Foo.qll:32:32:32:34 | foo | semmle.order | 85 | +| Foo.qll:32:32:32:41 | ComparisonFormula | Foo.qll:32:38:32:41 | Boolean | semmle.label | getRightOperand() | +| Foo.qll:32:32:32:41 | ComparisonFormula | Foo.qll:32:38:32:41 | Boolean | semmle.order | 87 | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | Foo.qll:33:17:33:26 | bar | semmle.label | getField(_) | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | Foo.qll:33:17:33:26 | bar | semmle.order | 89 | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | Foo.qll:33:31:33:41 | ComparisonFormula | semmle.label | getBody() | +| Foo.qll:33:3:33:15 | NewTypeBranch TPathNodeSink | Foo.qll:33:31:33:41 | ComparisonFormula | semmle.order | 91 | +| Foo.qll:33:17:33:26 | bar | Foo.qll:33:17:33:22 | TypeExpr | semmle.label | getTypeExpr() | +| Foo.qll:33:17:33:26 | bar | Foo.qll:33:17:33:22 | TypeExpr | semmle.order | 89 | +| Foo.qll:33:31:33:41 | ComparisonFormula | Foo.qll:33:31:33:33 | bar | semmle.label | getLeftOperand() | +| Foo.qll:33:31:33:41 | ComparisonFormula | Foo.qll:33:31:33:33 | bar | semmle.order | 91 | +| Foo.qll:33:31:33:41 | ComparisonFormula | Foo.qll:33:37:33:41 | String | semmle.label | getRightOperand() | +| Foo.qll:33:31:33:41 | ComparisonFormula | Foo.qll:33:37:33:41 | String | semmle.order | 93 | | printAst.ql:1:1:1:28 | Import | printAst.ql:1:18:1:28 | printAstAst | semmle.label | getModuleExpr() | -| printAst.ql:1:1:1:28 | Import | printAst.ql:1:18:1:28 | printAstAst | semmle.order | 100 | +| printAst.ql:1:1:1:28 | Import | printAst.ql:1:18:1:28 | printAstAst | semmle.order | 96 | | printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.label | getAnImport() | -| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 98 | +| printAst.ql:1:1:1:29 | TopLevel | printAst.ql:1:1:1:28 | Import | semmle.order | 94 | graphProperties | semmle.graphKind | tree | diff --git a/ql/ql/test/qlpack.yml b/ql/ql/test/qlpack.yml index f31941cdf10..b16fd7e3e20 100644 --- a/ql/ql/test/qlpack.yml +++ b/ql/ql/test/qlpack.yml @@ -5,3 +5,4 @@ dependencies: codeql/ql-examples: ${workspace} extractor: ql tests: . +warnOnImplicitThis: true diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.expected b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.expected new file mode 100644 index 00000000000..952a49efc65 --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.expected @@ -0,0 +1,4 @@ +| AbstractClassImportTest1.qll:4:16:4:19 | Class Base | This abstract class doesn't import its subclass $@ but imports 2 other subclasses, such as $@. | AbstractClassImportTest3.qll:4:7:4:11 | Class Sub31 | Sub31 | AbstractClassImportTest2.qll:4:7:4:11 | Class Sub21 | Sub21 | +| AbstractClassImportTest1.qll:4:16:4:19 | Class Base | This abstract class doesn't import its subclass $@ but imports 2 other subclasses, such as $@. | AbstractClassImportTest3.qll:8:7:8:11 | Class Sub32 | Sub32 | AbstractClassImportTest2.qll:4:7:4:11 | Class Sub21 | Sub21 | +| AbstractClassImportTest1.qll:4:16:4:19 | Class Base | This abstract class imports its subclass $@ but doesn't import 2 other subclasses, such as $@. | AbstractClassImportTest2.qll:4:7:4:11 | Class Sub21 | Sub21 | AbstractClassImportTest3.qll:4:7:4:11 | Class Sub31 | Sub31 | +| AbstractClassImportTest1.qll:4:16:4:19 | Class Base | This abstract class imports its subclass $@ but doesn't import 2 other subclasses, such as $@. | AbstractClassImportTest2.qll:8:7:8:11 | Class Sub22 | Sub22 | AbstractClassImportTest3.qll:4:7:4:11 | Class Sub31 | Sub31 | diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.qlref b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.qlref new file mode 100644 index 00000000000..4d7907c36ef --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImport.qlref @@ -0,0 +1 @@ +queries/performance/AbstractClassImport.ql \ No newline at end of file diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest1.qll b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest1.qll new file mode 100644 index 00000000000..ce7f7c4ea68 --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest1.qll @@ -0,0 +1,4 @@ +import ql +import AbstractClassImportTest2 + +abstract class Base extends AstNode { } diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest2.qll b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest2.qll new file mode 100644 index 00000000000..df29a5c18de --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest2.qll @@ -0,0 +1,8 @@ +import ql +import AbstractClassImportTest1 + +class Sub21 extends Base { + Sub21() { this instanceof TopLevel } +} + +class Sub22 extends Base instanceof Comment { } diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest3.qll b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest3.qll new file mode 100644 index 00000000000..d2917d9aeb4 --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTest3.qll @@ -0,0 +1,18 @@ +import ql +import AbstractClassImportTest1 + +class Sub31 extends Base { + Sub31() { this instanceof Comment } +} + +class Sub32 extends Base instanceof Comment { } + +final class BaseFinal = Base; + +class Sub33 extends BaseFinal instanceof Comment { } + +abstract class Sub34 extends Base { } + +final class Sub34Final = Sub34; + +class Sub35 extends Sub34Final instanceof Comment { } diff --git a/python/ql/test/library-tests/web/falcon/Sinks.expected b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTestQuery.expected similarity index 100% rename from python/ql/test/library-tests/web/falcon/Sinks.expected rename to ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTestQuery.expected diff --git a/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTestQuery.ql b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTestQuery.ql new file mode 100644 index 00000000000..f15c7fafb43 --- /dev/null +++ b/ql/ql/test/queries/performance/AbstractClassImport/AbstractClassImportTestQuery.ql @@ -0,0 +1,6 @@ +import ql +import AbstractClassImportTest3 + +from AstNode n +where none() +select n diff --git a/ql/ql/test/queries/style/DeadCode/DeadCode.expected b/ql/ql/test/queries/style/DeadCode/DeadCode.expected index 5238a57c6ed..017cf546a92 100644 --- a/ql/ql/test/queries/style/DeadCode/DeadCode.expected +++ b/ql/ql/test/queries/style/DeadCode/DeadCode.expected @@ -1,2 +1,5 @@ -| Foo.qll:2:21:2:25 | ClasslessPredicate dead1 | This code is never used, and it's not publicly exported. | -| Foo.qll:6:13:6:17 | ClasslessPredicate dead2 | This code is never used, and it's not publicly exported. | +| Foo.qll:4:21:4:25 | ClasslessPredicate dead1 | This code is never used, and it's not publicly exported. | +| Foo.qll:8:13:8:17 | ClasslessPredicate dead2 | This code is never used, and it's not publicly exported. | +| Foo.qll:46:16:46:21 | Module Input2 | This code is never used, and it's not publicly exported. | +| Foo.qll:56:16:56:17 | Module M2 | This code is never used, and it's not publicly exported. | +| Foo.qll:68:15:68:20 | Class CImpl2 | This code is never used, and it's not publicly exported. | diff --git a/ql/ql/test/queries/style/DeadCode/Foo.qll b/ql/ql/test/queries/style/DeadCode/Foo.qll index f273e3882e3..5b13fd99ca9 100644 --- a/ql/ql/test/queries/style/DeadCode/Foo.qll +++ b/ql/ql/test/queries/style/DeadCode/Foo.qll @@ -1,3 +1,5 @@ +import ql + private module Mixed { private predicate dead1() { none() } @@ -30,3 +32,37 @@ private module Foo { module ValidationMethod { predicate impl() { sig() } } + +signature module InputSig { + predicate foo(); +} + +module ParameterizedModule { } + +private module Input1 implements InputSig { + predicate foo() { any() } +} + +private module Input2 implements InputSig { + predicate foo() { any() } +} + +private module Input3 implements InputSig { + predicate foo() { any() } +} + +module M1 = ParameterizedModule; + +private module M2 = ParameterizedModule; + +import ParameterizedModule + +private module MImpl { } + +module MPublic = MImpl; + +private class CImpl1 extends AstNode { } + +final class CPublic1 = CImpl1; + +private class CImpl2 extends AstNode { } diff --git a/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.expected b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.expected new file mode 100644 index 00000000000..f41af0cebaf --- /dev/null +++ b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.expected @@ -0,0 +1 @@ +| FieldOnlyUsedInCharPred.qll:2:3:2:12 | FieldDecl | Field is only used in CharPred. | diff --git a/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qll b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qll new file mode 100644 index 00000000000..edfc8b4576e --- /dev/null +++ b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qll @@ -0,0 +1,29 @@ +class C1 extends int { + int field; // BAD + + C1() { + this = field and + this = 0 + } +} + +class C2 extends C1 { + int field2; // GOOD + + C2() { + this = field2 and + this = 0 + } + + int getField() { result = field2 } +} + +class C3 extends int { + C1 field; // GOOD (overridden) + + C3() { this = field } +} + +class C4 extends C3 { + override C2 field; // GOOD (overriding) +} diff --git a/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qlref b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qlref new file mode 100644 index 00000000000..0e77c6ae6fe --- /dev/null +++ b/ql/ql/test/queries/style/FieldOnlyUsedInCharPred/FieldOnlyUsedInCharPred.qlref @@ -0,0 +1 @@ +queries/style/FieldOnlyUsedInCharPred.ql diff --git a/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected b/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected index 2ef0dd4b1ad..d64a6ed1544 100644 --- a/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected +++ b/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected @@ -1 +1,2 @@ | Test.qll:12:13:12:16 | ClassPredicate test | Wrong.test overrides $@ but does not have an override annotation. | Test.qll:4:13:4:16 | ClassPredicate test | Super.test | +| Test.qll:18:13:18:16 | ClassPredicate test | Wrong2.test overrides $@ but does not have an override annotation. | Test.qll:4:13:4:16 | ClassPredicate test | Super.test | diff --git a/ql/ql/test/queries/style/MissingOverride/Test.qll b/ql/ql/test/queries/style/MissingOverride/Test.qll index e7f6a2c6b87..82d5199bf9e 100644 --- a/ql/ql/test/queries/style/MissingOverride/Test.qll +++ b/ql/ql/test/queries/style/MissingOverride/Test.qll @@ -11,3 +11,27 @@ class Correct extends Super { class Wrong extends Super { predicate test(int i) { i = 2 } } + +class Mid extends Super { } + +class Wrong2 extends Mid { + predicate test(int i) { i = 2 } +} + +final class SuperFinal = Super; + +class Correct2 extends SuperFinal { + predicate test(int i) { i = 4 } +} + +class Correct3 extends AstNode instanceof SuperFinal { + predicate test(int i) { i = 4 } +} + +final class Super2 extends AstNode { + predicate test(int i) { i = [1 .. 5] } +} + +class Correct4 extends Super2 { + predicate test(int i) { i = 3 } +} diff --git a/ruby/downgrades/qlpack.yml b/ruby/downgrades/qlpack.yml index c23e8cc44d6..c777eec353c 100644 --- a/ruby/downgrades/qlpack.yml +++ b/ruby/downgrades/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/ruby-downgrades groups: ruby downgrades: . library: true +warnOnImplicitThis: true diff --git a/ruby/extractor/Cargo.lock b/ruby/extractor/Cargo.lock index 85c546b9b96..852f745b8b8 100644 Binary files a/ruby/extractor/Cargo.lock and b/ruby/extractor/Cargo.lock differ diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 133233f2f14..ac23836a498 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -10,7 +10,7 @@ edition = "2018" [dependencies] tree-sitter = "0.20" tree-sitter-embedded-template = { git = "https://github.com/tree-sitter/tree-sitter-embedded-template.git", rev = "203f7bd3c1bbfbd98fc19add4b8fcb213c059205" } -tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "206c7077164372c596ffa8eaadb9435c28941364" } +tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "2edbd437ee901b8fa95861ec538e56efe3ebd127" } clap = { version = "4.2", features = ["derive"] } tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } diff --git a/ruby/ql/consistency-queries/AstConsistency.ql b/ruby/ql/consistency-queries/AstConsistency.ql index 8a5ebcdcda7..3a49d7cacc0 100644 --- a/ruby/ql/consistency-queries/AstConsistency.ql +++ b/ruby/ql/consistency-queries/AstConsistency.ql @@ -23,3 +23,8 @@ query predicate multipleParents(AstNode node, AstNode parent, string cls) { one != two ) } + +query predicate multipleToString(AstNode n, string s) { + s = strictconcat(n.toString(), ",") and + strictcount(n.toString()) > 1 +} diff --git a/ruby/ql/consistency-queries/CfgConsistency.ql b/ruby/ql/consistency-queries/CfgConsistency.ql index 8a5b311ca47..1961bbf7b3a 100644 --- a/ruby/ql/consistency-queries/CfgConsistency.ql +++ b/ruby/ql/consistency-queries/CfgConsistency.ql @@ -1,5 +1,6 @@ import codeql.ruby.controlflow.internal.ControlFlowGraphImplShared::Consistency import codeql.ruby.AST +import codeql.ruby.CFG import codeql.ruby.controlflow.internal.Completion import codeql.ruby.controlflow.internal.ControlFlowGraphImpl @@ -18,3 +19,8 @@ query predicate nonPostOrderExpr(Expr e, string cls) { c instanceof NormalCompletion ) } + +query predicate multipleToString(CfgNode n, string s) { + s = strictconcat(n.toString(), ",") and + strictcount(n.toString()) > 1 +} diff --git a/ruby/ql/consistency-queries/DataFlowConsistency.ql b/ruby/ql/consistency-queries/DataFlowConsistency.ql index 67f30db5261..46384305f7a 100644 --- a/ruby/ql/consistency-queries/DataFlowConsistency.ql +++ b/ruby/ql/consistency-queries/DataFlowConsistency.ql @@ -5,12 +5,12 @@ import codeql.ruby.dataflow.internal.DataFlowPrivate import codeql.ruby.dataflow.internal.DataFlowImplConsistency::Consistency private class MyConsistencyConfiguration extends ConsistencyConfiguration { - override predicate postWithInFlowExclude(Node n) { n instanceof SummaryNode } + override predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode } override predicate argHasPostUpdateExclude(ArgumentNode n) { n instanceof BlockArgumentNode or - n instanceof SummaryNode + n instanceof FlowSummaryNode or n instanceof SynthHashSplatArgumentNode or @@ -33,3 +33,8 @@ private class MyConsistencyConfiguration extends ConsistencyConfiguration { ) } } + +query predicate multipleToString(Node n, string s) { + s = strictconcat(n.toString(), ",") and + strictcount(n.toString()) > 1 +} diff --git a/ruby/ql/consistency-queries/qlpack.yml b/ruby/ql/consistency-queries/qlpack.yml index 707cada6cd2..9a1292eefa0 100644 --- a/ruby/ql/consistency-queries/qlpack.yml +++ b/ruby/ql/consistency-queries/qlpack.yml @@ -2,3 +2,4 @@ name: codeql/ruby-consistency-queries groups: [ruby, test, consistency-queries] dependencies: codeql/ruby-all: ${workspace} +warnOnImplicitThis: true diff --git a/ruby/ql/examples/qlpack.yml b/ruby/ql/examples/qlpack.yml index fc159c65692..5d2cd48bbb9 100644 --- a/ruby/ql/examples/qlpack.yml +++ b/ruby/ql/examples/qlpack.yml @@ -4,3 +4,4 @@ groups: - examples dependencies: codeql/ruby-all: ${workspace} +warnOnImplicitThis: true diff --git a/ruby/ql/integration-tests/all-platforms/qlpack.yml b/ruby/ql/integration-tests/all-platforms/qlpack.yml index a27def4e4d7..5a103c573d4 100644 --- a/ruby/ql/integration-tests/all-platforms/qlpack.yml +++ b/ruby/ql/integration-tests/all-platforms/qlpack.yml @@ -1,3 +1,4 @@ dependencies: codeql/ruby-all: '*' codeql/ruby-queries: '*' +warnOnImplicitThis: true diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 1bfe6b913c7..a06ccb6f8ad 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.7.0 + +### Deprecated APIs + +* The `Configuration` taint flow configuration class from `codeql.ruby.security.InsecureDownloadQuery` has been deprecated. Use the `Flow` module instead. + +### Minor Analysis Improvements + +* More kinds of rack applications are now recognized. +* Rack::Response instances are now recognized as potential responses from rack applications. +* HTTP redirect responses from Rack applications are now recognized as a potential sink for open redirect alerts. +* Additional sinks for `rb/unsafe-deserialization` have been added. This includes various methods from the `yaml` and `plist` gems, which deserialize YAML and Property List data, respectively. + ## 0.6.4 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/0.7.0.md b/ruby/ql/lib/change-notes/released/0.7.0.md new file mode 100644 index 00000000000..4051d8a0c27 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/0.7.0.md @@ -0,0 +1,12 @@ +## 0.7.0 + +### Deprecated APIs + +* The `Configuration` taint flow configuration class from `codeql.ruby.security.InsecureDownloadQuery` has been deprecated. Use the `Flow` module instead. + +### Minor Analysis Improvements + +* More kinds of rack applications are now recognized. +* Rack::Response instances are now recognized as potential responses from rack applications. +* HTTP redirect responses from Rack applications are now recognized as a potential sink for open redirect alerts. +* Additional sinks for `rb/unsafe-deserialization` have been added. This includes various methods from the `yaml` and `plist` gems, which deserialize YAML and Property List data, respectively. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index ced8cf94614..c761f3e7ab4 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.4 +lastReleaseVersion: 0.7.0 diff --git a/ruby/ql/lib/codeql/Locations.qll b/ruby/ql/lib/codeql/Locations.qll index 3a16bdec40d..87198146d88 100644 --- a/ruby/ql/lib/codeql/Locations.qll +++ b/ruby/ql/lib/codeql/Locations.qll @@ -2,15 +2,6 @@ import files.FileSystem -bindingset[loc] -pragma[inline_late] -private string locationToString(Location loc) { - exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | - loc.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - result = filepath + "@" + startline + ":" + startcolumn + ":" + endline + ":" + endcolumn - ) -} - /** * A location as given by a file, a start line, a start column, * an end line, and an end column. @@ -37,8 +28,14 @@ class Location extends @location_default { int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Gets a textual representation of this element. */ - pragma[inline] - string toString() { result = locationToString(this) } + bindingset[this] + pragma[inline_late] + string toString() { + exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | + this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + result = filepath + "@" + startline + ":" + startcolumn + ":" + endline + ":" + endcolumn + ) + } /** * Holds if this element is at the specified location. diff --git a/ruby/ql/lib/codeql/ruby/Frameworks.qll b/ruby/ql/lib/codeql/ruby/Frameworks.qll index 66b8bd71982..2052592b431 100644 --- a/ruby/ql/lib/codeql/ruby/Frameworks.qll +++ b/ruby/ql/lib/codeql/ruby/Frameworks.qll @@ -34,4 +34,5 @@ private import codeql.ruby.frameworks.Twirp private import codeql.ruby.frameworks.Sqlite3 private import codeql.ruby.frameworks.Mysql2 private import codeql.ruby.frameworks.Pg +private import codeql.ruby.frameworks.Yaml private import codeql.ruby.frameworks.Sequel diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index 625cc226b96..7408412aa91 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -153,12 +153,12 @@ class DataFlowCall extends TDataFlowCall { */ class SummaryCall extends DataFlowCall, TSummaryCall { private FlowSummaryImpl::Public::SummarizedCallable c; - private DataFlow::Node receiver; + private FlowSummaryImpl::Private::SummaryNode receiver; SummaryCall() { this = TSummaryCall(c, receiver) } /** Gets the data flow node that this call targets. */ - DataFlow::Node getReceiver() { result = receiver } + FlowSummaryImpl::Private::SummaryNode getReceiver() { result = receiver } override DataFlowCallable getEnclosingCallable() { result.asLibraryCallable() = c } @@ -377,7 +377,9 @@ private module Cached { cached newtype TDataFlowCall = TNormalCall(CfgNodes::ExprNodes::CallCfgNode c) or - TSummaryCall(FlowSummaryImpl::Public::SummarizedCallable c, DataFlow::Node receiver) { + TSummaryCall( + FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver + ) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index ddf98ac0f2f..410543e0fc9 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -460,7 +460,6 @@ module Impl { * The Boolean `cc` records whether the node is reached through an * argument in a call. */ - pragma[assume_small_delta] private predicate fwdFlow(NodeEx node, Cc cc) { sourceNode(node, _) and if hasSourceCallCtx() then cc = true else cc = false @@ -570,7 +569,6 @@ module Impl { /** * Holds if `c` is the target of a store in the flow covered by `fwdFlow`. */ - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlowConsCand(Content c) { exists(NodeEx mid, NodeEx node | @@ -1135,8 +1133,8 @@ module Impl { DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ); - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap); + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t); bindingset[typ, contentType] predicate typecheckStore(Typ typ, DataFlowType contentType); @@ -1199,20 +1197,23 @@ module Impl { NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, ApOption argAp, Typ t, Ap ap, ApApprox apa ) { - fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t, ap, apa) and - PrevStage::revFlow(node, state, apa) and - filter(node, state, t, ap) + fwdFlow1(node, state, cc, summaryCtx, argT, argAp, _, t, ap, apa) } - pragma[inline] - additional predicate fwdFlow( + private predicate fwdFlow1( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap + ApOption argAp, Typ t0, Typ t, Ap ap, ApApprox apa ) { - fwdFlow(node, state, cc, summaryCtx, argT, argAp, t, ap, _) + fwdFlow0(node, state, cc, summaryCtx, argT, argAp, t0, ap, apa) and + PrevStage::revFlow(node, state, apa) and + filter(node, state, t0, ap, t) + } + + pragma[nomagic] + private predicate typeStrengthen(Typ t0, Ap ap, Typ t) { + fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - pragma[assume_small_delta] pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -1339,6 +1340,11 @@ module Impl { private predicate fwdFlowConsCand(Typ t2, Ap cons, Content c, Typ t1, Ap tail) { fwdFlowStore(_, t1, tail, c, t2, _, _, _, _, _, _) and cons = apCons(c, t1, tail) + or + exists(Typ t0 | + typeStrengthen(t0, cons, t2) and + fwdFlowConsCand(t0, cons, c, t1, tail) + ) } pragma[nomagic] @@ -1359,7 +1365,7 @@ module Impl { ParamNodeOption summaryCtx, TypOption argT, ApOption argAp ) { exists(ApHeadContent apc | - fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap) and + fwdFlow(node1, state, cc, summaryCtx, argT, argAp, t, ap, _) and apc = getHeadContent(ap) and readStepCand0(node1, apc, c, node2) ) @@ -1520,14 +1526,14 @@ module Impl { NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { revFlow0(node, state, returnCtx, returnAp, ap) and - fwdFlow(node, state, _, _, _, _, _, ap) + fwdFlow(node, state, _, _, _, _, _, ap, _) } pragma[nomagic] private predicate revFlow0( NodeEx node, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap ) { - fwdFlow(node, state, _, _, _, _, _, ap) and + fwdFlow(node, state, _, _, _, _, _, ap, _) and sinkNode(node, state) and ( if hasSinkCallCtx() @@ -1780,13 +1786,13 @@ module Impl { boolean fwd, int nodes, int fields, int conscand, int states, int tuples ) { fwd = true and - nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _)) and + nodes = count(NodeEx node | fwdFlow(node, _, _, _, _, _, _, _, _)) and fields = count(Content f0 | fwdConsCand(f0, _, _)) and conscand = count(Content f0, Typ t, Ap ap | fwdConsCand(f0, t, ap)) and - states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _)) and + states = count(FlowState state | fwdFlow(_, state, _, _, _, _, _, _, _)) and tuples = count(NodeEx n, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, - ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap)) + ApOption argAp, Typ t, Ap ap | fwdFlow(n, state, cc, summaryCtx, argT, argAp, t, ap, _)) or fwd = false and nodes = count(NodeEx node | revFlow(node, _, _, _, _)) and @@ -1963,10 +1969,10 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { PrevStage::revFlowState(state) and - exists(t) and + t0 = t and exists(ap) and not stateBarrier(node, state) and ( @@ -2012,7 +2018,8 @@ module Impl { FlowCheckNode() { castNode(this.asNode()) or clearsContentCached(this.asNode(), _) or - expectsContentCached(this.asNode(), _) + expectsContentCached(this.asNode(), _) or + neverSkipInPathGraph(this.asNode()) } } @@ -2197,8 +2204,8 @@ module Impl { import BooleanCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and exists(lcc) @@ -2218,10 +2225,16 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + // We can get away with not using type strengthening here, since we aren't + // going to use the tracked types in the construction of Stage 4 access + // paths. For Stage 4 and onwards, the tracked types must be consistent as + // the cons candidates including types are used to construct subsequent + // access path approximations. + t0 = t and + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t0) else any()) and ( notExpectsContent(node) or @@ -2241,6 +2254,16 @@ module Impl { import MkStage::Stage } + bindingset[node, t0] + private predicate strengthenType(NodeEx node, DataFlowType t0, DataFlowType t) { + if castingNodeEx(node) + then + exists(DataFlowType nt | nt = node.getDataFlowType() | + if typeStrongerThan(nt, t0) then t = nt else (compatibleTypes(nt, t0) and t = t0) + ) + else t = t0 + } + private module Stage4Param implements MkStage::StageParam { private module PrevStage = Stage3; @@ -2274,8 +2297,8 @@ module Impl { pragma[nomagic] predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, _) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2333,11 +2356,11 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { exists(state) and not clear(node, ap) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + strengthenType(node, t0, t) and ( notExpectsContent(node) or @@ -2365,7 +2388,7 @@ module Impl { exists(AccessPathFront apf | Stage4::revFlow(node, state, TReturnCtxMaybeFlowThrough(_), _, apf) and Stage4::fwdFlow(node, state, any(Stage4::CcCall ccc), _, _, TAccessPathFrontSome(argApf), _, - apf) + apf, _) ) } @@ -2579,8 +2602,8 @@ module Impl { import LocalCallContext predicate localStep( - NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, - DataFlowType t, LocalCc lcc + NodeEx node1, FlowState state1, NodeEx node2, FlowState state2, boolean preservesValue, Typ t, + LocalCc lcc ) { localFlowBigStep(node1, state1, node2, state2, preservesValue, t, lcc) and PrevStage::revFlow(node1, pragma[only_bind_into](state1), _) and @@ -2609,9 +2632,9 @@ module Impl { ) } - bindingset[node, state, t, ap] - predicate filter(NodeEx node, FlowState state, Typ t, Ap ap) { - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) and + bindingset[node, state, t0, ap] + predicate filter(NodeEx node, FlowState state, Typ t0, Ap ap, Typ t) { + strengthenType(node, t0, t) and exists(state) and exists(ap) } @@ -2632,7 +2655,7 @@ module Impl { Stage5::parameterMayFlowThrough(p, _) and Stage5::revFlow(n, state, TReturnCtxMaybeFlowThrough(_), _, apa0) and Stage5::fwdFlow(n, state, any(CallContextCall ccc), TParamNodeSome(p.asNode()), _, - TAccessPathApproxSome(apa), _, apa0) + TAccessPathApproxSome(apa), _, apa0, _) ) } @@ -2649,7 +2672,7 @@ module Impl { TSummaryCtxSome(ParamNodeEx p, FlowState state, DataFlowType t, AccessPath ap) { exists(AccessPathApprox apa | ap.getApprox() = apa | Stage5::parameterMayFlowThrough(p, apa) and - Stage5::fwdFlow(p, state, _, _, _, _, t, apa) and + Stage5::fwdFlow(p, state, _, _, Option::some(t), _, _, apa, _) and Stage5::revFlow(p, state, _) ) } @@ -2751,7 +2774,6 @@ module Impl { /** * Gets the number of `AccessPath`s that correspond to `apa`. */ - pragma[assume_small_delta] private int countAps(AccessPathApprox apa) { evalUnfold(apa, false) and result = 1 and @@ -2770,7 +2792,6 @@ module Impl { * that it is expanded to a precise head-tail representation. */ language[monotonicAggregates] - pragma[assume_small_delta] private int countPotentialAps(AccessPathApprox apa) { apa instanceof AccessPathApproxNil and result = 1 or @@ -2807,7 +2828,6 @@ module Impl { } private newtype TPathNode = - pragma[assume_small_delta] TPathNodeMid( NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -2820,9 +2840,7 @@ module Impl { ap = TAccessPathNil() or // ... or a step from an existing PathNode to another node. - pathStep(_, node, state, cc, sc, t, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and - (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), t) else any()) + pathStep(_, node, state, cc, sc, t, ap) } or TPathNodeSink(NodeEx node, FlowState state) { exists(PathNodeMid sink | @@ -2894,7 +2912,6 @@ module Impl { override AccessPathFrontHead getFront() { result = TFrontHead(head_) } - pragma[assume_small_delta] override AccessPathApproxCons getApprox() { result = TConsNil(head_, t) and tail_ = TAccessPathNil() or @@ -2903,7 +2920,6 @@ module Impl { result = TCons1(head_, this.length()) } - pragma[assume_small_delta] override int length() { result = 1 + tail_.length() } private string toStringImpl(boolean needsSuffix) { @@ -3340,13 +3356,23 @@ module Impl { ap = mid.getAp() } + private predicate pathStep( + PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, + AccessPath ap + ) { + exists(DataFlowType t0 | + pathStep0(mid, node, state, cc, sc, t0, ap) and + Stage5::revFlow(node, state, ap.getApprox()) and + strengthenType(node, t0, t) + ) + } + /** * Holds if data may flow from `mid` to `node`. The last step in or out of * a callable is recorded by `cc`. */ - pragma[assume_small_delta] pragma[nomagic] - private predicate pathStep( + private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { @@ -3557,7 +3583,6 @@ module Impl { ) } - pragma[assume_small_delta] pragma[nomagic] private predicate pathThroughCallable0( DataFlowCall call, PathNodeMid mid, ReturnKindExt kind, FlowState state, CallContext cc, @@ -3964,7 +3989,7 @@ module Impl { ap = TPartialNil() and exists(explorationLimit()) or - partialPathNodeMk0(node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and distSrc(node.getEnclosingCallable()) <= explorationLimit() } or TPartialPathNodeRev( @@ -3990,11 +4015,20 @@ module Impl { } pragma[nomagic] - private predicate partialPathNodeMk0( - NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, - TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + private predicate partialPathStep( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { - partialPathStep(_, node, state, cc, sc1, sc2, sc3, sc4, t, ap) and + partialPathStep1(mid, node, state, cc, sc1, sc2, sc3, sc4, _, t, ap) + } + + pragma[nomagic] + private predicate partialPathStep1( + PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, + PartialAccessPath ap + ) { + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and not fullBarrier(node) and not stateBarrier(node, state) and not clearsContentEx(node, ap.getHead()) and @@ -4002,9 +4036,14 @@ module Impl { notExpectsContent(node) or expectsContentEx(node, ap.getHead()) ) and - if node.asNode() instanceof CastingNode - then compatibleTypes(node.getDataFlowType(), t) - else any() + strengthenType(node, t0, t) + } + + pragma[nomagic] + private predicate partialPathTypeStrengthen( + DataFlowType t0, PartialAccessPath ap, DataFlowType t + ) { + partialPathStep1(_, _, _, _, _, _, _, _, t0, t, ap) and t0 != t } /** @@ -4183,7 +4222,8 @@ module Impl { } } - private predicate partialPathStep( + pragma[nomagic] + private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap ) { @@ -4309,6 +4349,11 @@ module Impl { DataFlowType t1, PartialAccessPath ap1, Content c, DataFlowType t2, PartialAccessPath ap2 ) { partialPathStoreStep(_, t1, ap1, c, _, t2, ap2) + or + exists(DataFlowType t0 | + partialPathTypeStrengthen(t0, ap2, t2) and + apConsFwd(t1, ap1, c, t0, ap2) + ) } pragma[nomagic] diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll index 0d4c033c95d..aff14e7b44d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll @@ -187,7 +187,6 @@ private module LambdaFlow { else any() } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlow0( DataFlowCall lambdaCall, LambdaCallKind kind, Node node, DataFlowType t, boolean toReturn, @@ -274,7 +273,6 @@ private module LambdaFlow { ) } - pragma[assume_small_delta] pragma[nomagic] predicate revLambdaFlowOut( DataFlowCall lambdaCall, LambdaCallKind kind, TReturnPositionSimple pos, DataFlowType t, diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 6a7d87e9bd5..f8469e99a23 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -309,24 +309,16 @@ private module Cached { n = any(CfgNodes::ExprNodes::InstanceVariableAccessCfgNode v).getReceiver() ) } or - TSummaryNode( - FlowSummaryImpl::Public::SummarizedCallable c, - FlowSummaryImpl::Private::SummaryNodeState state - ) { - FlowSummaryImpl::Private::summaryNodeRange(c, state) - } or - TSummaryParameterNode(FlowSummaryImpl::Public::SummarizedCallable c, ParameterPosition pos) { - FlowSummaryImpl::Private::summaryParameterNodeRange(c, pos) - } or + TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or TSynthHashSplatArgumentNode(CfgNodes::ExprNodes::CallCfgNode c) { exists(Argument arg | arg.isArgumentOf(c, any(ArgumentPosition pos | pos.isKeyword(_)))) or c.getAnArgument() instanceof CfgNodes::ExprNodes::PairCfgNode } - class TParameterNode = + class TSourceParameterNode = TNormalParameterNode or TBlockParameterNode or TSelfParameterNode or - TSynthHashSplatParameterNode or TSummaryParameterNode; + TSynthHashSplatParameterNode; cached Location getLocation(NodeImpl n) { result = n.getLocationImpl() } @@ -355,7 +347,8 @@ private module Cached { exprFrom = nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr() ) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, true) + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo.(FlowSummaryNode).getSummaryNode(), true) } /** This is the local flow predicate that is exposed. */ @@ -412,7 +405,9 @@ private module Cached { cached predicate isLocalSourceNode(Node n) { - n instanceof TParameterNode + n instanceof TSourceParameterNode + or + n instanceof SummaryParameterNode or // Expressions that can't be reached from another entry definition or expression n instanceof ExprNode and @@ -514,9 +509,7 @@ predicate nodeIsHidden(Node n) { or isDesugarNode(n.(ExprNode).getExprNode().getExpr()) or - n instanceof SummaryNode - or - n instanceof SummaryParameterNode + n instanceof FlowSummaryNode or n instanceof SynthHashSplatParameterNode or @@ -757,47 +750,41 @@ private module ParameterNodes { } /** A parameter for a library callable with a flow summary. */ - class SummaryParameterNode extends ParameterNodeImpl, TSummaryParameterNode { - private FlowSummaryImpl::Public::SummarizedCallable sc; + class SummaryParameterNode extends ParameterNodeImpl, FlowSummaryNode { private ParameterPosition pos_; - SummaryParameterNode() { this = TSummaryParameterNode(sc, pos_) } + SummaryParameterNode() { + FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), pos_) + } override Parameter getParameter() { none() } override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - sc = c.asLibraryCallable() and pos = pos_ + this.getSummarizedCallable() = c.asLibraryCallable() and pos = pos_ } - - override CfgScope getCfgScope() { none() } - - override DataFlowCallable getEnclosingCallable() { result.asLibraryCallable() = sc } - - override EmptyLocation getLocationImpl() { any() } - - override string toStringImpl() { result = "parameter " + pos_ + " of " + sc } } } import ParameterNodes /** A data-flow node used to model flow summaries. */ -class SummaryNode extends NodeImpl, TSummaryNode { - FlowSummaryImpl::Public::SummarizedCallable c; - FlowSummaryImpl::Private::SummaryNodeState state; - - SummaryNode() { this = TSummaryNode(c, state) } +class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { + FlowSummaryImpl::Private::SummaryNode getSummaryNode() { this = TFlowSummaryNode(result) } /** Gets the summarized callable that this node belongs to. */ - FlowSummaryImpl::Public::SummarizedCallable getSummarizedCallable() { result = c } + FlowSummaryImpl::Public::SummarizedCallable getSummarizedCallable() { + result = this.getSummaryNode().getSummarizedCallable() + } override CfgScope getCfgScope() { none() } - override DataFlowCallable getEnclosingCallable() { result.asLibraryCallable() = c } + override DataFlowCallable getEnclosingCallable() { + result.asLibraryCallable() = this.getSummarizedCallable() + } override EmptyLocation getLocationImpl() { any() } - override string toStringImpl() { result = "[summary] " + state + " in " + c } + override string toStringImpl() { result = this.getSummaryNode().toString() } } /** A data-flow node that represents a call argument. */ @@ -857,15 +844,20 @@ private module ArgumentNodes { } } - private class SummaryArgumentNode extends SummaryNode, ArgumentNode { - SummaryArgumentNode() { FlowSummaryImpl::Private::summaryArgumentNode(_, this, _) } + private class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { + private DataFlowCall call_; + private ArgumentPosition pos_; + + SummaryArgumentNode() { + FlowSummaryImpl::Private::summaryArgumentNode(call_, this.getSummaryNode(), pos_) + } override predicate sourceArgumentOf(CfgNodes::ExprNodes::CallCfgNode call, ArgumentPosition pos) { none() } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { - FlowSummaryImpl::Private::summaryArgumentNode(call, this, pos) + call = call_ and pos = pos_ } } @@ -1029,16 +1021,16 @@ private module ReturnNodes { override ReturnKind getKind() { result instanceof NewReturnKind } } - private class SummaryReturnNode extends SummaryNode, ReturnNode { + private class SummaryReturnNode extends FlowSummaryNode, ReturnNode { private ReturnKind rk; - SummaryReturnNode() { FlowSummaryImpl::Private::summaryReturnNode(this, rk) } + SummaryReturnNode() { FlowSummaryImpl::Private::summaryReturnNode(this.getSummaryNode(), rk) } override ReturnKind getKind() { result = rk or exists(NewCall new | - TLibraryCallable(c) = viableLibraryCallable(new) and + TLibraryCallable(this.getSummarizedCallable()) = viableLibraryCallable(new) and result instanceof NewReturnKind ) } @@ -1071,12 +1063,15 @@ private module OutNodes { } } - private class SummaryOutNode extends SummaryNode, OutNode { - SummaryOutNode() { FlowSummaryImpl::Private::summaryOutNode(_, this, _) } + private class SummaryOutNode extends FlowSummaryNode, OutNode { + private DataFlowCall call; + private ReturnKind kind_; - override DataFlowCall getCall(ReturnKind kind) { - FlowSummaryImpl::Private::summaryOutNode(result, this, kind) + SummaryOutNode() { + FlowSummaryImpl::Private::summaryOutNode(call, this.getSummaryNode(), kind_) } + + override DataFlowCall getCall(ReturnKind kind) { result = call and kind = kind_ } } } @@ -1091,7 +1086,8 @@ predicate jumpStep(Node pred, Node succ) { or succ.asExpr().getExpr().(ConstantReadAccess).getValue() = pred.asExpr().getExpr() or - FlowSummaryImpl::Private::Steps::summaryJumpStep(pred, succ) + FlowSummaryImpl::Private::Steps::summaryJumpStep(pred.(FlowSummaryNode).getSummaryNode(), + succ.(FlowSummaryNode).getSummaryNode()) or any(AdditionalJumpStep s).step(pred, succ) } @@ -1156,7 +1152,8 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { )) ).getReceiver() or - FlowSummaryImpl::Private::Steps::summaryStoreStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) or storeStepCommon(node1, c, node2) } @@ -1190,7 +1187,8 @@ predicate readStep(Node node1, ContentSet c, Node node2) { or node2 = node1.(SynthHashSplatParameterNode).getAKeywordParameter(c) or - FlowSummaryImpl::Private::Steps::summaryReadStep(node1, c, node2) + FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, + node2.(FlowSummaryNode).getSummaryNode()) } /** @@ -1199,7 +1197,7 @@ predicate readStep(Node node1, ContentSet c, Node node2) { * in `x.f = newValue`. */ predicate clearsContent(Node n, ContentSet c) { - FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) or // Filter out keyword arguments that are part of the method signature from // the hash-splat parameter @@ -1220,7 +1218,7 @@ predicate clearsContent(Node n, ContentSet c) { * at node `n`. */ predicate expectsContent(Node n, ContentSet c) { - FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) } private newtype TDataFlowType = @@ -1231,6 +1229,8 @@ class DataFlowType extends TDataFlowType { string toString() { result = "" } } +predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { none() } + /** Gets the type of `n` used for type pruning. */ DataFlowType getNodeType(NodeImpl n) { result = TTodoDataFlowType() and exists(n) } @@ -1275,10 +1275,12 @@ private module PostUpdateNodes { override string toStringImpl() { result = "[post] " + e.toString() } } - private class SummaryPostUpdateNode extends SummaryNode, PostUpdateNodeImpl { - private Node pre; + private class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNodeImpl { + private FlowSummaryNode pre; - SummaryPostUpdateNode() { FlowSummaryImpl::Private::summaryPostUpdateNode(this, pre) } + SummaryPostUpdateNode() { + FlowSummaryImpl::Private::summaryPostUpdateNode(this.getSummaryNode(), pre.getSummaryNode()) + } override Node getPreUpdateNode() { result = pre } } @@ -1288,10 +1290,16 @@ private import PostUpdateNodes /** A node that performs a type cast. */ class CastNode extends Node { - CastNode() { - // ensure that all variable assignments are included in the path graph - this.(SsaDefinitionExtNode).getDefinitionExt() instanceof Ssa::WriteDefinition - } + CastNode() { none() } +} + +/** + * Holds if `n` should never be skipped over in the `PathGraph` and in path + * explanations. + */ +predicate neverSkipInPathGraph(Node n) { + // ensure that all variable assignments are included in the path graph + n.(SsaDefinitionExtNode).getDefinitionExt() instanceof Ssa::WriteDefinition } class DataFlowExpr = CfgNodes::ExprCfgNode; @@ -1353,7 +1361,7 @@ predicate lambdaSourceCall(CfgNodes::ExprNodes::CallCfgNode call, LambdaCallKind predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { lambdaSourceCall(call.asCall(), kind, receiver) or - receiver = call.(SummaryCall).getReceiver() and + receiver.(FlowSummaryNode).getSummaryNode() = call.(SummaryCall).getReceiver() and if receiver.(ParameterNodeImpl).isParameterOf(_, any(ParameterPosition pos | pos.isBlock())) then kind = TYieldCallKind() else kind = TLambdaCallKind() diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index 501cf70593e..a98238e85d9 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -191,7 +191,7 @@ class ExprNode extends Node, TExprNode { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ -class ParameterNode extends LocalSourceNode, TParameterNode instanceof ParameterNodeImpl { +class ParameterNode extends LocalSourceNode instanceof ParameterNodeImpl { /** Gets the parameter corresponding to this node, if any. */ final Parameter getParameter() { result = super.getParameter() } @@ -1284,13 +1284,16 @@ class HashLiteralNode extends LocalSourceNode, ExprNode { * into calls to `Array.[]`, so this includes both desugared calls as well as * explicit calls. */ -class ArrayLiteralNode extends LocalSourceNode, ExprNode { +class ArrayLiteralNode extends LocalSourceNode, CallNode { ArrayLiteralNode() { super.getExprNode() instanceof CfgNodes::ExprNodes::ArrayLiteralCfgNode } /** * Gets an element of the array. */ - Node getAnElement() { result = this.(CallNode).getPositionalArgument(_) } + Node getAnElement() { result = this.getElement(_) } + + /** Gets the `i`th element of the array. */ + Node getElement(int i) { result = this.getPositionalArgument(i) } } /** diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index e6379f6a170..7977e18120f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -23,29 +23,30 @@ module Public { * content type, or a return kind. */ class SummaryComponent extends TSummaryComponent { - /** Gets a textual representation of this summary component. */ - string toString() { - exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) - or - exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) - or - exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + /** Gets a textual representation of this component used for MaD models. */ + string getMadRepresentation() { + result = getMadRepresentationSpecific(this) or exists(ArgumentPosition pos | - this = TParameterSummaryComponent(pos) and result = "parameter " + pos + this = TParameterSummaryComponent(pos) and + result = "Parameter[" + getArgumentPosition(pos) + "]" ) or exists(ParameterPosition pos | - this = TArgumentSummaryComponent(pos) and result = "argument " + pos + this = TArgumentSummaryComponent(pos) and + result = "Argument[" + getParameterPosition(pos) + "]" ) or - exists(ReturnKind rk | this = TReturnSummaryComponent(rk) and result = "return (" + rk + ")") - or - exists(SummaryComponent::SyntheticGlobal sg | - this = TSyntheticGlobalSummaryComponent(sg) and - result = "synthetic global (" + sg + ")" + exists(string synthetic | + this = TSyntheticGlobalSummaryComponent(synthetic) and + result = "SyntheticGlobal[" + synthetic + "]" ) + or + this = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" } + + /** Gets a textual representation of this summary component. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing summary components. */ @@ -110,7 +111,6 @@ module Public { } /** Gets the stack obtained by dropping the first `i` elements, if any. */ - pragma[assume_small_delta] SummaryComponentStack drop(int i) { i = 0 and result = this or @@ -125,19 +125,22 @@ module Public { this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() } - /** Gets a textual representation of this stack. */ - string toString() { + /** Gets a textual representation of this stack used for MaD models. */ + string getMadRepresentation() { exists(SummaryComponent head, SummaryComponentStack tail | head = this.head() and tail = this.tail() and - result = tail + "." + head + result = tail.getMadRepresentation() + "." + head.getMadRepresentation() ) or exists(SummaryComponent c | this = TSingletonSummaryComponentStack(c) and - result = c.toString() + result = c.getMadRepresentation() ) } + + /** Gets a textual representation of this stack. */ + string toString() { result = this.getMadRepresentation() } } /** Provides predicates for constructing stacks of summary components. */ @@ -166,37 +169,6 @@ module Public { SummaryComponentStack return(ReturnKind rk) { result = singleton(SummaryComponent::return(rk)) } } - /** Gets a textual representation of this component used for flow summaries. */ - private string getComponent(SummaryComponent sc) { - result = getComponentSpecific(sc) - or - exists(ArgumentPosition pos | - sc = TParameterSummaryComponent(pos) and - result = "Parameter[" + getArgumentPosition(pos) + "]" - ) - or - exists(ParameterPosition pos | - sc = TArgumentSummaryComponent(pos) and - result = "Argument[" + getParameterPosition(pos) + "]" - ) - or - sc = TReturnSummaryComponent(getReturnValueKind()) and result = "ReturnValue" - } - - /** Gets a textual representation of this stack used for flow summaries. */ - string getComponentStack(SummaryComponentStack stack) { - exists(SummaryComponent head, SummaryComponentStack tail | - head = stack.head() and - tail = stack.tail() and - result = getComponentStack(tail) + "." + getComponent(head) - ) - or - exists(SummaryComponent c | - stack = TSingletonSummaryComponentStack(c) and - result = getComponent(c) - ) - } - /** * A class that exists for QL technical reasons only (the IPA type used * to represent component stacks needs to be bounded). @@ -505,6 +477,9 @@ module Private { or // Add the post-update node corresponding to the requested argument node outputState(c, s) and isCallbackParameter(s) + or + // Add the parameter node for parameter side-effects + outputState(c, s) and s = SummaryComponentStack::argument(_) } private newtype TSummaryNodeState = @@ -530,7 +505,7 @@ module Private { * this state represents that the components in `s` _remain to be written_ to * the output. */ - class SummaryNodeState extends TSummaryNodeState { + private class SummaryNodeState extends TSummaryNodeState { /** Holds if this state is a valid input state for `c`. */ pragma[nomagic] predicate isInputState(SummarizedCallable c, SummaryComponentStack s) { @@ -559,6 +534,42 @@ module Private { } } + private newtype TSummaryNode = + TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { + summaryNodeRange(c, state) + } or + TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { + summaryParameterNodeRange(c, pos) + } + + abstract class SummaryNode extends TSummaryNode { + abstract string toString(); + + abstract SummarizedCallable getSummarizedCallable(); + } + + private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { + private SummarizedCallable c; + private SummaryNodeState state; + + SummaryInternalNode() { this = TSummaryInternalNode(c, state) } + + override string toString() { result = "[summary] " + state + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + + private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { + private SummarizedCallable c; + private ParameterPosition pos; + + SummaryParamNode() { this = TSummaryParameterNode(c, pos) } + + override string toString() { result = "[summary param] " + pos + " in " + c } + + override SummarizedCallable getSummarizedCallable() { result = c } + } + /** * Holds if `state` represents having read from a parameter at position * `pos` in `c`. In this case we are not synthesizing a data-flow node, @@ -574,7 +585,7 @@ module Private { * Holds if a synthesized summary node is needed for the state `state` in summarized * callable `c`. */ - predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { state.isInputState(c, _) and not parameterReadState(c, state, _) or @@ -582,22 +593,22 @@ module Private { } pragma[noinline] - private Node summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isInputState(c, s) | - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) or exists(ParameterPosition pos | parameterReadState(c, state, pos) and - result.(ParamNode).isParameterOf(inject(c), pos) + result = TSummaryParameterNode(c, pos) ) ) } pragma[noinline] - private Node summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { exists(SummaryNodeState state | state.isOutputState(c, s) and - result = summaryNode(c, state) + result = TSummaryInternalNode(c, state) ) } @@ -605,12 +616,14 @@ module Private { * Holds if a write targets `post`, which is a post-update node for a * parameter at position `pos` in `c`. */ - private predicate isParameterPostUpdate(Node post, SummarizedCallable c, ParameterPosition pos) { + private predicate isParameterPostUpdate( + SummaryNode post, SummarizedCallable c, ParameterPosition pos + ) { post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) } /** Holds if a parameter node at position `pos` is required for `c`. */ - predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { parameterReadState(c, _, pos) or // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context @@ -618,7 +631,7 @@ module Private { } private predicate callbackOutput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ReturnKind rk + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and @@ -626,7 +639,7 @@ module Private { } private predicate callbackInput( - SummarizedCallable c, SummaryComponentStack s, Node receiver, ArgumentPosition pos + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and @@ -634,7 +647,7 @@ module Private { } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ - predicate summaryCallbackRange(SummarizedCallable c, Node receiver) { + predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { callbackOutput(c, _, receiver, _) or callbackInput(c, _, receiver, _) @@ -647,10 +660,10 @@ module Private { * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and * `getCallbackReturnType()`. */ - DataFlowType summaryNodeType(Node n) { - exists(Node pre | + DataFlowType summaryNodeType(SummaryNode n) { + exists(SummaryNode pre | summaryPostUpdateNode(n, pre) and - result = getNodeType(pre) + result = summaryNodeType(pre) ) or exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | @@ -662,12 +675,12 @@ module Private { ) or head = TWithoutContentSummaryComponent(_) and - result = getNodeType(summaryNodeInputState(c, s.tail())) + result = summaryNodeType(summaryNodeInputState(c, s.tail())) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = - getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), rk) ) or @@ -675,6 +688,11 @@ module Private { head = TSyntheticGlobalSummaryComponent(sg) and result = getSyntheticGlobalType(sg) ) + or + exists(ParameterPosition pos | + head = TArgumentSummaryComponent(pos) and + result = getParameterType(c, pos) + ) ) or n = summaryNodeOutputState(c, s) and @@ -691,7 +709,7 @@ module Private { or exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = - getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), + getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), s.tail())), pos) ) or @@ -703,9 +721,14 @@ module Private { ) } + /** Holds if summary node `p` is a parameter with position `pos`. */ + predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { + p = TSummaryParameterNode(_, pos) + } + /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ - predicate summaryOutNode(DataFlowCall c, Node out, ReturnKind rk) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryOutNode(DataFlowCall c, SummaryNode out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackOutput(callable, s, receiver, rk) and out = summaryNodeInputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -713,8 +736,8 @@ module Private { } /** Holds if summary node `arg` is at position `pos` in the call `c`. */ - predicate summaryArgumentNode(DataFlowCall c, Node arg, ArgumentPosition pos) { - exists(SummarizedCallable callable, SummaryComponentStack s, Node receiver | + predicate summaryArgumentNode(DataFlowCall c, SummaryNode arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s, SummaryNode receiver | callbackInput(callable, s, receiver, pos) and arg = summaryNodeOutputState(callable, s) and c = summaryDataFlowCall(receiver) @@ -722,10 +745,10 @@ module Private { } /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(Node post, Node pre) { + predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and - pre.(ParamNode).isParameterOf(inject(c), pos) + pre = TSummaryParameterNode(c, pos) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -736,7 +759,7 @@ module Private { } /** Holds if summary node `ret` is a return node of kind `rk`. */ - predicate summaryReturnNode(Node ret, ReturnKind rk) { + predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { exists(SummaryComponentStack s | ret = summaryNodeOutputState(_, s) and s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) @@ -748,7 +771,9 @@ module Private { * node, and back out to `p`. */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { - exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(inject(c), ppos) | + exists(SummarizedCallable c, ParameterPosition ppos | + p.isParameterOf(inject(c), pragma[only_bind_into](ppos)) + | exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -763,7 +788,7 @@ module Private { * Holds if there is a local step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryLocalStep(Node pred, Node succ, boolean preservesValue) { + predicate summaryLocalStep(SummaryNode pred, SummaryNode succ, boolean preservesValue) { exists( SummarizedCallable c, SummaryComponentStack inputContents, SummaryComponentStack outputContents @@ -789,7 +814,7 @@ module Private { * Holds if there is a read step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryReadStep(Node pred, ContentSet c, Node succ) { + predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and @@ -801,7 +826,7 @@ module Private { * Holds if there is a store step of content `c` from `pred` to `succ`, which * is synthesized from a flow summary. */ - predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { + predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and succ = summaryNodeOutputState(sc, s.tail()) and @@ -813,7 +838,7 @@ module Private { * Holds if there is a jump step from `pred` to `succ`, which is synthesized * from a flow summary. */ - predicate summaryJumpStep(Node pred, Node succ) { + predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { exists(SummaryComponentStack s | s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and pred = summaryNodeOutputState(_, s) and @@ -840,9 +865,9 @@ module Private { * `a` on line 2 to the post-update node for `a` on that line (via an intermediate * node where field `b` is cleared). */ - predicate summaryClearsContent(Node n, ContentSet c) { + predicate summaryClearsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withoutContent(c) ) @@ -852,9 +877,9 @@ module Private { * Holds if the value that is being tracked is expected to be stored inside * content `c` at `n`. */ - predicate summaryExpectsContent(Node n, ContentSet c) { + predicate summaryExpectsContent(SummaryNode n, ContentSet c) { exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = summaryNode(sc, state) and + n = TSummaryInternalNode(sc, state) and state.isInputState(sc, stack) and stack.head() = SummaryComponent::withContent(c) ) @@ -862,17 +887,17 @@ module Private { pragma[noinline] private predicate viableParam( - DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, ParamNode p + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p ) { exists(DataFlowCallable c | c = inject(sc) and - p.isParameterOf(c, ppos) and + p = TSummaryParameterNode(sc, ppos) and c = viableCallable(call) ) } pragma[nomagic] - private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { + private SummaryParamNode summaryArgParam(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { exists(ParameterPosition ppos | argumentPositionMatch(call, arg, ppos) and viableParam(call, sc, ppos, result) @@ -884,12 +909,12 @@ module Private { * local steps. `clearsOrExpects` records whether any node on the path from `p` to * `n` either clears or expects contents. */ - private predicate paramReachesLocal(ParamNode p, Node n, boolean clearsOrExpects) { + private predicate paramReachesLocal(SummaryParamNode p, SummaryNode n, boolean clearsOrExpects) { viableParam(_, _, _, p) and n = p and clearsOrExpects = false or - exists(Node mid, boolean clearsOrExpectsMid | + exists(SummaryNode mid, boolean clearsOrExpectsMid | paramReachesLocal(p, mid, clearsOrExpectsMid) and summaryLocalStep(mid, n, true) and if @@ -909,21 +934,33 @@ module Private { */ pragma[nomagic] predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { - exists(ParamNode p, ParameterPosition ppos, Node ret | + exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | paramReachesLocal(p, ret, true) and - p = summaryArgParam0(_, arg, sc) and - p.isParameterOf(_, pragma[only_bind_into](ppos)) and + p = summaryArgParam(_, arg, sc) and + p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) ) } + pragma[nomagic] + private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { + summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) + or + exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | + paramReachesLocal(p, pre, _) and + summaryPostUpdateNode(ret, pre) and + p = TSummaryParameterNode(_, pos) and + rk.(ParamUpdateReturnKind).getPosition() = pos + ) + } + bindingset[ret] - private ParamNode summaryArgParam( - ArgNode arg, ReturnNodeExt ret, OutNodeExt out, SummarizedCallable sc + private SummaryParamNode summaryArgParamRetOut( + ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc ) { exists(DataFlowCall call, ReturnKindExt rk | - result = summaryArgParam0(call, arg, sc) and - ret.getKind() = pragma[only_bind_into](rk) and + result = summaryArgParam(call, arg, sc) and + summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and out = pragma[only_bind_into](rk).getAnOutNode(call) ) } @@ -936,9 +973,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnKind rk, ReturnNode ret, DataFlowCall call | - summaryLocalStep(summaryArgParam0(call, arg, sc), ret, true) and - ret.getKind() = pragma[only_bind_into](rk) and + exists(ReturnKind rk, SummaryNode ret, DataFlowCall call | + summaryLocalStep(summaryArgParam(call, arg, sc), ret, true) and + summaryReturnNode(ret, pragma[only_bind_into](rk)) and out = getAnOutNode(call, pragma[only_bind_into](rk)) ) } @@ -951,7 +988,9 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { - exists(ReturnNodeExt ret | summaryLocalStep(summaryArgParam(arg, ret, out, sc), ret, false)) + exists(SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), ret, false) + ) } /** @@ -962,8 +1001,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryReadStep(summaryArgParam(arg, ret, out, sc), c, mid) and + exists(SummaryNode mid, SummaryNode ret | + summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and summaryLocalStep(mid, ret, _) ) } @@ -976,8 +1015,8 @@ module Private { * be useful to include in the exposed local data-flow/taint-tracking relations. */ predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(Node mid, ReturnNodeExt ret | - summaryLocalStep(summaryArgParam(arg, ret, out, sc), mid, _) and + exists(SummaryNode mid, SummaryNode ret | + summaryLocalStep(summaryArgParamRetOut(arg, ret, out, sc), mid, _) and summaryStoreStep(mid, c, ret) ) } @@ -1310,8 +1349,8 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() // Callable information - + getComponentStack(input) + ";" // input - + getComponentStack(output) + ";" // output + + input.getMadRepresentation() + ";" // input + + output.getMadRepresentation() + ";" // output + renderKind(preservesValue) + ";" // kind + renderProvenance(c) // provenance ) @@ -1344,11 +1383,11 @@ module Private { } private newtype TNodeOrCall = - MkNode(Node n) { + MkNode(SummaryNode n) { exists(RelevantSummarizedCallable c | - n = summaryNode(c, _) + n = TSummaryInternalNode(c, _) or - n.(ParamNode).isParameterOf(inject(c), _) + n = TSummaryParameterNode(c, _) ) } or MkCall(DataFlowCall call) { @@ -1357,7 +1396,7 @@ module Private { } private class NodeOrCall extends TNodeOrCall { - Node asNode() { this = MkNode(result) } + SummaryNode asNode() { this = MkNode(result) } DataFlowCall asCall() { this = MkCall(result) } @@ -1377,9 +1416,11 @@ module Private { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.asNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - or - this.asCall().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 } } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImplSpecific.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImplSpecific.qll index d0d9f4b1b5f..e97014a5451 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImplSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImplSpecific.qll @@ -18,15 +18,15 @@ DataFlowCallable inject(SummarizedCallable c) { result.asLibraryCallable() = c } /** Gets the parameter position representing a callback itself, if any. */ ArgumentPosition callbackSelfParameterPosition() { none() } // disables implicit summary flow to `self` for callbacks -/** Gets the synthesized summary data-flow node for the given values. */ -Node summaryNode(SummarizedCallable c, SummaryNodeState state) { result = TSummaryNode(c, state) } - /** Gets the synthesized data-flow call for `receiver`. */ -SummaryCall summaryDataFlowCall(Node receiver) { receiver = result.getReceiver() } +SummaryCall summaryDataFlowCall(SummaryNode receiver) { receiver = result.getReceiver() } /** Gets the type of content `c`. */ DataFlowType getContentType(ContentSet c) { any() } +/** Gets the type of the parameter at the given position. */ +DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos) { any() } + /** Gets the return type of kind `rk` for callable `c`. */ bindingset[c, rk] DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk) { any() } @@ -139,8 +139,53 @@ SummaryComponent interpretComponentSpecific(AccessPathToken c) { ) } -/** Gets the textual representation of a summary component in the format used for flow summaries. */ -string getComponentSpecific(SummaryComponent sc) { none() } +private string getContentSpecific(Content c) { + exists(string name | c = TFieldContent(name) and result = "Field[" + name + "]") + or + exists(ConstantValue cv | + c = TKnownElementContent(cv) and result = "Element[" + cv.serialize() + "!]" + ) + or + c = TUnknownElementContent() and result = "Element[?]" +} + +private string getContentSetSpecific(ContentSet cs) { + exists(Content c | cs = TSingletonContent(c) and result = getContentSpecific(c)) + or + cs = TAnyElementContent() and result = "Element[any]" + or + exists(Content::KnownElementContent kec | + cs = TKnownOrUnknownElementContent(kec) and + result = "Element[" + kec.getIndex().serialize() + "]" + ) + or + exists(int lower, boolean includeUnknown, string unknown | + cs = TElementLowerBoundContent(lower, includeUnknown) and + (if includeUnknown = true then unknown = "" else unknown = "!") and + result = "Element[" + lower + ".." + unknown + "]" + ) +} + +/** Gets the textual representation of a summary component in the format used for MaD models. */ +string getMadRepresentationSpecific(SummaryComponent sc) { + exists(ContentSet cs | sc = TContentSummaryComponent(cs) and result = getContentSetSpecific(cs)) + or + exists(ContentSet cs | + sc = TWithoutContentSummaryComponent(cs) and + result = "WithoutElement[" + getContentSetSpecific(cs) + "]" + ) + or + exists(ContentSet cs | + sc = TWithContentSummaryComponent(cs) and + result = "WithElement[" + getContentSetSpecific(cs) + "]" + ) + or + exists(ReturnKind rk | + sc = TReturnSummaryComponent(rk) and + not rk = getReturnValueKind() and + result = "ReturnValue[" + rk + "]" + ) +} /** Gets the textual representation of a parameter position in the format used for flow summaries. */ string getParameterPosition(ParameterPosition pos) { @@ -170,6 +215,9 @@ string getParameterPosition(ParameterPosition pos) { or pos.isAnyNamed() and result = "any-named" + or + pos.isHashSplat() and + result = "hash-splat" } /** Gets the textual representation of an argument position in the format used for flow summaries. */ diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll index 3381187985a..060f1d33bda 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingPrivate.qll @@ -96,7 +96,8 @@ private module Cached { ) ) or - FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, false) + FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom.(FlowSummaryNode).getSummaryNode(), + nodeTo.(FlowSummaryNode).getSummaryNode(), false) or any(FlowSteps::AdditionalTaintStep s).step(nodeFrom, nodeTo) or diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll b/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll index 49281c609bd..6963f37a81c 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Rack.qll @@ -2,47 +2,13 @@ * Provides modeling for the Rack library. */ -private import codeql.ruby.controlflow.CfgNodes::ExprNodes -private import codeql.ruby.DataFlow -private import codeql.ruby.typetracking.TypeTracker - /** * Provides modeling for the Rack library. */ module Rack { - /** - * A class that may be a rack application. - * This is a class that has a `call` method that takes a single argument - * (traditionally called `env`) and returns a rack-compatible response. - */ - class AppCandidate extends DataFlow::ClassNode { - private DataFlow::MethodNode call; + import rack.internal.App + import rack.internal.Response::Public as Response - AppCandidate() { - call = this.getInstanceMethod("call") and - call.getNumberOfParameters() = 1 and - call.getAReturnNode() = trackRackResponse() - } - - /** - * Gets the environment of the request, which is the lone parameter to the `call` method. - */ - DataFlow::ParameterNode getEnv() { result = call.getParameter(0) } - } - - private predicate isRackResponse(DataFlow::Node r) { - // [status, headers, body] - r.asExpr().(ArrayLiteralCfgNode).getNumberOfArguments() = 3 - } - - private DataFlow::LocalSourceNode trackRackResponse(TypeTracker t) { - t.start() and - isRackResponse(result) - or - exists(TypeTracker t2 | result = trackRackResponse(t2).track(t2, t)) - } - - private DataFlow::Node trackRackResponse() { - trackRackResponse(TypeTracker::end()).flowsTo(result) - } + /** DEPRECATED: Alias for App::AppCandidate */ + deprecated class AppCandidate = App::AppCandidate; } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sinatra.qll b/ruby/ql/lib/codeql/ruby/frameworks/Sinatra.qll index 4b4f1bbd404..ef9a9392527 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Sinatra.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sinatra.qll @@ -105,15 +105,25 @@ module Sinatra { * Gets the template file referred to by `erbCall`. * This works on the AST level to avoid non-monotonic reecursion in `ErbLocalsHashSyntheticGlobal`. */ + pragma[nomagic] private ErbFile getTemplateFile(MethodCall erbCall) { erbCall.getMethodName() = "erb" and result.getTemplateName() = erbCall.getArgument(0).getConstantValue().getStringlikeValue() and result.getRelativePath().matches("%views/%") } + pragma[nomagic] + private predicate erbCallAtLocation(MethodCall erbCall, ErbFile erbFile, Location l) { + erbCall.getMethodName() = "erb" and + erbFile = getTemplateFile(erbCall) and + l = erbCall.getLocation() + } + /** * Like `Location.toString`, but displays the relative path rather than the full path. */ + bindingset[loc] + pragma[inline_late] private string locationRelativePathToString(Location loc) { result = loc.getFile().getRelativePath() + "@" + loc.getStartLine() + ":" + loc.getStartColumn() + ":" + @@ -121,7 +131,7 @@ module Sinatra { } /** - * A synthetic global representing the hash of local variables passed to an ERB template. + * A synthetic global representing the hash of local variables passed to an ERB template. */ class ErbLocalsHashSyntheticGlobal extends SummaryComponent::SyntheticGlobal { private string id; @@ -129,10 +139,11 @@ module Sinatra { private ErbFile erbFile; ErbLocalsHashSyntheticGlobal() { - this = "SinatraErbLocalsHash(" + id + ")" and - id = erbFile.getRelativePath() + "," + locationRelativePathToString(erbCall.getLocation()) and - erbCall.getMethodName() = "erb" and - erbFile = getTemplateFile(erbCall) + exists(Location l | + erbCallAtLocation(erbCall, erbFile, l) and + id = erbFile.getRelativePath() + "," + locationRelativePathToString(l) and + this = "SinatraErbLocalsHash(" + id + ")" + ) } /** diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll index 70744d6fcc8..77e26ca13d7 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll @@ -48,7 +48,7 @@ module Sqlite3 { this.getMethodName() = ["columns", "execute", "execute!", "get_metadata", "types"] } - override DataFlow::Node getSql() { result = stmt.getReceiver() } + override DataFlow::Node getSql() { result = stmt.getSql() } } /** Gets the name of a method called against a database that executes an SQL statement. */ diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Yaml.qll b/ruby/ql/lib/codeql/ruby/frameworks/Yaml.qll new file mode 100644 index 00000000000..65596df7fe2 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Yaml.qll @@ -0,0 +1,35 @@ +/** + * Provides modeling for the `YAML` and `Psych` libraries. + */ + +private import codeql.ruby.dataflow.FlowSteps +private import codeql.ruby.DataFlow +private import codeql.ruby.ApiGraphs + +/** + * A taint step related to the result of `YAML.parse` calls, or similar. + * In the following example, this step will propagate taint from + * `source` to `sink`: + * + * ```rb + * x = source + * result = YAML.parse(x) + * sink result.to_ruby # Unsafe call + * ``` + */ +private class YamlParseStep extends AdditionalTaintStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + exists(DataFlow::CallNode yamlParserMethod | + succ = yamlParserMethod.getAMethodCall("to_ruby") and + ( + yamlParserMethod = yamlNode().getAMethodCall(["parse", "parse_stream"]) and + pred = [yamlParserMethod.getArgument(0), yamlParserMethod.getKeywordArgument("yaml")] + or + yamlParserMethod = yamlNode().getAMethodCall("parse_file") and + pred = [yamlParserMethod.getArgument(0), yamlParserMethod.getKeywordArgument("filename")] + ) + ) + } +} + +private API::Node yamlNode() { result = API::getTopLevelMember(["YAML", "Psych"]) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Request.qll b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Request.qll index d749b87f273..b24301b676d 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Request.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Request.qll @@ -128,7 +128,7 @@ module Request { private import codeql.ruby.frameworks.Rack private class RackEnv extends Env { - RackEnv() { this = any(Rack::AppCandidate app).getEnv().getALocalUse() } + RackEnv() { this = any(Rack::App::RequestHandler handler).getEnv().getALocalUse() } } /** diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index a1007f9806a..a6f5a5e36ff 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -2067,7 +2067,11 @@ module Enumerable { override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and - output = ["Argument[block].Parameter[0]", "ReturnValue.Element[?]"] and + output = "Argument[block].Parameter[0]" and + preservesValue = true + or + input = "Argument[block].ReturnValue" and + output = "ReturnValue.Element[?]" and preservesValue = true } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll index 227f4ea22fb..2e598711fcc 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll @@ -643,6 +643,15 @@ module ModelOutput { baseNode = getInvocationFromPath(type, path) } + /** + * Holds if a `baseNode` is a callable identified by the `type,path` part of a summary row. + */ + cached + predicate resolvedSummaryRefBase(string type, string path, API::Node baseNode) { + summaryModel(type, path, _, _, _) and + baseNode = getNodeFromPath(type, path) + } + /** * Holds if `node` is seen as an instance of `type` due to a type definition * contributed by a CSV model. @@ -653,6 +662,17 @@ module ModelOutput { import Cached import Specific::ModelOutputSpecific + private import codeql.mad.ModelValidation as SharedModelVal + + private module KindValConfig implements SharedModelVal::KindValidationConfigSig { + predicate summaryKind(string kind) { summaryModel(_, _, _, _, kind) } + + predicate sinkKind(string kind) { sinkModel(_, _, kind) } + + predicate sourceKind(string kind) { sourceModel(_, _, kind) } + } + + private module KindVal = SharedModelVal::KindValidation; /** * Gets an error message relating to an invalid CSV row in a model. @@ -698,5 +718,8 @@ module ModelOutput { not isValidNoArgumentTokenInIdentifyingAccessPath(token.getName()) and result = "Invalid token '" + token + "' is missing its arguments, in access path: " + path ) + or + // Check for invalid model kinds + result = KindVal::getInvalidModelKind() } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll new file mode 100644 index 00000000000..748291f55bd --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/App.qll @@ -0,0 +1,89 @@ +/** + * Provides modeling for Rack applications. + */ + +private import codeql.ruby.AST +private import codeql.ruby.ApiGraphs +private import codeql.ruby.DataFlow +private import codeql.ruby.typetracking.TypeTracker +private import Response::Private as RP + +/** + * A callable node that takes a single argument and, if it has a method name, + * is called "call". + */ +private class PotentialRequestHandler extends DataFlow::CallableNode { + PotentialRequestHandler() { + this.getNumberOfParameters() = 1 and + ( + this.(DataFlow::MethodNode).getMethodName() = "call" + or + not this instanceof DataFlow::MethodNode and + exists(DataFlow::CallNode cn | cn.getMethodName() = "run" | + this.(DataFlow::LocalSourceNode).flowsTo(cn.getArgument(0)) + or + // TODO: `Proc.new` should automatically propagate flow from its block argument + any(DataFlow::CallNode proc | + proc = API::getTopLevelMember("Proc").getAnInstantiation() and + proc.getBlock() = this + ).(DataFlow::LocalSourceNode).flowsTo(cn.getArgument(0)) + ) + ) + } +} + +private DataFlow::LocalSourceNode trackRackResponse(TypeBackTracker t, PotentialRequestHandler call) { + t.start() and + result = call.getAReturnNode().getALocalSource() + or + exists(TypeBackTracker t2 | result = trackRackResponse(t2, call).backtrack(t2, t)) +} + +private RP::PotentialResponseNode trackRackResponse(PotentialRequestHandler call) { + result = trackRackResponse(TypeBackTracker::end(), call) +} + +/** + * Provides modeling for Rack applications. + */ +module App { + /** + * DEPRECATED: Use `RequestHandler` instead. + * A class that may be a rack application. + * This is a class that has a `call` method that takes a single argument + * (traditionally called `env`) and returns a rack-compatible response. + */ + deprecated class AppCandidate extends DataFlow::ClassNode { + private RequestHandler call; + private RP::PotentialResponseNode resp; + + AppCandidate() { + call = this.getInstanceMethod("call") and + call.getNumberOfParameters() = 1 and + resp = trackRackResponse(call) + } + + /** + * Gets the environment of the request, which is the lone parameter to the `call` method. + */ + DataFlow::ParameterNode getEnv() { result = call.getParameter(0) } + + /** Gets the response returned from a request to this application. */ + RP::PotentialResponseNode getResponse() { result = resp } + } + + /** + * A callable node that looks like it implements the rack specification. + */ + class RequestHandler extends PotentialRequestHandler { + private RP::PotentialResponseNode resp; + + RequestHandler() { resp = trackRackResponse(this) } + + /** Gets the `env` parameter passed to this request handler. */ + DataFlow::ParameterNode getEnv() { result = this.getParameter(0) } + + /** Gets a response returned from this request handler. */ + RP::PotentialResponseNode getAResponse() { result = resp } + } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/Response.qll b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/Response.qll new file mode 100644 index 00000000000..5f5b1601453 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/rack/internal/Response.qll @@ -0,0 +1,117 @@ +/** + * Provides modeling for the `Response` component of the `Rack` library. + */ + +private import codeql.ruby.AST +private import codeql.ruby.ApiGraphs +private import codeql.ruby.Concepts +private import codeql.ruby.controlflow.CfgNodes::ExprNodes +private import codeql.ruby.DataFlow +private import codeql.ruby.typetracking.TypeTracker +private import App as A + +/** Contains implementation details for modeling `Rack::Response`. */ +module Private { + /** A `DataFlow::Node` that may be a rack response. This is detected heuristically, if something "looks like" a rack response syntactically then we consider it to be a potential response node. */ + abstract class PotentialResponseNode extends DataFlow::Node { + /** Gets the headers returned with this response. */ + abstract DataFlow::Node getHeaders(); + + /** Gets the body of this response. */ + abstract DataFlow::Node getBody(); + } + + /** A rack response constructed directly using an array literal. */ + private class PotentialArrayResponse extends PotentialResponseNode, DataFlow::ArrayLiteralNode { + // [status, headers, body] + PotentialArrayResponse() { this.getNumberOfArguments() = 3 } + + override DataFlow::Node getHeaders() { result = this.getElement(1) } + + override DataFlow::Node getBody() { result = this.getElement(2) } + } + + /** A rack response constructed by calling `finish` on an instance of `Rack::Response`. */ + private class RackResponseConstruction extends PotentialResponseNode, DataFlow::CallNode { + private DataFlow::CallNode responseConstruction; + + // (body, status, headers) + RackResponseConstruction() { + responseConstruction = + API::getTopLevelMember("Rack").getMember("Response").getAnInstantiation() and + this = responseConstruction.getAMethodCall() and + this.getMethodName() = "finish" + } + + override DataFlow::Node getHeaders() { result = responseConstruction.getArgument(2) } + + override DataFlow::Node getBody() { result = responseConstruction.getArgument(0) } + } +} + +/** + * Provides modeling for the `Response` component of the `Rack` library. + */ +module Public { + bindingset[headerName] + private DataFlow::Node getHeaderValue(ResponseNode resp, string headerName) { + exists(DataFlow::Node headers | headers = resp.getHeaders() | + // set via `headers.=` + exists( + DataFlow::CallNode contentTypeAssignment, Assignment assignment, + DataFlow::PostUpdateNode postUpdateHeaders + | + contentTypeAssignment.getMethodName() = headerName.replaceAll("-", "_").toLowerCase() + "=" and + assignment = + contentTypeAssignment.getArgument(0).(DataFlow::OperationNode).asOperationAstNode() and + postUpdateHeaders.(DataFlow::LocalSourceNode).flowsTo(headers) and + postUpdateHeaders.getPreUpdateNode() = contentTypeAssignment.getReceiver() + | + result.asExpr().getExpr() = assignment.getRightOperand() + ) + or + // set within a hash + exists(DataFlow::HashLiteralNode headersHash | headersHash.flowsTo(headers) | + result = + headersHash + .getElementFromKey(any(ConstantValue v | + v.getStringlikeValue().toLowerCase() = headerName.toLowerCase() + )) + ) + or + // pair in a `Rack::Response.new` constructor + exists(DataFlow::PairNode headerPair | headerPair = headers | + headerPair.getKey().getConstantValue().getStringlikeValue().toLowerCase() = + headerName.toLowerCase() and + result = headerPair.getValue() + ) + ) + } + + /** A `DataFlow::Node` returned from a rack request. */ + class ResponseNode extends Http::Server::HttpResponse::Range instanceof Private::PotentialResponseNode + { + ResponseNode() { this = any(A::App::RequestHandler handler).getAResponse() } + + override DataFlow::Node getBody() { result = this.(Private::PotentialResponseNode).getBody() } + + override DataFlow::Node getMimetypeOrContentTypeArg() { + result = getHeaderValue(this, "content-type") + } + + /** Gets the headers returned with this response. */ + DataFlow::Node getHeaders() { result = this.(Private::PotentialResponseNode).getHeaders() } + + // TODO: is there a sensible value for this? + override string getMimetypeDefault() { none() } + } + + /** A `DataFlow::Node` returned from a rack request that has a redirect HTTP status code. */ + class RedirectResponse extends ResponseNode, Http::Server::HttpRedirectResponse::Range { + private DataFlow::Node redirectLocation; + + RedirectResponse() { redirectLocation = getHeaderValue(this, "location") } + + override DataFlow::Node getRedirectLocation() { result = redirectLocation } + } +} diff --git a/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll b/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll index 9160bf60506..d1f96ec407e 100644 --- a/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll +++ b/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll @@ -195,8 +195,8 @@ abstract class RegExp extends Ast::StringlikeLiteral { /** * Holds if the character set starting at `charset_start` contains a character range - * with lower bound found between `start` and `lower_end` - * and upper bound found between `upper_start` and `end`. + * with lower bound found between `start` and `lowerEnd` + * and upper bound found between `upperStart` and `end`. */ predicate charRange(int charsetStart, int start, int lowerEnd, int upperStart, int end) { exists(int index | @@ -844,11 +844,11 @@ abstract class RegExp extends Ast::StringlikeLiteral { } /** - * Holds if a qualified part is found between `start` and `part_end` and the qualifier is - * found between `part_end` and `end`. + * Holds if a qualified part is found between `start` and `partEnd` and the qualifier is + * found between `partEnd` and `end`. * - * `maybe_empty` is true if the part is optional. - * `may_repeat_forever` is true if the part may be repeated unboundedly. + * `maybeEmpty` is true if the part is optional. + * `mayRepeatForever` is true if the part may be repeated unboundedly. */ predicate qualifiedPart( int start, int partEnd, int end, boolean maybeEmpty, boolean mayRepeatForever diff --git a/ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll b/ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll index 10f07b39725..2a2d4d4d601 100644 --- a/ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll @@ -15,6 +15,14 @@ private class DangerousPrefix extends string { this = "