Skip to content

Commit af0a1ea

Browse files
committed
Merge branch 'develop' of github.com:secure-software-engineering/FlowDroid into develop-steven
2 parents 15c8e02 + 06079b6 commit af0a1ea

3 files changed

Lines changed: 26 additions & 21 deletions

File tree

soot-infoflow-android/src/soot/jimple/infoflow/android/resources/ARSCFileParser.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,9 +1481,9 @@ protected static class ResTable_TypeSpec {
14811481
*/
14821482
int res0; // uint8
14831483
/**
1484-
* Must be 1.
1484+
* Specifies the number of ResTable_type entries
14851485
*/
1486-
int res1; // uint16
1486+
int typesCount; // uint16
14871487
/**
14881488
* Number of uint32_t entry configuration masks that follow.
14891489
*/
@@ -1497,7 +1497,7 @@ public int hashCode() {
14971497
result = prime * result + ((header == null) ? 0 : header.hashCode());
14981498
result = prime * result + id;
14991499
result = prime * result + res0;
1500-
result = prime * result + res1;
1500+
result = prime * result + typesCount;
15011501
return result;
15021502
}
15031503

@@ -1521,7 +1521,7 @@ public boolean equals(Object obj) {
15211521
return false;
15221522
if (res0 != other.res0)
15231523
return false;
1524-
if (res1 != other.res1)
1524+
if (typesCount != other.typesCount)
15251525
return false;
15261526
return true;
15271527
}
@@ -2696,10 +2696,8 @@ private int readTypeSpecTable(ResTable_TypeSpec typeSpecTable, byte[] data, int
26962696
}
26972697
offset += 1;
26982698

2699-
typeSpecTable.res1 = readUInt16(data, offset);
2700-
if (typeSpecTable.res1 != 0) {
2701-
raiseFormatViolationIssue("File format violation in type spec table: res1 is not zero", offset);
2702-
}
2699+
//this was reserved before and is now used!
2700+
typeSpecTable.typesCount = readUInt16(data, offset);
27032701
offset += 2;
27042702

27052703
typeSpecTable.entryCount = readUInt32(data, offset);

soot-infoflow-cmd/src/soot/jimple/infoflow/cmd/MainClass.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import soot.jimple.infoflow.android.InfoflowAndroidConfiguration.CallbackAnalyzer;
3434
import soot.jimple.infoflow.android.SetupApplication;
3535
import soot.jimple.infoflow.android.config.XMLConfigurationParser;
36+
import soot.jimple.infoflow.android.resources.ARSCFileParser;
3637
import soot.jimple.infoflow.methodSummary.data.provider.LazySummaryProvider;
3738
import soot.jimple.infoflow.methodSummary.taintWrappers.ReportMissingSummaryWrapper;
3839
import soot.jimple.infoflow.methodSummary.taintWrappers.SummaryTaintWrapper;
@@ -103,6 +104,7 @@ public class MainClass {
103104
private static final String OPTION_MAX_CALLBACKS_DEPTH = "md";
104105
private static final String OPTION_PATH_SPECIFIC_RESULTS = "ps";
105106
private static final String OPTION_MAX_THREAD_NUMBER = "mt";
107+
private static final String OPTION_LENIENT_PARSING_MODE = "lp";
106108

107109
// Inter-component communication
108110
private static final String OPTION_ICC_MODEL = "im";
@@ -249,6 +251,8 @@ private void initializeCommandLineOptions() {
249251
options.addOption(OPTION_CALLGRAPH_FILE, "callgraphdir", true,
250252
"The file in which to store and from which to read serialized callgraphs");
251253
options.addOption(OPTION_CALLGRAPH_ONLY, "callgraphonly", false, "Only compute the callgraph and terminate");
254+
options.addOption(OPTION_LENIENT_PARSING_MODE, "lenientparsing", false,
255+
"Enables non-strict parsing, i.e. tries to continue rather than fail in case of a parsing error");
252256
}
253257

254258
public static void main(String[] args) throws Exception {
@@ -883,6 +887,9 @@ private void parseCommandLineOptions(CommandLine cmd, InfoflowAndroidConfigurati
883887
config.setExcludeSootLibraryClasses(false);
884888
config.setIgnoreFlowsInSystemPackages(false);
885889
}
890+
if (cmd.hasOption(OPTION_LENIENT_PARSING_MODE)) {
891+
ARSCFileParser.STRICT_MODE = false;
892+
}
886893

887894
// Callgraph-specific options
888895
if (cmd.hasOption(OPTION_CALLGRAPH_ONLY))

soot-infoflow-summaries/summariesManual/android.util.SparseArray.xml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<flow isAlias="true" typeChecking="false" final="true">
1010
<from sourceSinkType="Parameter" ParameterIndex="1" />
1111
<to sourceSinkType="Field" BaseType="android.util.SparseArray"
12-
AccessPath="[android.util.SparseArray: Object[] mValues]"
12+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
1313
AccessPathTypes="[Object[]]"
1414
constrained="true" />
1515
</flow>
@@ -18,7 +18,7 @@
1818
<method id="void clear()">
1919
<clears>
2020
<clear sourceSinkType="Field"
21-
AccessPath="[android.util.SparseArray: Object[] mValues]"
21+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
2222
constrained="true"/>
2323
</clears>
2424
</method>
@@ -28,7 +28,7 @@
2828
</constraints>
2929
<clears>
3030
<clear sourceSinkType="Field"
31-
AccessPath="[android.util.SparseArray: Object[] mValues]"
31+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
3232
constrained="true" />
3333
</clears>
3434
</method>
@@ -39,7 +39,7 @@
3939
<flows>
4040
<flow isAlias="true" typeChecking="false" final="true">
4141
<from sourceSinkType="Field" BaseType="android.util.SparseArray"
42-
AccessPath="[android.util.SparseArray: Object[] mValues]"
42+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
4343
AccessPathTypes="[Object[]]"
4444
constrained="true" />
4545
<to sourceSinkType="Return" />
@@ -53,7 +53,7 @@
5353
<flows>
5454
<flow isAlias="true" typeChecking="false">
5555
<from sourceSinkType="Field" BaseType="android.util.SparseArray"
56-
AccessPath="[android.util.SparseArray: Object[] mValues]"
56+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
5757
AccessPathTypes="[Object[]]"
5858
constrained="true" />
5959
<to sourceSinkType="Return" />
@@ -72,14 +72,14 @@
7272
<flow isAlias="true" typeChecking="false">
7373
<from sourceSinkType="Parameter" ParameterIndex="1" />
7474
<to sourceSinkType="Field" BaseType="android.util.SparseArray"
75-
AccessPath="[android.util.SparseArray: Object[] mValues]"
75+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
7676
AccessPathTypes="[Object[]]"
7777
constrained="true" />
7878
</flow>
7979
</flows>
8080
<clears>
8181
<clear sourceSinkType="Field"
82-
AccessPath="[android.util.SparseArray: Object[] mValues]"
82+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
8383
constrained="true" />
8484
</clears>
8585
</method>
@@ -89,7 +89,7 @@
8989
</constraints>
9090
<clears>
9191
<clear sourceSinkType="Field"
92-
AccessPath="[android.util.SparseArray: Object[] mValues]"
92+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
9393
constrained="true" />
9494
</clears>
9595
</method>
@@ -101,14 +101,14 @@
101101
<flow isAlias="true" typeChecking="false">
102102
<from sourceSinkType="Parameter" ParameterIndex="1" />
103103
<to sourceSinkType="Field" BaseType="android.util.SparseArray"
104-
AccessPath="[android.util.SparseArray: Object[] mValues]"
104+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
105105
AccessPathTypes="[Object[]]"
106106
constrained="true" />
107107
</flow>
108108
</flows>
109109
<clears>
110110
<clear sourceSinkType="Field"
111-
AccessPath="[android.util.SparseArray: Object[] mValues]"
111+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
112112
constrained="true" />
113113
</clears>
114114
</method>
@@ -118,7 +118,7 @@
118118
</constraints>
119119
<clears>
120120
<clear sourceSinkType="Field" BaseType="android.util.SparseArray"
121-
AccessPath="[android.util.SparseArray: Object[] mValues]"
121+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
122122
AccessPathTypes="[Object[]]"
123123
constrained="true"
124124
isAlias="true" />
@@ -127,7 +127,7 @@
127127
<flow isAlias="true" typeChecking="false">
128128
<from sourceSinkType="Parameter" ParameterIndex="1" />
129129
<to sourceSinkType="Field" BaseType="android.util.SparseArray"
130-
AccessPath="[android.util.SparseArray: Object[] mValues]"
130+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
131131
AccessPathTypes="[Object[]]" />
132132
</flow>
133133
</flows>
@@ -136,7 +136,7 @@
136136
<flows>
137137
<flow isAlias="true" typeChecking="false">
138138
<from sourceSinkType="Field" BaseType="android.util.SparseArray"
139-
AccessPath="[android.util.SparseArray: Object[] mValues]"
139+
AccessPath="[android.util.SparseArray: java.lang.Object[] mValues]"
140140
AccessPathTypes="[Object[]]" />
141141
<to sourceSinkType="Return" />
142142
</flow>

0 commit comments

Comments
 (0)