Address more parts of Anders review.

This commit is contained in:
Cornelius Riemenschneider 2019-09-30 17:00:07 +02:00 коммит произвёл Anders Schack-Mulligen
Родитель 812a0bcb16
Коммит 9ef61bd43c
13 изменённых файлов: 185 добавлений и 90 удалений

Просмотреть файл

@ -1734,7 +1734,7 @@ private class PathNodeSink extends PathNode, TPathNodeSink {
* a callable is recorded by `cc`.
*/
private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, AccessPath ap) {
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc) |
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc, node) |
localFlowBigStep(mid.getNode(), node, true, mid.getConfiguration(), localCC) and
cc = mid.getCallContext() and
ap = mid.getAp()

Просмотреть файл

@ -1734,7 +1734,7 @@ private class PathNodeSink extends PathNode, TPathNodeSink {
* a callable is recorded by `cc`.
*/
private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, AccessPath ap) {
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc) |
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc, node) |
localFlowBigStep(mid.getNode(), node, true, mid.getConfiguration(), localCC) and
cc = mid.getCallContext() and
ap = mid.getAp()

Просмотреть файл

@ -1734,7 +1734,7 @@ private class PathNodeSink extends PathNode, TPathNodeSink {
* a callable is recorded by `cc`.
*/
private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, AccessPath ap) {
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc) |
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc, node) |
localFlowBigStep(mid.getNode(), node, true, mid.getConfiguration(), localCC) and
cc = mid.getCallContext() and
ap = mid.getAp()

Просмотреть файл

@ -1734,7 +1734,7 @@ private class PathNodeSink extends PathNode, TPathNodeSink {
* a callable is recorded by `cc`.
*/
private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, AccessPath ap) {
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc) |
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc, node) |
localFlowBigStep(mid.getNode(), node, true, mid.getConfiguration(), localCC) and
cc = mid.getCallContext() and
ap = mid.getAp()

Просмотреть файл

@ -1734,7 +1734,7 @@ private class PathNodeSink extends PathNode, TPathNodeSink {
* a callable is recorded by `cc`.
*/
private predicate pathStep(PathNodeMid mid, Node node, CallContext cc, AccessPath ap) {
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc) |
exists(LocalCallContext localCC | localCC = getMatchingLocalCallContext(cc, node) |
localFlowBigStep(mid.getNode(), node, true, mid.getConfiguration(), localCC) and
cc = mid.getCallContext() and
ap = mid.getAp()

Просмотреть файл

@ -120,6 +120,7 @@ private module ImplCommon {
int i, ArgumentNode arg, CallContext outercc, DataFlowCall call
) {
exists(DataFlowCallable c | argumentOf(call, i, arg, c) |
(
outercc = TAnyCallContext()
or
outercc = TSomeCall(getAParameter(c), _)
@ -127,6 +128,8 @@ private module ImplCommon {
exists(DataFlowCall other | outercc = TSpecificCall(other, _, _) |
recordDataFlowCallSite(other, c)
)
) and
not isUnreachableInCall(arg, outercc.(CallContextSpecificCall).getCall())
)
}
@ -180,14 +183,16 @@ private module ImplCommon {
exists(Node mid |
parameterValueFlow(p, mid, cc) and
step(mid, node) and
compatibleTypes(p.getType(), node.getType())
compatibleTypes(p.getType(), node.getType()) and
not isUnreachableInCall(node, cc.(CallContextSpecificCall).getCall())
)
or
// flow through a callable
exists(Node arg |
parameterValueFlow(p, arg, cc) and
argumentValueFlowsThrough(arg, node, cc) and
compatibleTypes(p.getType(), node.getType())
compatibleTypes(p.getType(), node.getType()) and
not isUnreachableInCall(node, cc.(CallContextSpecificCall).getCall())
)
}
@ -220,6 +225,7 @@ private module ImplCommon {
argumentValueFlowsThrough0(call, arg, kind, cc)
|
out = getAnOutNode(call, kind) and
not isUnreachableInCall(out, cc.(CallContextSpecificCall).getCall()) and
compatibleTypes(arg.getType(), out.getType())
)
}
@ -675,16 +681,14 @@ private module ImplCommon {
abstract predicate validFor(Node n);
}
LocalCallContext getMatchingLocalCallContext(CallContext ctx) {
(
not ctx instanceof CallContextSpecificCall or
not exists(TSpecificLocalCall(ctx.(CallContextSpecificCall).getCall()))
) and
exists(LocalCallContextAny l | result = l)
or
exists(LocalCallContextSpecificCall l |
ctx.(CallContextSpecificCall).getCall() = l.getCall() and result = l
)
/**
* Gets a matching local call context given the call context and a node which is in
* the callable the call is targeting.
*/
LocalCallContext getMatchingLocalCallContext(CallContext ctx, Node n) {
if hasUnreachableNode(ctx.(CallContextSpecificCall).getCall(), n.getEnclosingCallable())
then result.(LocalCallContextSpecificCall).getCall() = ctx.(CallContextSpecificCall).getCall()
else result instanceof LocalCallContextAny
}
class LocalCallContextAny extends LocalCallContext, TAnyLocalCall {

Просмотреть файл

@ -3,6 +3,14 @@ public class A {
public static void sink(Object o) {
}
public Object flowThrough(Object o, boolean cond) {
if (cond) {
return o;
} else {
return null;
}
}
public void callSinkIfTrue(Object o, boolean cond) {
if (cond) {
sink(o);
@ -49,6 +57,7 @@ public class A {
callSinkIfFalse(new Integer(2), true);
callSinkFromLoop(new Integer(3), false);
localCallSensitivity(new Integer(4), false);
sink(flowThrough(new Integer(4), false));
// should exhibit flow
callSinkIfTrue(new Integer(1), true);
callSinkIfFalse(new Integer(2), false);
@ -57,6 +66,7 @@ public class A {
localCallSensitivity2(new Integer(4), true, true);
localCallSensitivity2(new Integer(4), false, true);
localCallSensitivity2(new Integer(4), true, false);
sink(flowThrough(new Integer(4), true));
// expected false positive
localCallSensitivity2(new Integer(4), false, false);
}
@ -69,11 +79,13 @@ public class A {
callSinkIfFalse(new Integer(5), t);
callSinkFromLoop(new Integer(6), f);
localCallSensitivity(new Integer(4), f);
sink(flowThrough(new Integer(4), f));
// should exhibit flow
callSinkIfTrue(new Integer(4), t);
callSinkIfFalse(new Integer(5), f);
callSinkFromLoop(new Integer(6), t);
localCallSensitivity(new Integer(4), t);
sink(flowThrough(new Integer(4), t));
}
public void f3(InterfaceA b) {

Просмотреть файл

@ -0,0 +1,42 @@
public class A2 {
public static void sink(Object o) {
}
public void m() {
}
public void callsite(InterfaceB intF) {
B b = new B();
// in both possible implementations of foo, this callsite is relevant
// in IntA, it improves virtual dispatch,
// and in IntB, it improves the dataflow analysis.
intF.foo(b, new Integer(5), false);
}
private class B extends A2 {
@Override
public void m() {
}
}
private class IntA implements InterfaceB {
@Override
public void foo(A2 obj, Object o, boolean cond) {
obj.m();
sink(o);
}
}
private class IntB implements InterfaceB {
@Override
public void foo(A2 obj, Object o, boolean cond) {
if (cond) {
sink(o);
}
}
}
}

Просмотреть файл

@ -0,0 +1,3 @@
public interface InterfaceB {
public void foo(A2 a, Object o, boolean cond);
}

Просмотреть файл

@ -1,76 +1,91 @@
edges
| A.java:6:29:6:36 | o [ : Number] | A.java:8:9:8:9 | o |
| A.java:12:30:12:37 | o [ : Number] | A.java:14:9:14:9 | o |
| A.java:18:31:18:38 | o [ : Number] | A.java:20:9:20:9 | o |
| A.java:24:35:24:42 | o [ : Number] | A.java:32:8:32:9 | o3 |
| A.java:35:36:35:43 | o [ : Number] | A.java:43:8:43:9 | o3 |
| A.java:35:36:35:43 | o [ : Number] | A.java:43:8:43:9 | o3 |
| A.java:35:36:35:43 | o [ : Number] | A.java:43:8:43:9 | o3 |
| A.java:53:18:53:31 | new Integer(...) [ : Number] | A.java:6:29:6:36 | o [ : Number] |
| A.java:54:19:54:32 | new Integer(...) [ : Number] | A.java:12:30:12:37 | o [ : Number] |
| A.java:55:20:55:33 | new Integer(...) [ : Number] | A.java:18:31:18:38 | o [ : Number] |
| A.java:56:24:56:37 | new Integer(...) [ : Number] | A.java:24:35:24:42 | o [ : Number] |
| A.java:57:25:57:38 | new Integer(...) [ : Number] | A.java:35:36:35:43 | o [ : Number] |
| A.java:58:25:58:38 | new Integer(...) [ : Number] | A.java:35:36:35:43 | o [ : Number] |
| A.java:59:25:59:38 | new Integer(...) [ : Number] | A.java:35:36:35:43 | o [ : Number] |
| A.java:61:25:61:38 | new Integer(...) [ : Number] | A.java:35:36:35:43 | o [ : Number] |
| A.java:73:18:73:31 | new Integer(...) [ : Number] | A.java:6:29:6:36 | o [ : Number] |
| A.java:74:19:74:32 | new Integer(...) [ : Number] | A.java:12:30:12:37 | o [ : Number] |
| A.java:75:20:75:33 | new Integer(...) [ : Number] | A.java:18:31:18:38 | o [ : Number] |
| A.java:76:24:76:37 | new Integer(...) [ : Number] | A.java:24:35:24:42 | o [ : Number] |
| A.java:87:20:87:33 | new Integer(...) [ : Number] | A.java:94:30:94:37 | o [ : Number] |
| A.java:88:21:88:34 | new Integer(...) [ : Number] | A.java:101:31:101:38 | o [ : Number] |
| A.java:89:26:89:39 | new Integer(...) [ : Number] | A.java:108:36:108:43 | o [ : Number] |
| A.java:94:30:94:37 | o [ : Number] | A.java:96:10:96:10 | o |
| A.java:101:31:101:38 | o [ : Number] | A.java:103:10:103:10 | o |
| A.java:108:36:108:43 | o [ : Number] | A.java:116:9:116:10 | o3 |
| A2.java:15:15:15:28 | new Integer(...) [ : Number] | A2.java:27:27:27:34 | o [ : Number] |
| A2.java:27:27:27:34 | o [ : Number] | A2.java:29:9:29:9 | o |
| A.java:14:29:14:36 | o [ : Number] | A.java:16:9:16:9 | o |
| A.java:20:30:20:37 | o [ : Number] | A.java:22:9:22:9 | o |
| A.java:26:31:26:38 | o [ : Number] | A.java:28:9:28:9 | o |
| A.java:32:35:32:42 | o [ : Number] | A.java:40:8:40:9 | o3 |
| A.java:43:36:43:43 | o [ : Number] | A.java:51:8:51:9 | o3 |
| A.java:43:36:43:43 | o [ : Number] | A.java:51:8:51:9 | o3 |
| A.java:43:36:43:43 | o [ : Number] | A.java:51:8:51:9 | o3 |
| A.java:62:18:62:31 | new Integer(...) [ : Number] | A.java:14:29:14:36 | o [ : Number] |
| A.java:63:19:63:32 | new Integer(...) [ : Number] | A.java:20:30:20:37 | o [ : Number] |
| A.java:64:20:64:33 | new Integer(...) [ : Number] | A.java:26:31:26:38 | o [ : Number] |
| A.java:65:24:65:37 | new Integer(...) [ : Number] | A.java:32:35:32:42 | o [ : Number] |
| A.java:66:25:66:38 | new Integer(...) [ : Number] | A.java:43:36:43:43 | o [ : Number] |
| A.java:67:25:67:38 | new Integer(...) [ : Number] | A.java:43:36:43:43 | o [ : Number] |
| A.java:68:25:68:38 | new Integer(...) [ : Number] | A.java:43:36:43:43 | o [ : Number] |
| A.java:69:20:69:33 | new Integer(...) [ : Number] | A.java:69:8:69:40 | flowThrough(...) |
| A.java:71:25:71:38 | new Integer(...) [ : Number] | A.java:43:36:43:43 | o [ : Number] |
| A.java:84:18:84:31 | new Integer(...) [ : Number] | A.java:14:29:14:36 | o [ : Number] |
| A.java:85:19:85:32 | new Integer(...) [ : Number] | A.java:20:30:20:37 | o [ : Number] |
| A.java:86:20:86:33 | new Integer(...) [ : Number] | A.java:26:31:26:38 | o [ : Number] |
| A.java:87:24:87:37 | new Integer(...) [ : Number] | A.java:32:35:32:42 | o [ : Number] |
| A.java:88:20:88:33 | new Integer(...) [ : Number] | A.java:88:8:88:37 | flowThrough(...) |
| A.java:99:20:99:33 | new Integer(...) [ : Number] | A.java:106:30:106:37 | o [ : Number] |
| A.java:100:21:100:34 | new Integer(...) [ : Number] | A.java:113:31:113:38 | o [ : Number] |
| A.java:101:26:101:39 | new Integer(...) [ : Number] | A.java:120:36:120:43 | o [ : Number] |
| A.java:106:30:106:37 | o [ : Number] | A.java:108:10:108:10 | o |
| A.java:113:31:113:38 | o [ : Number] | A.java:115:10:115:10 | o |
| A.java:120:36:120:43 | o [ : Number] | A.java:128:9:128:10 | o3 |
nodes
| A.java:6:29:6:36 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:8:9:8:9 | o | semmle.label | o |
| A.java:12:30:12:37 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:14:9:14:9 | o | semmle.label | o |
| A.java:18:31:18:38 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:20:9:20:9 | o | semmle.label | o |
| A.java:24:35:24:42 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:32:8:32:9 | o3 | semmle.label | o3 |
| A.java:35:36:35:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:35:36:35:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:35:36:35:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:43:8:43:9 | o3 | semmle.label | o3 |
| A.java:53:18:53:31 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:54:19:54:32 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:55:20:55:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:56:24:56:37 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:57:25:57:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:58:25:58:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:59:25:59:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:61:25:61:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:73:18:73:31 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:74:19:74:32 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:75:20:75:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:76:24:76:37 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:87:20:87:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:88:21:88:34 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:89:26:89:39 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:94:30:94:37 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:96:10:96:10 | o | semmle.label | o |
| A.java:101:31:101:38 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:103:10:103:10 | o | semmle.label | o |
| A.java:108:36:108:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:116:9:116:10 | o3 | semmle.label | o3 |
| A2.java:15:15:15:28 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A2.java:27:27:27:34 | o [ : Number] | semmle.label | o [ : Number] |
| A2.java:29:9:29:9 | o | semmle.label | o |
| A2.java:37:10:37:10 | o | semmle.label | o |
| A.java:14:29:14:36 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:16:9:16:9 | o | semmle.label | o |
| A.java:20:30:20:37 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:22:9:22:9 | o | semmle.label | o |
| A.java:26:31:26:38 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:28:9:28:9 | o | semmle.label | o |
| A.java:32:35:32:42 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:40:8:40:9 | o3 | semmle.label | o3 |
| A.java:43:36:43:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:43:36:43:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:43:36:43:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:51:8:51:9 | o3 | semmle.label | o3 |
| A.java:62:18:62:31 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:63:19:63:32 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:64:20:64:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:65:24:65:37 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:66:25:66:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:67:25:67:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:68:25:68:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:69:8:69:40 | flowThrough(...) | semmle.label | flowThrough(...) |
| A.java:69:20:69:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:71:25:71:38 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:84:18:84:31 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:85:19:85:32 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:86:20:86:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:87:24:87:37 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:88:8:88:37 | flowThrough(...) | semmle.label | flowThrough(...) |
| A.java:88:20:88:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:99:20:99:33 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:100:21:100:34 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:101:26:101:39 | new Integer(...) [ : Number] | semmle.label | new Integer(...) [ : Number] |
| A.java:106:30:106:37 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:108:10:108:10 | o | semmle.label | o |
| A.java:113:31:113:38 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:115:10:115:10 | o | semmle.label | o |
| A.java:120:36:120:43 | o [ : Number] | semmle.label | o [ : Number] |
| A.java:128:9:128:10 | o3 | semmle.label | o3 |
#select
| A.java:53:18:53:31 | new Integer(...) [ : Number] | A.java:53:18:53:31 | new Integer(...) [ : Number] | A.java:8:9:8:9 | o | $@ | A.java:8:9:8:9 | o | o |
| A.java:54:19:54:32 | new Integer(...) [ : Number] | A.java:54:19:54:32 | new Integer(...) [ : Number] | A.java:14:9:14:9 | o | $@ | A.java:14:9:14:9 | o | o |
| A.java:55:20:55:33 | new Integer(...) [ : Number] | A.java:55:20:55:33 | new Integer(...) [ : Number] | A.java:20:9:20:9 | o | $@ | A.java:20:9:20:9 | o | o |
| A.java:56:24:56:37 | new Integer(...) [ : Number] | A.java:56:24:56:37 | new Integer(...) [ : Number] | A.java:32:8:32:9 | o3 | $@ | A.java:32:8:32:9 | o3 | o3 |
| A.java:57:25:57:38 | new Integer(...) [ : Number] | A.java:57:25:57:38 | new Integer(...) [ : Number] | A.java:43:8:43:9 | o3 | $@ | A.java:43:8:43:9 | o3 | o3 |
| A.java:58:25:58:38 | new Integer(...) [ : Number] | A.java:58:25:58:38 | new Integer(...) [ : Number] | A.java:43:8:43:9 | o3 | $@ | A.java:43:8:43:9 | o3 | o3 |
| A.java:59:25:59:38 | new Integer(...) [ : Number] | A.java:59:25:59:38 | new Integer(...) [ : Number] | A.java:43:8:43:9 | o3 | $@ | A.java:43:8:43:9 | o3 | o3 |
| A.java:61:25:61:38 | new Integer(...) [ : Number] | A.java:61:25:61:38 | new Integer(...) [ : Number] | A.java:43:8:43:9 | o3 | $@ | A.java:43:8:43:9 | o3 | o3 |
| A.java:73:18:73:31 | new Integer(...) [ : Number] | A.java:73:18:73:31 | new Integer(...) [ : Number] | A.java:8:9:8:9 | o | $@ | A.java:8:9:8:9 | o | o |
| A.java:74:19:74:32 | new Integer(...) [ : Number] | A.java:74:19:74:32 | new Integer(...) [ : Number] | A.java:14:9:14:9 | o | $@ | A.java:14:9:14:9 | o | o |
| A.java:75:20:75:33 | new Integer(...) [ : Number] | A.java:75:20:75:33 | new Integer(...) [ : Number] | A.java:20:9:20:9 | o | $@ | A.java:20:9:20:9 | o | o |
| A.java:76:24:76:37 | new Integer(...) [ : Number] | A.java:76:24:76:37 | new Integer(...) [ : Number] | A.java:32:8:32:9 | o3 | $@ | A.java:32:8:32:9 | o3 | o3 |
| A.java:87:20:87:33 | new Integer(...) [ : Number] | A.java:87:20:87:33 | new Integer(...) [ : Number] | A.java:96:10:96:10 | o | $@ | A.java:96:10:96:10 | o | o |
| A.java:88:21:88:34 | new Integer(...) [ : Number] | A.java:88:21:88:34 | new Integer(...) [ : Number] | A.java:103:10:103:10 | o | $@ | A.java:103:10:103:10 | o | o |
| A.java:89:26:89:39 | new Integer(...) [ : Number] | A.java:89:26:89:39 | new Integer(...) [ : Number] | A.java:116:9:116:10 | o3 | $@ | A.java:116:9:116:10 | o3 | o3 |
| A2.java:15:15:15:28 | new Integer(...) [ : Number] | A2.java:15:15:15:28 | new Integer(...) [ : Number] | A2.java:29:9:29:9 | o | $@ | A2.java:29:9:29:9 | o | o |
| A.java:62:18:62:31 | new Integer(...) [ : Number] | A.java:62:18:62:31 | new Integer(...) [ : Number] | A.java:16:9:16:9 | o | $@ | A.java:16:9:16:9 | o | o |
| A.java:63:19:63:32 | new Integer(...) [ : Number] | A.java:63:19:63:32 | new Integer(...) [ : Number] | A.java:22:9:22:9 | o | $@ | A.java:22:9:22:9 | o | o |
| A.java:64:20:64:33 | new Integer(...) [ : Number] | A.java:64:20:64:33 | new Integer(...) [ : Number] | A.java:28:9:28:9 | o | $@ | A.java:28:9:28:9 | o | o |
| A.java:65:24:65:37 | new Integer(...) [ : Number] | A.java:65:24:65:37 | new Integer(...) [ : Number] | A.java:40:8:40:9 | o3 | $@ | A.java:40:8:40:9 | o3 | o3 |
| A.java:66:25:66:38 | new Integer(...) [ : Number] | A.java:66:25:66:38 | new Integer(...) [ : Number] | A.java:51:8:51:9 | o3 | $@ | A.java:51:8:51:9 | o3 | o3 |
| A.java:67:25:67:38 | new Integer(...) [ : Number] | A.java:67:25:67:38 | new Integer(...) [ : Number] | A.java:51:8:51:9 | o3 | $@ | A.java:51:8:51:9 | o3 | o3 |
| A.java:68:25:68:38 | new Integer(...) [ : Number] | A.java:68:25:68:38 | new Integer(...) [ : Number] | A.java:51:8:51:9 | o3 | $@ | A.java:51:8:51:9 | o3 | o3 |
| A.java:69:20:69:33 | new Integer(...) [ : Number] | A.java:69:20:69:33 | new Integer(...) [ : Number] | A.java:69:8:69:40 | flowThrough(...) | $@ | A.java:69:8:69:40 | flowThrough(...) | flowThrough(...) |
| A.java:71:25:71:38 | new Integer(...) [ : Number] | A.java:71:25:71:38 | new Integer(...) [ : Number] | A.java:51:8:51:9 | o3 | $@ | A.java:51:8:51:9 | o3 | o3 |
| A.java:84:18:84:31 | new Integer(...) [ : Number] | A.java:84:18:84:31 | new Integer(...) [ : Number] | A.java:16:9:16:9 | o | $@ | A.java:16:9:16:9 | o | o |
| A.java:85:19:85:32 | new Integer(...) [ : Number] | A.java:85:19:85:32 | new Integer(...) [ : Number] | A.java:22:9:22:9 | o | $@ | A.java:22:9:22:9 | o | o |
| A.java:86:20:86:33 | new Integer(...) [ : Number] | A.java:86:20:86:33 | new Integer(...) [ : Number] | A.java:28:9:28:9 | o | $@ | A.java:28:9:28:9 | o | o |
| A.java:87:24:87:37 | new Integer(...) [ : Number] | A.java:87:24:87:37 | new Integer(...) [ : Number] | A.java:40:8:40:9 | o3 | $@ | A.java:40:8:40:9 | o3 | o3 |
| A.java:88:20:88:33 | new Integer(...) [ : Number] | A.java:88:20:88:33 | new Integer(...) [ : Number] | A.java:88:8:88:37 | flowThrough(...) | $@ | A.java:88:8:88:37 | flowThrough(...) | flowThrough(...) |
| A.java:99:20:99:33 | new Integer(...) [ : Number] | A.java:99:20:99:33 | new Integer(...) [ : Number] | A.java:108:10:108:10 | o | $@ | A.java:108:10:108:10 | o | o |
| A.java:100:21:100:34 | new Integer(...) [ : Number] | A.java:100:21:100:34 | new Integer(...) [ : Number] | A.java:115:10:115:10 | o | $@ | A.java:115:10:115:10 | o | o |
| A.java:101:26:101:39 | new Integer(...) [ : Number] | A.java:101:26:101:39 | new Integer(...) [ : Number] | A.java:128:9:128:10 | o3 | $@ | A.java:128:9:128:10 | o3 | o3 |

Просмотреть файл

@ -0,0 +1,8 @@
[2019-09-30 16:01:44] [ERROR] Exception running the extractor with arguments: --javacOptions -source 8 --strict-javac-errors --encoding UTF-8 --files A.java A2.java InterfaceA.java
[2019-09-30 16:01:44] [ERROR] Exception:
com.semmle.util.exception.ResourceError: Neither TRAP_FOLDER nor ODASA_JAVA_LAYOUT was set
at com.semmle.extractor.java.OdasaOutput.<init>(OdasaOutput.java:95)
at com.semmle.extractor.java.JavaExtractor.createOutput(JavaExtractor.java:443)
at com.semmle.extractor.java.JavaExtractor.runExtractor(JavaExtractor.java:234)
at com.semmle.extractor.java.JavaExtractor.runExtractor(JavaExtractor.java:222)
at com.semmle.extractor.java.JavaExtractor.main(JavaExtractor.java:475)

Просмотреть файл

@ -0,0 +1,3 @@
[2019-09-30 16:01:44] [javac-extractor-6836] Starting extraction for:
sun.java.command=com.semmle.extractor.java.JavaExtractor --javacOptions -source 8 --strict-javac-errors --encoding UTF-8 --files A.java A2.java InterfaceA.java
user.dir=/home/corni/build/ql/java/ql/test/library-tests/dataflow/call-sensitivity

Просмотреть файл

@ -0,0 +1,8 @@
[2019-09-30 16:01:44] [ERROR] Exception running the extractor with arguments: --javacOptions -source 8 --strict-javac-errors --encoding UTF-8 --files A.java A2.java InterfaceA.java
[2019-09-30 16:01:44] [ERROR] Exception:
com.semmle.util.exception.ResourceError: Neither TRAP_FOLDER nor ODASA_JAVA_LAYOUT was set
at com.semmle.extractor.java.OdasaOutput.<init>(OdasaOutput.java:95)
at com.semmle.extractor.java.JavaExtractor.createOutput(JavaExtractor.java:443)
at com.semmle.extractor.java.JavaExtractor.runExtractor(JavaExtractor.java:234)
at com.semmle.extractor.java.JavaExtractor.runExtractor(JavaExtractor.java:222)
at com.semmle.extractor.java.JavaExtractor.main(JavaExtractor.java:475)