Skip to content

Commit d07babe

Browse files
Jami Cogswellatorralba
authored andcommitted
add initial framework for service and receiver test cases
1 parent 6cf3898 commit d07babe

File tree

3 files changed

+58
-69
lines changed

3 files changed

+58
-69
lines changed

java/ql/lib/semmle/code/java/frameworks/android/DeepLink.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ private import semmle.code.xml.AndroidManifest
2222
// ! experimental - make a DeepLink step that combine Activity, Service, Receiver, etc.
2323
private class DeepLinkIntentStep extends AdditionalValueStep {
2424
// DeepLinkIntentStep() {
25-
// this instanceof StartActivityIntentStep_ContextAndActivity or
25+
// this instanceof StartActivityIntentStep or
2626
// this instanceof SendBroadcastReceiverIntentStep or
2727
// this instanceof StartServiceIntentStep
2828
// }
Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,5 @@
1-
2-
// !!! From AsyncTask, update for DeepLinks... !!!
3-
4-
import android.os.AsyncTask;
5-
1+
// ! adding tests in `intent` directory instead for now
62
public class Test {
73

8-
private static Object source(String kind) {
9-
return null;
10-
}
11-
12-
private static void sink(Object o) {}
13-
14-
public void test() {
15-
TestAsyncTask t = new TestAsyncTask();
16-
t.execute(source("execute"), null);
17-
t.executeOnExecutor(null, source("executeOnExecutor"), null);
18-
SafeAsyncTask t2 = new SafeAsyncTask();
19-
t2.execute("safe");
20-
TestConstructorTask t3 = new TestConstructorTask(source("constructor"), "safe");
21-
t3.execute(source("params"));
22-
}
23-
24-
private class TestAsyncTask extends AsyncTask<Object, Object, Object> {
25-
@Override
26-
protected Object doInBackground(Object... params) {
27-
sink(params[0]); // $ hasTaintFlow=execute hasTaintFlow=executeOnExecutor
28-
sink(params[1]); // $ SPURIOUS: hasTaintFlow=execute hasTaintFlow=executeOnExecutor
29-
return null;
30-
}
31-
}
32-
33-
private class SafeAsyncTask extends AsyncTask<Object, Object, Object> {
34-
@Override
35-
protected Object doInBackground(Object... params) {
36-
sink(params[0]); // Safe
37-
return null;
38-
}
39-
}
40-
41-
static class TestConstructorTask extends AsyncTask<Object, Object, Object> {
42-
private Object field;
43-
private Object safeField;
44-
private Object initField;
45-
{
46-
initField = Test.source("init");
47-
}
48-
49-
public TestConstructorTask(Object field, Object safeField) {
50-
this.field = field;
51-
this.safeField = safeField;
52-
}
53-
54-
@Override
55-
protected Object doInBackground(Object... params) {
56-
sink(params[0]); // $ hasTaintFlow=params
57-
sink(field); // $ hasValueFlow=constructor
58-
sink(safeField); // Safe
59-
sink(initField); // $ hasValueFlow=init
60-
return params[0];
61-
}
62-
63-
@Override
64-
protected void onPostExecute(Object param) {
65-
sink(param); // $ hasTaintFlow=params
66-
sink(field); // $ hasValueFlow=constructor
67-
sink(safeField); // Safe
68-
sink(initField); // $ hasValueFlow=init
69-
}
704

71-
}
725
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import android.app.Activity;
2+
import android.app.Service;
3+
import android.content.BroadcastReceiver;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
7+
public class TestStartComponentToIntent {
8+
9+
static Object source() {
10+
return null;
11+
}
12+
13+
static void sink(Object sink) {}
14+
15+
public void testActivity(Context ctx) {
16+
Intent intent = new Intent(null, SomeActivity.class);
17+
intent.putExtra("data", (String) source());
18+
ctx.startActivity(intent);
19+
}
20+
21+
static class SomeActivity extends Activity {
22+
23+
public void testActivity() {
24+
sink(getIntent().getStringExtra("data")); // $ hasValueFlow
25+
}
26+
}
27+
28+
// ! WIP
29+
public void testService(Context ctx) {
30+
Intent intent = new Intent(null, SomeService.class);
31+
intent.putExtra("data", (String) source());
32+
ctx.startService(intent);
33+
}
34+
35+
public void testBroadcastReceiver(Context ctx) {
36+
Intent intent = new Intent(null, SomeBroadcastReceiver.class);
37+
intent.putExtra("data", (String) source());
38+
ctx.sendBroadcast(intent);
39+
}
40+
41+
static class SomeService extends Service {
42+
43+
public void test() {
44+
// ! WIP
45+
sink(getIntent().getStringExtra("data")); // $ hasValueFlow
46+
}
47+
}
48+
49+
static class SomeBroadcastReceiver extends BroadcastReceiver {
50+
51+
public void test() {
52+
// ! WIP
53+
sink(getIntent().getStringExtra("data")); // $ hasValueFlow
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)