[Soot-list] Excluded & included not handled correctly?
Michael Faes
rolve at trick17.ch
Thu Jan 24 08:44:14 EST 2013
Hi Eric,
Oh, in this case this has already been fixed since I downloaded Soot. I
have soot-2.5.0.jar and I was just about to change that method. It is a
good idea to use the nightly builds?
Thanks,
Michael
-------- Original-Nachricht --------
Betreff: Re: [Soot-list] Excluded & included not handled correctly?
Von: Eric Bodden <eric.bodden at ec-spride.de>
An: Michael Faes <rolve at trick17.ch>
Datum: 24.01.2013 13:55
> Hi Michael.
>
> No I think this is correct.
>
> isExcluded is implemented like this:
>
> public boolean isExcluded(SootClass sc) {
> String name = sc.getName();
> for (String pkg : excludedPackages) {
> if (name.startsWith(pkg)) {
> for (String inc : (List<String>) Options.v().include()) {
> if (name.startsWith(inc)) {
> return false;
> }
> }
> return true;
> }
> }
> return false;
> }
>
> Note that it checks the include list.
>
> Eric
>
> On 24 January 2013 13:31, Michael Faes <rolve at trick17.ch> wrote:
>> Hi everyone,
>>
>> I'm having issues using the -no-bodies-for-excluded options together
>> with -include and -exclude.
>>
>> I excluded java. classes but included java.util. classes. What happens
>> is that they all end up being phantom. After investigating a bit, I
>> found this method in SootResolver:
>>
>> private void processResolveWorklist() {
>> for( int i = SootClass.BODIES; i >= SootClass.HIERARCHY; i-- ) {
>> while( !worklist[i].isEmpty() ) {
>> SootClass sc = (SootClass) worklist[i].removeFirst();
>> if( resolveEverything() ) {
>> boolean onlySignatures = sc.isPhantom() || (
>> Options.v().no_bodies_for_excluded() &&
>> Scene.v().isExcluded(sc) &&
>> // ^^^^^^^^^^^^^^^^^^^^^^^^
>> !Scene.v().getBasicClasses().contains(sc.getName())
>> );
>> if( onlySignatures ) {
>> bringToSignatures(sc);
>> sc.setPhantomClass();
>> if(sc.isPhantom()) {
>> for( SootMethod m: sc.getMethods() ) {
>> m.setPhantom(true);
>> }
>> for( SootField f: sc.getFields() ) {
>> f.setPhantom(true);
>> }
>> }
>> } else bringToBodies(sc);
>> } else {
>> switch(i) {
>> case SootClass.BODIES: bringToBodies(sc); break;
>> case SootClass.SIGNATURES: bringToSignatures(sc); break;
>> case SootClass.HIERARCHY: bringToHierarchy(sc); break;
>> }
>> }
>> }
>> }
>> }
>>
>> Notice that on lien 8 it only checks if the class is excluded, not if
>> it's also included. But the description of the -exclude option clearly
>> states:
>>
>> > If you specify both include and exclude options, first the classes
>> > from all excluded packages are marked as library classes, then the
>> > classes from all included packages are marked as application classes.
>>
>> Am I correct that this is a bug or am I doing something wrong again?
>>
>> Thanks for you help.
>> Michael
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
>
More information about the Soot-list
mailing list