Giter Club home page Giter Club logo

spds's Introduction

spds's People

Contributors

anakinraw avatar dependabot-preview[bot] avatar dependabot[bot] avatar ericbodden avatar johspaeth avatar mbenz89 avatar piskachev avatar rakshitkr avatar svenev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spds's Issues

TIMEOUT of shippable

Shippable only grants 2GB of heap memory to the JVM.

Some of the test cases (TreeMap, HashMap etc) consume a large amount of memory and shippable times out. We need to port the CI to our a different server (probably our own) which grants more memory.
This step may require us to switch to Jenkins.

Understanding Boomerang forward queries

Hi! I put together a minimal example to illustrate my confusion:

import java.util.LinkedList;
import java.util.List;

class Foo {
	void bar() {
		System.out.println("zomg bar");
	}
}

public class Test {
	public static List<Foo> foos() {
		List<Foo> x = new LinkedList<>();
		Foo foo = new Foo();
		x.add(foo);
		foo.bar();
		return x;
	}

	public static void main(String[] args) {
		System.out.println("hi!");
		System.out.println(foos());
	}
}

Ignoring all the usual soot setup machinery (I'm using DefaultBoomerangOptions and the pretransformer), after compiling the code I end up with the following Jimple:

...
        $stack2 = new java.util.LinkedList;
        specialinvoke $stack2.<java.util.LinkedList: void <init>()>();
        l0 = $stack2;
        $stack3 = new Foo;
        specialinvoke $stack3.<Foo: void <init>()>();
        l1 = $stack3;
        interfaceinvoke l0.<java.util.List: boolean add(java.lang.Object)>(l1);
        virtualinvoke l1.<Foo: void bar()>();
...

Now, if I point my forward query at $stack2 = new java.util.LinkedList, pass it to my solver instance, and call getInvokedMethodOnInstance on the result, I get the following:

{CS: l0.add(l1)=<java.util.List: boolean add(java.lang.Object)>, CS: $stack2.<init>()=<java.util.LinkedList: void <init>()>}

Which is what I'd expect, since I call the constructor on that list and also use .add on it.

On the other hand, if I do the exact same thing to the $stack3 = new Foo statement, I get an empty set of invoked methods, even though I call the constructor on it (obviously) and also call .bar on it.

I'm trying to understand what the fundamental difference is between those two cases and how I can make the latter query on my Foo instance also return the correct set of invoked methods.

False positive for Exception flows

On the test program, a vector object flows via an exception to a catch block. The vector object is stored as a field of the exception and unwrapped within the catch block. Within the catch block, the program erroneously accesses the first element of the empty vector.

Tests for WPDS and SynchronizedPDS not executed by maven build

WPDS and SynchronizedPDS do not contain a surefire-plugin configuration and their tests results are not included to shippable.

In WPDS the tests are also not contained in src/test, but in tests/tests, which is different than in the remaining modules and different than expected by maven.

Visualization: Draw flow edges in graph

The current state of the visualization draws nodes only but misses edges between them. We should use the rules of the PDS of fields to visualize the data-flow.

TamiFlex to analyse dacapo

How do I setup TamiFlex correctly such that we can analyse dacapo properly.

PhantomRefs?
Where are all dependencies?

Separating IDEAL and Boomerang

Currently, this repository contains both implementations for IDEAL and Boomerang using the push-down systems. There are applications where we only need one of both, and having the single build for both is just overhead in the dependencies.
How about making a separation?

Index +1 shift in Strong Update

The analysis requires intermediate statements before end of branches see class StackTest.

@Test
public void test6() {
	ArrayList l = new ArrayList();
	Stack s = new Stack();
	if (staticallyUnknown()) {
		s.push(new Object());
		int x = 1;
	}
	if (staticallyUnknown()) {
		s.push(new Object());			
		int x = 1;
	}
	if(!s.isEmpty()) {
		Object pop = s.pop();
		mayBeInErrorState(s);
	}
}

The analysis is unsound when we remove the statements x = 1.

Execute long running tests weekly

We need two sets of test cases:

  1. short running tests which are executed on every commit and cover the basic tests.
  2. all tests executed weekly.

Giving empty allocation sets at some program points in the jimple IR

I am working on the Jimple IR for android apk file.

One of the statements in the program is a post of a runnable object on the base object handler.

Class A {
Runnable a = new Runnable () {
public void run(){
...
}
}

onCreate() {
...
handler.post(a)
...
}
}

  • where a is of type runnable and a is a reference use. Further more, a is defined as a class field.

I wish to find the points to set for 'a'.

I create a backward query for the statement and the value as 'a' - jimple local variable.

But the result is empty set of allocation sites or possible types. But if i query for the base which is of type handler i get precise answers for the allocation sites and possible types.

Please let me know if you need further details.

WPDS Document

WPDS build and install,how to use?Can you provide detailed usage documentation?

Imprecise Results using getAllAliases()

I am using almost same classes as BoomerangExampleTarget example provides, except fields are non-static. When I query results I get imprecise results. These results don't even match to Class hierarchy. When I query on last line, results include l0[a, b, nested, field] and $stack4[b, nested, field] that doesn't make sense at all.

a = new ClassWithField();
a.field = new ObjectOfInterest();
b = (ClassWithField)identity(a);
n = new NestedClassWithField();
n.nested = b;
n.nested.field.poi = x*y; // query here for  n.nested.field

Static Field Flows

Where does a call return to?

It seems that such a call returns to static field loads?

A a = staticFieldAccess

False negative with basic if-branching

When branching is involved, the analysis may become unsound and thus may miss coding mistakes, as shown below.

This test fails, as expected:

@Test
public void test1() {
    File file = new File();
    if (staticallyUnknown()) {
        file.open();
        mustBeInAcceptingState(file); // Correctly fails the test
    }
}

This test does NOT fail, but it should:

@Test
public void test2() {
    File file = new File();
    if (staticallyUnknown()) {
        file.open();
    }
    mustBeInAcceptingState(file); // Test succeeds unexpectedly
}

Mix of snapshot and release versions

When deploying to the soot nexus, we can choose whether we want to deploy to the releases or the snapshot repository.

Right now the top level pom declares a snapshot version and the modules have fixed versions.
A special case is the submodule PathExpression

We could either go with

  1. Turn everything into a snapshot version, including PathExpression (does not make that much sense, since we'll have many identical versions)
  2. Turn everything into a fixed released version (works, but does not accurately describe how we are building)
  3. Remove PathExpression as a submodule. Build PathExpression seperately, deploy it to the releases. Use it as a dependency and download it from nexus. (this option is the most work, but will actually get rid of using submodules)

How do we want to proceed?

Two Socket test fail and are unsound

After a call to socket.connect() the typestate of the variable socket is already in ERROR state.
It seems as the method connect internally calls another method that changes the typestate too early.
The object is set to state CONNECTED on return from connect.

socket.connect(new SocketAddress() {
		})

Boomerang bodies to Jimple bodies

Hi,

I am trying to use this tool as a pointer analysis for an IFDS analysis. My IFDS analysis is using Jimple bodies, but Boomerang transforms bodies during Pre-transformer. What is recommended way to translate between Jimple/Boomerang? Or Do I need to run my IFDS analysis on Boomerang if I want to use WPDS?

Thanks,
Umar

Deploy Sources

Currently, it seems that no sources are deployed for the following projects:

  • boomerangPDS
  • synchronizedPDS
  • WPDS
  • testCore

In the SecuCheck project, we use a maven goal "copy-dependencies" and would like to download the sources as well that way. It seems that this is currently not possible due to the sources not being deployed.

Thanks!

Imprecision of aliasing query

Swapping statement 1 and 2 yields imprecise results for the aliasQuery?

		B b1 = new B();
		Alloc b2 = new Alloc();

		A a1 = new A(b1);
		A a2 = new A(b2);

		Object b3 = a1.getF();
		Object b4 = a2.getF();

		1: Benchmark.mayAliasQuery(b3, b4, false);
		2: Benchmark.pointsToQuery(b4);

IDEal requires additional nop statements

The BoomerangPretransformer adds a nop statement before each statement.
This is required as the analysis does not perform strong updates correctly in cases like the one below:

	@Test
	public void simpleAlias() {
		File y = new File();
		File x = y;
		x.open();
		x.close();
		mustBeInAcceptingState(x);
		mustBeInAcceptingState(y);
	}

Variable y is not in the correct state.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.