-
Notifications
You must be signed in to change notification settings - Fork 317
Split locals prior to running FlowDroid #863
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
MarcMil
wants to merge
10
commits into
secure-software-engineering:develop
Choose a base branch
from
MarcMil:fix-flowdroid-bug
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+308
−21
Open
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
d3bbf86
Fix a bug in FlowDroid with reused locals
MarcMil 0cafb8e
Do not load everything
MarcMil e97a244
Split not all methods
MarcMil b7e6610
Fix summary infoflow
MarcMil 2c51f0f
Prevent NPE
MarcMil e18ed3c
Log out weird cases
MarcMil 9989bae
Merge branch 'fix-flowdroid-bug' of https://github.com/MarcMil/FlowDr…
MarcMil 1c78376
Remove unused locals
MarcMil 79e3450
Allow subclasses to get information about the completion rate
MarcMil 579042f
Merge branch 'fix-flowdroid-bug' of github.com:MarcMil/FlowDroid into…
MarcMil File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
70 changes: 70 additions & 0 deletions
70
soot-infoflow/src/soot/jimple/infoflow/FlowDroidLocalSplitter.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| package soot.jimple.infoflow; | ||
|
|
||
| import java.util.Map; | ||
|
|
||
| import soot.Body; | ||
| import soot.Local; | ||
| import soot.Singletons.Global; | ||
| import soot.jimple.internal.JimpleLocal; | ||
| import soot.toolkits.scalar.LocalSplitter; | ||
| import soot.toolkits.scalar.UnusedLocalEliminator; | ||
|
|
||
| /** | ||
| * With more recent soot versions, locals are reused more often. This can cause | ||
| * problems in FlowDroid (e.g. the overwriteParameter test case). The simple | ||
| * solution: We split these locals beforehand | ||
| * | ||
| * @author Marc Miltenberger | ||
| */ | ||
| public class FlowDroidLocalSplitter extends LocalSplitter { | ||
| public static class SplittedLocal extends JimpleLocal { | ||
|
|
||
| private static final long serialVersionUID = 1L; | ||
| private JimpleLocal originalLocal; | ||
|
|
||
| public SplittedLocal(JimpleLocal oldLocal) { | ||
| super(null, oldLocal.getType()); | ||
| // do not intern the name again | ||
| setName(oldLocal.getName()); | ||
| if (oldLocal.isUserDefinedLocal()) { | ||
| setUserDefinedLocal(); | ||
| } | ||
|
|
||
| this.originalLocal = oldLocal; | ||
| while (originalLocal instanceof SplittedLocal) { | ||
| originalLocal = ((SplittedLocal) originalLocal).originalLocal; | ||
| } | ||
| } | ||
|
|
||
| public JimpleLocal getOriginalLocal() { | ||
| return originalLocal; | ||
| } | ||
|
|
||
| } | ||
|
|
||
| public FlowDroidLocalSplitter() { | ||
| super((Global) null); | ||
| } | ||
|
|
||
| @Override | ||
| protected String getNewName(String name, int count) { | ||
| // Reuse the old name | ||
| return name; | ||
| } | ||
|
|
||
| @Override | ||
| protected Local createClonedLocal(Local oldLocal) { | ||
| return new SplittedLocal((JimpleLocal) oldLocal); | ||
| } | ||
|
|
||
| public static FlowDroidLocalSplitter v() { | ||
| return new FlowDroidLocalSplitter(); | ||
| } | ||
|
|
||
| @Override | ||
| protected void internalTransform(Body body, String phaseName, Map<String, String> options) { | ||
| super.internalTransform(body, phaseName, options); | ||
| UnusedLocalEliminator.v().transform(body); | ||
| } | ||
|
|
||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| package soot.jimple.infoflow; | ||
|
|
||
| import soot.tagkit.Tag; | ||
|
|
||
| public class SplittedTag implements Tag { | ||
|
|
||
| public static final String NAME = "Splitted"; | ||
| private static final Tag INSTANCE = new SplittedTag(); | ||
|
|
||
| @Override | ||
| public String getName() { | ||
| return NAME; | ||
| } | ||
|
|
||
| public static Tag v() { | ||
| return INSTANCE; | ||
| } | ||
|
|
||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.