<div dir="ltr">Hello all,<div><br></div><div>I am working on using FlowDroid to track how many statements each taint propagates across before eventually reaching a sink. To this end, I have implemented a TaintPropagationHandler and am using the notifyFlowOut function to capture and examine each Abstraction object generated during FlowDroid&#39;s analysis. </div><div><br></div><div><br></div><div>In the output of the notifyFlowOut handler function, I have noticed that whenever the incoming Abstraction is not the zero Abstraction, the outgoing Abstraction will have a null SourceContext.</div><div><br></div><div>In addition, it appears that this case is consistent with the Abstraction copy constructor being using to instantiate a new Abstraction object (I added a couple of lines to the Abstraction constructors in order to identify which constructor was used to instantiate a given Abstraction object).</div><div><br></div><div>I&#39;m curious about why SourceContext is null in these cases. Is there a way to recover SourceContext for these Abstractions?</div><div><br></div><div>An example of my handler function output:</div><div><br></div><div>Case where outgoing source context is not null - Incoming Abstraction is the zero Abstraction</div><div><br></div><div><div>***Incoming Abstraction Data***<br></div><div>Soot statement: $r1 := @parameter1: android.view.KeyEvent<br></div><div>Incoming Source Context: null</div><div>Incoming Abstraction Hash: 1217330535     </div><div><br></div><div>***Outgoing Abstraction Set Data***</div><div>Outgoing set 0:</div><div>Outgoing Abstraction Source Context: $r1(android.view.KeyEvent) * &lt;+length&gt; in $r1 := @parameter1: android.view.KeyEvent     </div><div>Outgoing Abstraction Hash: -285378327     </div></div><div>Constructor: public</div><div><br></div><div><br></div><div><br></div><div><div>Case where outgoing source context is null - Incoming Abstraction is not the zero Abstraction</div></div><div><br></div><div><div>***Incoming Abstraction Data***<br></div><div><div>Soot statement: $r1 = virtualinvoke $r1.&lt;android.os.Bundle: android.os.Bundle getBundle(java.lang.String)&gt;($r5)</div></div><div>Incoming Source Context: $r1(android.os.Bundle) * &lt;+length&gt; in $r1 := @parameter0: android.os.Bundle<br></div><div>Incoming Abstraction Hash: -437298944     </div><div><br></div><div>***Outgoing Abstraction Set Data***</div><div>Outgoing set 0:</div><div>Outgoing Abstraction Source Context: null   </div><div>Outgoing Abstraction Hash: 2043788688     </div></div><div>Constructor: copy</div><div><br></div><div><br></div><div><br></div><div>Thank you for your time! Please let me know if I can provide any additional clarification about my implementation.</div><div><br></div><div>Best Regards,</div><div><br></div><div>Katie Underwood</div></div>