<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:PMingLiU;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:PMingLiU;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@PMingLiU";
        panose-1:2 2 5 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Sprechblasentext Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.E-MailFormatvorlage18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.SprechblasentextZchn
        {mso-style-name:"Sprechblasentext Zchn";
        mso-style-priority:99;
        mso-style-link:Sprechblasentext;
        font-family:"Tahoma","sans-serif";
        mso-fareast-language:DE;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Rainkin,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I looked into the issue. There is another thing to keep in mind: You can only have two reports that differ in their taint propagation path if you have the analysis reconstruct paths at all. The traditional way was to specify this flag in the constructor of the Infoflow class by providing a corresponding PathBuilderFactory. I have just added a setter that also allows you to do this later on for convenience.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The example in soot.jimple.infoflow.test.junit.OtherTests.multiSinkTest2() works and shows how to do it.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Best regards,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>  Steven<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> soot-list-bounces@CS.McGill.CA [mailto:soot-list-bounces@CS.McGill.CA] <b>Im Auftrag von </b>???<br><b>Gesendet:</b> Mittwoch, 6. Mai 2015 04:08<br><b>An:</b> Steven Arzt; soot-list@CS.McGill.CA<br><b>Betreff:</b> Re: [Soot-list] How to get context-sensitive result of flowdroid<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><div><p class=MsoNormal>Hi Steven,<o:p></o:p></p></div><p class=MsoNormal>&nbsp;&nbsp;&nbsp; To make sure the flag works, I directly use the test case soot.jimple.infoflow.test.securibench.AliasingTests.java aliasing5()<o:p></o:p></p></div><p class=MsoNormal>&nbsp;&nbsp;&nbsp; and I add the call <b><span style='color:red'>infoflow.setPathAgnosticResults(false);</span></b><br>&nbsp; &nbsp; @Test<br>&nbsp; &nbsp; public void aliasing5() {<br>&nbsp; &nbsp; &nbsp; &nbsp; List&lt;String&gt; epoints = new ArrayList&lt;String&gt;();<br>&nbsp; &nbsp; &nbsp; &nbsp; epoints.add(&quot;&lt;securibench.micro.aliasing.Aliasing5: void &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doGet(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)&gt;&quot;); &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; Infoflow infoflow = initInfoflow(epoints);<br>&nbsp; &nbsp; &nbsp; &nbsp;<b><span style='color:red'> infoflow.setPathAgnosticResults(false);</span></b><br>&nbsp; &nbsp; &nbsp; &nbsp; infoflow.computeInfoflow(abppPath, libPath, entryPointCreator, sources, sinks);<br>&nbsp; &nbsp; &nbsp; &nbsp; checkInfoflow(infoflow, 1);<br>&nbsp; &nbsp; } <o:p></o:p></p><div><p class=MsoNormal>&nbsp;&nbsp; <o:p></o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'>&nbsp;&nbsp; And I change the corresponding test code, the red line is what I add:<br><br>&nbsp;&nbsp; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; StringBuffer buf = new StringBuffer(&quot;abc&quot;); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo(buf, buf, resp, req);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<b><span style='color:red'> foo(buf, buf, resp, req);</span></b><br>&nbsp;&nbsp;&nbsp; }<o:p></o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'>&nbsp;&nbsp;&nbsp; Finally, I got the following result:<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; Using following locations as sources for classes: /home/rainkin/Desktop/soot-infoflow-develop/bin:/home/rainkin/Desktop/soot-infoflow-develop/build/classes/home/rainkin/Desktop/soot-infoflow-develop/build/testclasses, /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:/home/rainkin/Desktop/soot-infoflow-develop/lib/j2ee.jar:/home/rainkin/Desktop/soot-infoflow-develop/lib/cos.jar<br>SLF4J: Class path contains multiple SLF4J bindings.<br>SLF4J: Found binding in [jar:file:/home/rainkin/Desktop/soot-infoflow-develop/lib/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]<br>SLF4J: Found binding in [jar:file:/home/rainkin/Downloads/heros-trunk.jar!/org/slf4j/impl/StaticLoggerBinder.class]<br>SLF4J: Found binding in [jar:file:/home/rainkin/Downloads/soot-trunk.jar!/org/slf4j/impl/StaticLoggerBinder.class]<br>SLF4J: See <a href="http://www.slf4j.org/codes.html#multiple_bindings">http://www.slf4j.org/codes.html#multiple_bindings</a> for an explanation.<br>SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]<br>[main] INFO soot.jimple.infoflow.Infoflow - Resetting Soot...<br>Warning: javax.crypto.SecretKey is a phantom class!<br>[main] INFO soot.jimple.infoflow.Infoflow - Basic class loading done.<br>[Call Graph] For information on where the call graph may be incomplete, use the verbose option to the cg phase.<br>[Spark] Pointer Assignment Graph in 1.7 seconds.<br>[Spark] Type masks in 0.1 seconds.<br>[Spark] Pointer Graph simplified in 0.0 seconds.<br>[Spark] Propagation in 9.0 seconds.<br>[Spark] Solution found in 9.0 seconds.<br>[main] INFO soot.jimple.infoflow.util.InterproceduralConstantValuePropagator - Removing side-effect free methods is disabled<br>[main] INFO soot.jimple.infoflow.Infoflow - Dead code elimination took 0.479650968 seconds<br>[main] INFO soot.jimple.infoflow.Infoflow - Callgraph has 10477 edges<br>[main] INFO soot.jimple.infoflow.Infoflow - Implicit flow tracking is NOT enabled<br>[main] INFO soot.jimple.infoflow.Infoflow - Running with a maximum access path length of 5<br><b><span style='color:red'>[main] INFO soot.jimple.infoflow.Infoflow - Using path-sensitive result collection</span></b><br>[main] INFO soot.jimple.infoflow.Infoflow - Recursive access path shortening is enabled<br>[main] INFO soot.jimple.infoflow.Infoflow - Looking for sources and sinks...<br>[main] INFO soot.jimple.infoflow.Infoflow - Source lookup done, found 1 sources and 1 sinks.<br>[main] INFO soot.jimple.infoflow.Infoflow - IFDS problem with 2270 forward and 430 backward edges solved, processing 1 results...<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Context-sensitive path reconstructor started<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Obtainted 1 connections between sources and sinks<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Building path 1<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Path processing took 0.020252891 seconds in total<br>[main] INFO soot.jimple.infoflow.Infoflow - The sink virtualinvoke r6.&lt;java.io.PrintWriter: void println(java.lang.String)&gt;($r8) in method &lt;securibench.micro.aliasing.Aliasing5: void foo(java.lang.StringBuffer,java.lang.StringBuffer,javax.servlet.ServletResponse,javax.servlet.ServletRequest)&gt; was called with values from the following sources:<br>[main] INFO soot.jimple.infoflow.Infoflow - - r5 = interfaceinvoke r4.&lt;javax.servlet.ServletRequest: java.lang.String getParameter(java.lang.String)&gt;(&quot;name&quot;) in method &lt;securibench.micro.aliasing.Aliasing5: void foo(java.lang.StringBuffer,java.lang.StringBuffer,javax.servlet.ServletResponse,javax.servlet.ServletRequest)&gt;<br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; on Path: <br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; &nbsp;-&gt; &lt;securibench.micro.aliasing.Aliasing5: void foo(java.lang.StringBuffer,java.lang.StringBuffer,javax.servlet.ServletResponse,javax.servlet.ServletRequest)&gt;<br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;-&gt; virtualinvoke r6.&lt;java.io.PrintWriter: void println(java.lang.String)&gt;($r8)<o:p></o:p></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>2015-05-06 0:27 GMT+08:00 Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de" target="_blank">Steven.Arzt@cased.de</a>&gt;:<o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Are you sure that you set this flag before you start the actual data flow analysis?</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a> [mailto:<a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a>] <b>Im Auftrag von </b>???<br><b>Gesendet:</b> Dienstag, 5. Mai 2015 18:26<br><b>An:</b> Steven Arzt<br><b>Cc:</b> <a href="mailto:soot-list@CS.McGill.CA" target="_blank">soot-list@CS.McGill.CA</a></span><o:p></o:p></p><div><div><p class=MsoNormal><br><b>Betreff:</b> Re: [Soot-list] How to get context-sensitive result of flowdroid<o:p></o:p></p></div></div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Hi Steven,<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp; &nbsp; I try to call infoflow.setPathAgnosticResults(false), but it still only shows one path.<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp; &nbsp; I don't know why it happened?<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Rainkin<o:p></o:p></p></div></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>2015-04-22 17:57 GMT+08:00 Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de" target="_blank">Steven.Arzt@cased.de</a>&gt;:<o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Raikin,</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The Infoflow class supports the setPathAgnosticResults() method. The default is “true” which means that paths which have same source and sink are merged into one. If you set it to “false”, you will get the two different paths. However, beware: In general, the number of propagation paths is exponential in the number of branching statements on the way. You can quickly end up with an infeasible number of paths and that’s why the default merges all these paths.</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Best regards,</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp; Steven</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> </span><span style='font-size:10.0pt;font-family:"PMingLiU","serif"'>润青杨</span><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> [mailto:<a href="mailto:rainkin1993@gmail.com" target="_blank">rainkin1993@gmail.com</a>] <br><b>Gesendet:</b> Mittwoch, </span><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>22. April 2015 11:26<br><b>An:</b> Steven Arzt<br><b>Cc:</b> <a href="mailto:soot-list@cs.mcgill.ca" target="_blank">soot-list@cs.mcgill.ca</a><br><b>Betreff:</b> Re: [Soot-list] How to get context-sensitive result of flowdroid</span><o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p><div><div><div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>HI Steven,<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;&nbsp;&nbsp; Two different propagation paths are what I want. But the result only have 1 path;<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt'>&nbsp;&nbsp;&nbsp; Can you tell me how to get it?<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Thanks,<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Rainkin<o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p></div></div></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>2015-04-22 17:00 GMT+08:00 Steven Arzt &lt;<a href="mailto:Steven.Arzt@cased.de" target="_blank">Steven.Arzt@cased.de</a>&gt;:<o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Rainkin,</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I do not understand your question. In this code example, there is only a single context. The method “foo” is always called with a tainted element which originated from sourceOne(10). In terms of contexts, the two source-to-sink connections are equal. Moreover, there is only one call to “System.out.println()” in the code, so I’m not sure how you want to get two different statements out of that.</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The only thing you could do is to obtain two different propagation paths to record that one flow was propagated over the first call to “foo” and the other one over the second call. I’m not sure what the use case for that should be, though.</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Best regards,</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp; Steven</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a> [mailto:<a href="mailto:soot-list-bounces@CS.McGill.CA" target="_blank">soot-list-bounces@CS.McGill.CA</a>] <b>Im Auftrag von </b>???<br><b>Gesendet:</b> Mittwoch, 22. April 2015 10:50<br><b>An:</b> <a href="mailto:soot-list@CS.McGill.CA" target="_blank">soot-list@CS.McGill.CA</a><br><b>Betreff:</b> [Soot-list] How to get context-sensitive result of flowdroid</span><o:p></o:p></p><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p><div><div><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Hi guys,<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;&nbsp;&nbsp; this is a example:<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;&nbsp;&nbsp; public void test(){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String sourceOne = sourceOne(10); // source<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo(sourceOne);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; foo(sourceOne);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public String sourceOne(int number){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return number&gt;0 ? &quot;positive&quot; : &quot;negative&quot;;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public void foo(String s){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(s); // sink<br>&nbsp;&nbsp;&nbsp; }<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp; <o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt'>&nbsp; the method sourceOne is a source and System.out.println() is a sink.<o:p></o:p></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp; After analysis, I get the following result:<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>[main] INFO soot.jimple.infoflow.Infoflow - Source lookup done, found 1 sources and 1 sinks.<br>[main] INFO soot.jimple.infoflow.Infoflow - IFDS problem with 14 forward and 0 backward edges solved, processing 1 results...<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Context-sensitive path reconstructor started<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Obtainted 1 connections between sources and sinks<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Building path 1<br>[main] INFO soot.jimple.infoflow.data.pathBuilders.ContextSensitivePathBuilder - Path processing took 0.008987293 seconds in total<br>[main] INFO soot.jimple.infoflow.Infoflow - The sink virtualinvoke $r2.&lt;java.io.PrintStream: void println(java.lang.String)&gt;(r1) in method &lt;TestCode: void foo(java.lang.String)&gt; was called with values from the following sources:<br>[main] INFO soot.jimple.infoflow.Infoflow - - r1 = virtualinvoke r0.&lt;TestCode: java.lang.String sourceOne(int)&gt;(10) in method &lt;TestCode: void test()&gt;<br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; on Path: <br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; &nbsp;-&gt; &lt;TestCode: void foo(java.lang.String)&gt;<br>[main] INFO soot.jimple.infoflow.Infoflow - &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;-&gt; virtualinvoke $r2.&lt;java.io.PrintStream: void println(java.lang.String)&gt;(r1)<o:p></o:p></p><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt'>&nbsp;I want to know how to get a context-sensitive result, in which&nbsp; sourceOne() will point to 2 different system.out.println()<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Thx,<o:p></o:p></p></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>Rainkin<o:p></o:p></p></div></div></div></div></div></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p></div></div></div></div></div></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>&nbsp;<o:p></o:p></p></div></div></div></div></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></body></html>