diff --git a/source/tests/integration/end-to-end/code/taint_transforms/ExtraTraces.java b/source/tests/integration/end-to-end/code/taint_transforms/ExtraTraces.java index fb924ca7..ccae0bbe 100644 --- a/source/tests/integration/end-to-end/code/taint_transforms/ExtraTraces.java +++ b/source/tests/integration/end-to-end/code/taint_transforms/ExtraTraces.java @@ -14,10 +14,21 @@ public static Object hopToSource1() { return hopToSource2(); } + public static Object hopToTransformT1(Object o) { + return TaintTransforms.transformT1(o); + } + public static Object hopToSource2() { Object source = hopToSource3(); - // Expect extra_trace to transformT1(). - return TaintTransforms.transformT1(source); + + int rand = new Random().nextInt(2); + if (rand == 0) { + // Expect extra_trace to hopTotransformT1(). + return hopToTransformT1(source); + } else { + // Expect extra_trace to transformT1(). + return TaintTransforms.transformT1(source); + } } public static Object hopToSource3() { @@ -30,8 +41,8 @@ public static Object hopPropagation1(Object o) { public static Object hopPropagation2(Object o) { // Expect extra_trace to transformT2(). - Object o1 = TaintTransforms.transformT2(o); - return hopPropagation3(o1); + Object withT2 = TaintTransforms.transformT2(o); + return hopPropagation3(withT2); } public static Object hopPropagation3(Object o) { @@ -59,15 +70,15 @@ public static void hopToSink2(Object o) { public static void hopToSink3(Object o) { int rand = new Random().nextInt(2); - Object o1; + Object withTransform; if (rand == 0) { - // Expect extra_trace to transformT1(). - o1 = TaintTransforms.transformT1(o); + // Expect extra_trace to hopTotransformT1(). + withTransform = hopToTransformT1(o); } else { // Expect extra_trace to transformT2(). - o1 = TaintTransforms.transformT2(o); + withTransform = TaintTransforms.transformT2(o); } - hopToSink4(o1); + hopToSink4(withTransform); } public static void hopToSink4(Object o) { @@ -75,10 +86,11 @@ public static void hopToSink4(Object o) { } public static void testExtraTraces() { - Object s = hopToSource1(); + Object fromHopToSource = hopToSource1(); // Expect extra_trace to transformT1(). - Object t = TaintTransforms.transformT1(s); - Object tt = hopPropagation1(t); - hopToSink1(tt); + Object withT1 = TaintTransforms.transformT1(fromHopToSource); + // expect extra_trace to hopPropagation1(). + Object withT1AndHopPropagation = hopPropagation1(withT1); + hopToSink1(withT1AndHopPropagation); } } diff --git a/source/tests/integration/end-to-end/code/taint_transforms/expected_call_graph.json b/source/tests/integration/end-to-end/code/taint_transforms/expected_call_graph.json index 47518064..a0b0ec2a 100644 --- a/source/tests/integration/end-to-end/code/taint_transforms/expected_call_graph.json +++ b/source/tests/integration/end-to-end/code/taint_transforms/expected_call_graph.json @@ -267,7 +267,7 @@ "static" : [ "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink4:(Ljava/lang/Object;)V", - "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT1:(Ljava/lang/Object;)Ljava/lang/Object;", + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;", "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT2:(Ljava/lang/Object;)Ljava/lang/Object;" ] }, @@ -290,6 +290,7 @@ "static" : [ "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource3:()Ljava/lang/Object;", + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;", "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT1:(Ljava/lang/Object;)Ljava/lang/Object;" ] }, @@ -300,6 +301,13 @@ "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.getNewSource:()Ljava/lang/Object;" ] }, + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;" : + { + "static" : + [ + "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT1:(Ljava/lang/Object;)Ljava/lang/Object;" + ] + }, "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.testExtraTraces:()V" : { "static" : diff --git a/source/tests/integration/end-to-end/code/taint_transforms/expected_dependencies.json b/source/tests/integration/end-to-end/code/taint_transforms/expected_dependencies.json index e8a2cde4..d1525d22 100644 --- a/source/tests/integration/end-to-end/code/taint_transforms/expected_dependencies.json +++ b/source/tests/integration/end-to-end/code/taint_transforms/expected_dependencies.json @@ -82,6 +82,11 @@ [ "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource2:()Ljava/lang/Object;" ], + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;" : + [ + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink3:(Ljava/lang/Object;)V", + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource2:()Ljava/lang/Object;" + ], "Lcom/facebook/marianatrench/integrationtests/Origin;.sink:(Ljava/lang/Object;)V" : [ "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink4:(Ljava/lang/Object;)V", @@ -164,8 +169,8 @@ "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT1:(Ljava/lang/Object;)Ljava/lang/Object;" : [ "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation4:(Ljava/lang/Object;)Ljava/lang/Object;", - "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink3:(Ljava/lang/Object;)V", "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource2:()Ljava/lang/Object;", + "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;", "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.testExtraTraces:()V", "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.hopSinkWithTransformsT1T2:(Ljava/lang/Object;)V", "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.propagateAlternateTransforms:(Lcom/facebook/marianatrench/integrationtests/Data;)Lcom/facebook/marianatrench/integrationtests/Data;", diff --git a/source/tests/integration/end-to-end/code/taint_transforms/expected_output.json b/source/tests/integration/end-to-end/code/taint_transforms/expected_output.json index 982151b6..2ea0fa48 100644 --- a/source/tests/integration/end-to-end/code/taint_transforms/expected_output.json +++ b/source/tests/integration/end-to-end/code/taint_transforms/expected_output.json @@ -892,7 +892,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation1:(Ljava/lang/Object;)Ljava/lang/Object;", "position" : { - "line" : 27, + "line" : 38, "path" : "ExtraTraces.java" }, "propagation" : @@ -907,7 +907,7 @@ "port" : "Argument(0)", "position" : { - "line" : 28, + "line" : 39, "path" : "ExtraTraces.java" }, "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation2:(Ljava/lang/Object;)Ljava/lang/Object;" @@ -963,7 +963,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation2:(Ljava/lang/Object;)Ljava/lang/Object;", "position" : { - "line" : 32, + "line" : 43, "path" : "ExtraTraces.java" }, "propagation" : @@ -978,7 +978,7 @@ "port" : "Argument(0)", "position" : { - "line" : 34, + "line" : 45, "path" : "ExtraTraces.java" }, "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation3:(Ljava/lang/Object;)Ljava/lang/Object;" @@ -996,7 +996,7 @@ { "position" : { - "line" : 33, + "line" : 44, "path" : "ExtraTraces.java" } } @@ -1023,7 +1023,7 @@ { "position" : { - "line" : 33, + "line" : 44, "path" : "ExtraTraces.java" } } @@ -1061,7 +1061,7 @@ { "position" : { - "line" : 33, + "line" : 44, "path" : "ExtraTraces.java" } } @@ -1074,7 +1074,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation3:(Ljava/lang/Object;)Ljava/lang/Object;", "position" : { - "line" : 38, + "line" : 49, "path" : "ExtraTraces.java" }, "propagation" : @@ -1102,7 +1102,7 @@ "port" : "Argument(0)", "position" : { - "line" : 40, + "line" : 51, "path" : "ExtraTraces.java" }, "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation4:(Ljava/lang/Object;)Ljava/lang/Object;" @@ -1145,7 +1145,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation4:(Ljava/lang/Object;)Ljava/lang/Object;", "position" : { - "line" : 43, + "line" : 54, "path" : "ExtraTraces.java" }, "propagation" : @@ -1187,7 +1187,7 @@ { "position" : { - "line" : 46, + "line" : 57, "path" : "ExtraTraces.java" } } @@ -1212,7 +1212,7 @@ { "position" : { - "line" : 49, + "line" : 60, "path" : "ExtraTraces.java" } } @@ -1225,7 +1225,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink1:(Ljava/lang/Object;)V", "position" : { - "line" : 52, + "line" : 63, "path" : "ExtraTraces.java" }, "sinks" : @@ -1241,7 +1241,7 @@ "position" : { "end" : 15, - "line" : 53, + "line" : 64, "path" : "ExtraTraces.java", "start" : 15 }, @@ -1286,7 +1286,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink2:(Ljava/lang/Object;)V", "position" : { - "line" : 56, + "line" : 67, "path" : "ExtraTraces.java" }, "sinks" : @@ -1302,7 +1302,7 @@ "position" : { "end" : 15, - "line" : 57, + "line" : 68, "path" : "ExtraTraces.java", "start" : 15 }, @@ -1347,7 +1347,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink3:(Ljava/lang/Object;)V", "position" : { - "line" : 60, + "line" : 71, "path" : "ExtraTraces.java" }, "sinks" : @@ -1362,8 +1362,8 @@ "port" : "Argument(0)", "position" : { - "end" : 16, - "line" : 70, + "end" : 27, + "line" : 81, "path" : "ExtraTraces.java", "start" : 15 }, @@ -1386,15 +1386,17 @@ "extra_traces" : [ { - "kind" : "T1:LocalReturn", - "origin" : + "call" : { + "port" : "Argument(0)", "position" : { - "line" : 65, + "line" : 76, "path" : "ExtraTraces.java" - } - } + }, + "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;" + }, + "kind" : "T1:LocalReturn" } ], "kind" : "T1@Sink", @@ -1414,7 +1416,7 @@ { "position" : { - "line" : 68, + "line" : 79, "path" : "ExtraTraces.java" } } @@ -1431,13 +1433,13 @@ [ { "end" : 39, - "line" : 65, + "line" : 76, "start" : 39 }, { - "end" : 39, - "line" : 68, - "start" : 39 + "end" : 50, + "line" : 79, + "start" : 50 } ] } @@ -1449,7 +1451,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink4:(Ljava/lang/Object;)V", "position" : { - "line" : 73, + "line" : 84, "path" : "ExtraTraces.java" }, "sinks" : @@ -1476,7 +1478,7 @@ "position" : { "end" : 16, - "line" : 74, + "line" : 85, "path" : "ExtraTraces.java", "start" : 16 } @@ -1552,7 +1554,7 @@ "position" : { "end" : 31, - "line" : 18, + "line" : 22, "path" : "ExtraTraces.java", "start" : 20 }, @@ -1574,13 +1576,26 @@ "distance" : 1, "extra_traces" : [ + { + "call" : + { + "port" : "Argument(0)", + "position" : + { + "line" : 27, + "path" : "ExtraTraces.java" + }, + "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;" + }, + "kind" : "T1:LocalReturn" + }, { "kind" : "T1:LocalReturn", "origin" : { "position" : { - "line" : 20, + "line" : 30, "path" : "ExtraTraces.java" } } @@ -1596,9 +1611,14 @@ "local_positions" : [ { - "end" : 44, - "line" : 20, - "start" : 39 + "end" : 35, + "line" : 27, + "start" : 30 + }, + { + "end" : 46, + "line" : 30, + "start" : 41 } ] } @@ -1608,7 +1628,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource2:()Ljava/lang/Object;", "position" : { - "line" : 17, + "line" : 21, "path" : "ExtraTraces.java" } } @@ -1637,7 +1657,7 @@ "position" : { "end" : 38, - "line" : 24, + "line" : 35, "path" : "ExtraTraces.java", "start" : 27 } @@ -1649,10 +1669,65 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource3:()Ljava/lang/Object;", "position" : { - "line" : 23, + "line" : 34, "path" : "ExtraTraces.java" } } +{ + "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToTransformT1:(Ljava/lang/Object;)Ljava/lang/Object;", + "position" : + { + "line" : 17, + "path" : "ExtraTraces.java" + }, + "propagation" : + [ + { + "input" : "Argument(0)", + "output" : + [ + { + "kinds" : + [ + { + "call_info" : "Propagation", + "kind" : "LocalReturn", + "output_paths" : + { + "" : 4 + } + } + ] + }, + { + "kinds" : + [ + { + "call_info" : "PropagationWithTrace:Origin", + "kind" : "T1:LocalReturn", + "origins" : + [ + "Lcom/facebook/marianatrench/integrationtests/TaintTransforms;.transformT1:(Ljava/lang/Object;)Ljava/lang/Object;" + ], + "output_paths" : + { + "" : 0 + } + } + ], + "origin" : + { + "position" : + { + "line" : 18, + "path" : "ExtraTraces.java" + } + } + } + ] + } + ] +} { "issues" : [ @@ -1660,7 +1735,7 @@ "callee" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSink1:(Ljava/lang/Object;)V", "position" : { - "line" : 82, + "line" : 94, "path" : "ExtraTraces.java" }, "rule" : 7, @@ -1673,8 +1748,8 @@ "port" : "Argument(0)", "position" : { - "end" : 16, - "line" : 82, + "end" : 37, + "line" : 94, "path" : "ExtraTraces.java", "start" : 15 }, @@ -1702,10 +1777,10 @@ "port" : "Return", "position" : { - "end" : 26, - "line" : 78, + "end" : 40, + "line" : 89, "path" : "ExtraTraces.java", - "start" : 15 + "start" : 29 }, "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopToSource1:()Ljava/lang/Object;" }, @@ -1722,7 +1797,7 @@ "port" : "Argument(0)", "position" : { - "line" : 81, + "line" : 93, "path" : "ExtraTraces.java" }, "resolves_to" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.hopPropagation1:(Ljava/lang/Object;)Ljava/lang/Object;" @@ -1735,7 +1810,7 @@ { "position" : { - "line" : 80, + "line" : 91, "path" : "ExtraTraces.java" } } @@ -1751,14 +1826,14 @@ "local_positions" : [ { - "end" : 32, - "line" : 81, - "start" : 32 + "end" : 58, + "line" : 93, + "start" : 53 }, { - "end" : 43, - "line" : 80, - "start" : 43 + "end" : 62, + "line" : 91, + "start" : 48 } ] } @@ -1768,7 +1843,7 @@ "method" : "Lcom/facebook/marianatrench/integrationtests/ExtraTraces;.testExtraTraces:()V", "position" : { - "line" : 77, + "line" : 88, "path" : "ExtraTraces.java" } }