Java: Convert all models to data extensions in testcases.

This commit is contained in:
Michael Nebel
2022-11-22 14:49:52 +01:00
parent 74f02cf855
commit 43a63d6373
17 changed files with 147 additions and 184 deletions

View File

@@ -0,0 +1,145 @@
extensions:
# Model(s) for Kotlin - dataflow/notnullexpr and dataflow/whenexpr test cases.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["", "Uri", False, "getQueryParameter", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
# Model(s) for Java - dataflow/callback-dispatch test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["my.callback.qltest", "A", False, "applyConsumer1", "(Object,Consumer1)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConsumer1Field1Field2", "(A,A,Consumer1)", "", "Argument[0].Field[my.callback.qltest.A.field1]", "Argument[2].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConsumer1Field1Field2", "(A,A,Consumer1)", "", "Argument[1].Field[my.callback.qltest.A.field2]", "Argument[2].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConsumer2", "(Object,Consumer2)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConsumer3", "(Object,Consumer3)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConsumer3_ret_postup", "(Consumer3)", "", "Argument[0].Parameter[0]", "ReturnValue", "value", "manual"]
- ["my.callback.qltest", "A", False, "forEach", "(Object[],Consumer3)", "", "Argument[0].ArrayElement", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyProducer1", "(Producer1)", "", "Argument[0].ReturnValue", "ReturnValue", "value", "manual"]
- ["my.callback.qltest", "A", False, "produceConsume", "(Producer1,Consumer3)", "", "Argument[0].ReturnValue", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "produceConsume", "(Producer1,Consumer3)", "", "Argument[1].Parameter[0]", "ReturnValue", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConverter1", "(Object,Converter1)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"]
- ["my.callback.qltest", "A", False, "applyConverter1", "(Object,Converter1)", "", "Argument[1].ReturnValue", "ReturnValue", "value", "manual"]
# Model(s) for Java - dataflow/collections test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["", "B", False, "readElement", "(Spliterator)", "", "Argument[0].Element", "ReturnValue", "value", "manual"]
- ["", "B", False, "readElement", "(Stream)", "", "Argument[0].Element", "ReturnValue", "value", "manual"]
# Model(s) for Java - dataflow/external-models test cases.
- addsTo:
pack: codeql/java-tests
extensible: extSourceModel
data:
- ["my.qltest", "A", False, "src1", "()", "", "ReturnValue", "qltest", "manual"]
- ["my.qltest", "A", False, "src1", "(String)", "", "ReturnValue", "qltest", "manual"]
- ["my.qltest", "A", False, "src1", "(java.lang.String)", "", "ReturnValue", "qltest-alt", "manual"]
- ["my.qltest", "A", False, "src1", "", "", "ReturnValue", "qltest-all-overloads", "manual"]
- ["my.qltest", "A", False, "src2", "()", "", "ReturnValue", "qltest", "manual"]
- ["my.qltest", "A", False, "src3", "()", "", "ReturnValue", "qltest", "manual"]
- ["my.qltest", "A", True, "src2", "()", "", "ReturnValue", "qltest-w-subtypes", "manual"]
- ["my.qltest", "A", True, "src3", "()", "", "ReturnValue", "qltest-w-subtypes", "manual"]
- ["my.qltest", "A", False, "srcArg", "(Object)", "", "Argument[0]", "qltest-argnum", "manual"]
- ["my.qltest", "A", False, "srcArg", "(Object)", "", "Argument", "qltest-argany", "manual"]
- ["my.qltest", "A$Handler", True, "handle", "(Object)", "", "Parameter[0]", "qltest-param-override", "manual"]
- ["my.qltest", "A$Tag", False, "", "", "Annotated", "ReturnValue", "qltest-retval", "manual"]
- ["my.qltest", "A$Tag", False, "", "", "Annotated", "Parameter", "qltest-param", "manual"]
- ["my.qltest", "A$Tag", False, "", "", "Annotated", "", "qltest-nospec", "manual"]
- ["my.qltest", "A", False, "srcTwoArg", "(String,String)", "", "ReturnValue", "qltest-shortsig", "manual"]
- ["my.qltest", "A", False, "srcTwoArg", "(java.lang.String,java.lang.String)", "", "ReturnValue", "qltest-longsig", "manual"]
- addsTo:
pack: codeql/java-tests
extensible: extSinkModel
data:
- ["my.qltest", "B", False, "sink1", "(Object)", "", "Argument[0]", "qltest", "manual"]
- ["my.qltest", "B", False, "sinkMethod", "()", "", "ReturnValue", "qltest", "manual"]
- ["my.qltest", "B$Tag", False, "", "", "Annotated", "ReturnValue", "qltest-retval", "manual"]
- ["my.qltest", "B$Tag", False, "", "", "Annotated", "Argument", "qltest-arg", "manual"]
- ["my.qltest", "B$Tag", False, "", "", "Annotated", "", "qltest-nospec", "manual"]
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["my.qltest", "C", False, "stepArgRes", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["my.qltest", "C", False, "stepArgArg", "(Object,Object)", "", "Argument[0]", "Argument[1]", "taint", "manual"]
- ["my.qltest", "C", False, "stepArgQual", "(Object)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["my.qltest", "C", False, "stepQualRes", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["my.qltest", "C", False, "stepQualArg", "(Object)", "", "Argument[-1]", "Argument[0]", "taint", "manual"]
- ["my.qltest", "C", False, "stepArgResGenerated", "(Object)", "", "Argument[0]", "ReturnValue", "taint", "generated"]
- ["my.qltest", "C", False, "stepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[0]", "ReturnValue", "taint", "generated"]
- ["my.qltest", "C", False, "stepArgResGeneratedIgnored", "(Object,Object)", "", "Argument[1]", "ReturnValue", "taint", "manual"]
# Model(s) for Java - dataflow/synth-global test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["my.qltest.synth", "A", False, "storeInArray", "(String)", "", "Argument[0]", "SyntheticGlobal[db1].ArrayElement", "value", "manual"]
- ["my.qltest.synth", "A", False, "storeTaintInArray", "(String)", "", "Argument[0]", "SyntheticGlobal[db1].ArrayElement", "taint", "manual"]
- ["my.qltest.synth", "A", False, "storeValue", "(String)", "", "Argument[0]", "SyntheticGlobal[db1]", "value", "manual"]
- ["my.qltest.synth", "A", False, "readValue", "()", "", "SyntheticGlobal[db1]", "ReturnValue", "value", "manual"]
- ["my.qltest.synth", "A", False, "readArray", "()", "", "SyntheticGlobal[db1].ArrayElement", "ReturnValue", "value", "manual"]
# Model(s) for Java - frameworks/android/content-provider-summaries test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "newWithMapValueDefault", "(Object)", "", "Argument[0]", "ReturnValue.MapValue", "value", "manual"]
- ["generatedtest", "Test", False, "newWithMapKeyDefault", "(Object)", "", "Argument[0]", "ReturnValue.MapKey", "value", "manual"]
- ["generatedtest", "Test", False, "getMapValueDefault", "(Object)", "", "Argument[0].MapValue", "ReturnValue", "value", "manual"]
- ["generatedtest", "Test", False, "getMapKeyDefault", "(Object)", "", "Argument[0].MapKey", "ReturnValue", "value", "manual"]
# Model(s) for Java - frameworks/android/intent test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "newBundleWithMapValue", "(Object)", "", "Argument[0]", "ReturnValue.MapValue", "value", "manual"]
- ["generatedtest", "Test", False, "newPersistableBundleWithMapValue", "(Object)", "", "Argument[0]", "ReturnValue.MapValue", "value", "manual"]
- ["generatedtest", "Test", False, "getMapValue", "(BaseBundle)", "", "Argument[0].MapValue", "ReturnValue", "value", "manual"]
- ["generatedtest", "Test", False, "newWithIntent_extras", "(Bundle)", "", "Argument[0]", "ReturnValue.SyntheticField[android.content.Intent.extras]", "value", "manual"]
# Model(s) for Java - frameworks/android/notification test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "getMapKeyDefault", "(Bundle)", "", "Argument[0].MapKey", "ReturnValue", "value", "manual"]
# Model(s) for Java - frameworks/apache-collections test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "newRBWithMapValue", "", "", "Argument[0]", "ReturnValue.MapValue", "value", "manual"]
- ["generatedtest", "Test", False, "newRBWithMapKey", "", "", "Argument[0]", "ReturnValue.MapKey", "value", "manual"]
# Model(s) for Java - frameworks/guave/generated/collect test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "newWithElementDefault", "(Object)", "", "Argument[0]", "ReturnValue.Element", "value", "manual"]
- ["generatedtest", "Test", False, "newWithMapKeyDefault", "(Object)", "", "Argument[0]", "ReturnValue.MapKey", "value", "manual"]
- ["generatedtest", "Test", False, "newWithMapValueDefault", "(Object)", "", "Argument[0]", "ReturnValue.MapValue", "value", "manual"]
# Model(s) for Java - frameworks/stream test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "getElementSpliterator", "(Spliterator)", "", "Argument[0].Element", "ReturnValue", "value", "manual"]
# Model(s) for Java - frameworks/stream test case.
- addsTo:
pack: codeql/java-tests
extensible: extSummaryModel
data:
- ["generatedtest", "Test", False, "getStreamElement", "", "", "Argument[0].Element", "ReturnValue", "value", "manual"]

View File

@@ -2,12 +2,6 @@ import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.ExternalFlow
class Step extends SummaryModelCsv {
override predicate row(string row) {
row = ";Uri;false;getQueryParameter;;;Argument[-1];ReturnValue;taint;manual"
}
}
class Conf extends TaintTracking::Configuration {
Conf() { this = "qltest:notNullExprFlow" }

View File

@@ -2,12 +2,6 @@ import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.ExternalFlow
class Step extends SummaryModelCsv {
override predicate row(string row) {
row = ";Uri;false;getQueryParameter;;;Argument[-1];ReturnValue;taint;manual"
}
}
class Conf extends TaintTracking::Configuration {
Conf() { this = "qltest:notNullExprFlow" }

View File

@@ -3,26 +3,6 @@ import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.ExternalFlow
import TestUtilities.InlineExpectationsTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"my.callback.qltest;A;false;applyConsumer1;(Object,Consumer1);;Argument[0];Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConsumer1Field1Field2;(A,A,Consumer1);;Argument[0].Field[my.callback.qltest.A.field1];Argument[2].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConsumer1Field1Field2;(A,A,Consumer1);;Argument[1].Field[my.callback.qltest.A.field2];Argument[2].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConsumer2;(Object,Consumer2);;Argument[0];Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConsumer3;(Object,Consumer3);;Argument[0];Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConsumer3_ret_postup;(Consumer3);;Argument[0].Parameter[0];ReturnValue;value;manual",
"my.callback.qltest;A;false;forEach;(Object[],Consumer3);;Argument[0].ArrayElement;Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyProducer1;(Producer1);;Argument[0].ReturnValue;ReturnValue;value;manual",
"my.callback.qltest;A;false;produceConsume;(Producer1,Consumer3);;Argument[0].ReturnValue;Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;produceConsume;(Producer1,Consumer3);;Argument[1].Parameter[0];ReturnValue;value;manual",
"my.callback.qltest;A;false;applyConverter1;(Object,Converter1);;Argument[0];Argument[1].Parameter[0];value;manual",
"my.callback.qltest;A;false;applyConverter1;(Object,Converter1);;Argument[1].ReturnValue;ReturnValue;value;manual"
]
}
}
class Conf extends DataFlow::Configuration {
Conf() { this = "qltest:callback-dispatch" }

View File

@@ -3,17 +3,6 @@ import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.ExternalFlow
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
";B;false;readElement;(Spliterator);;Argument[0].Element;ReturnValue;value;manual",
";B;false;readElement;(Stream);;Argument[0].Element;ReturnValue;value;manual"
]
}
}
class HasFlowTest extends InlineFlowTest {
override DataFlow::Configuration getTaintFlowConfig() { none() }
}

View File

@@ -3,20 +3,6 @@ import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.ExternalFlow
import ModelValidation
class SinkModelTest extends SinkModelCsv {
override predicate row(string row) {
row =
[
//`namespace; type; subtypes; name; signature; ext; input; kind`
"my.qltest;B;false;sink1;(Object);;Argument[0];qltest;manual",
"my.qltest;B;false;sinkMethod;();;ReturnValue;qltest;manual",
"my.qltest;B$Tag;false;;;Annotated;ReturnValue;qltest-retval;manual",
"my.qltest;B$Tag;false;;;Annotated;Argument;qltest-arg;manual",
"my.qltest;B$Tag;false;;;Annotated;;qltest-nospec;manual"
]
}
}
from DataFlow::Node node, string kind
where sinkNode(node, kind)
select node, kind

View File

@@ -3,31 +3,6 @@ import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.ExternalFlow
import ModelValidation
class SourceModelTest extends SourceModelCsv {
override predicate row(string row) {
row =
[
//`namespace; type; subtypes; name; signature; ext; output; kind`
"my.qltest;A;false;src1;();;ReturnValue;qltest;manual",
"my.qltest;A;false;src1;(String);;ReturnValue;qltest;manual",
"my.qltest;A;false;src1;(java.lang.String);;ReturnValue;qltest-alt;manual",
"my.qltest;A;false;src1;;;ReturnValue;qltest-all-overloads;manual",
"my.qltest;A;false;src2;();;ReturnValue;qltest;manual",
"my.qltest;A;false;src3;();;ReturnValue;qltest;manual",
"my.qltest;A;true;src2;();;ReturnValue;qltest-w-subtypes;manual",
"my.qltest;A;true;src3;();;ReturnValue;qltest-w-subtypes;manual",
"my.qltest;A;false;srcArg;(Object);;Argument[0];qltest-argnum;manual",
"my.qltest;A;false;srcArg;(Object);;Argument;qltest-argany;manual",
"my.qltest;A$Handler;true;handle;(Object);;Parameter[0];qltest-param-override;manual",
"my.qltest;A$Tag;false;;;Annotated;ReturnValue;qltest-retval;manual",
"my.qltest;A$Tag;false;;;Annotated;Parameter;qltest-param;manual",
"my.qltest;A$Tag;false;;;Annotated;;qltest-nospec;manual",
"my.qltest;A;false;srcTwoArg;(String,String);;ReturnValue;qltest-shortsig;manual",
"my.qltest;A;false;srcTwoArg;(java.lang.String,java.lang.String);;ReturnValue;qltest-longsig;manual"
]
}
}
from DataFlow::Node node, string kind
where sourceNode(node, kind)
select node, kind

View File

@@ -4,23 +4,6 @@ import semmle.code.java.dataflow.ExternalFlow
import ModelValidation
import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//`namespace; type; subtypes; name; signature; ext; input; output; kind`
"my.qltest;C;false;stepArgRes;(Object);;Argument[0];ReturnValue;taint;manual",
"my.qltest;C;false;stepArgArg;(Object,Object);;Argument[0];Argument[1];taint;manual",
"my.qltest;C;false;stepArgQual;(Object);;Argument[0];Argument[-1];taint;manual",
"my.qltest;C;false;stepQualRes;();;Argument[-1];ReturnValue;taint;manual",
"my.qltest;C;false;stepQualArg;(Object);;Argument[-1];Argument[0];taint;manual",
"my.qltest;C;false;stepArgResGenerated;(Object);;Argument[0];ReturnValue;taint;generated",
"my.qltest;C;false;stepArgResGeneratedIgnored;(Object,Object);;Argument[0];ReturnValue;taint;generated",
"my.qltest;C;false;stepArgResGeneratedIgnored;(Object,Object);;Argument[1];ReturnValue;taint;manual",
]
}
}
from DataFlow::Node node1, DataFlow::Node node2
where FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(node1, node2, _)
select node1, node2

View File

@@ -1,16 +1,3 @@
import java
import TestUtilities.InlineFlowTest
import ModelValidation
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"my.qltest.synth;A;false;storeInArray;(String);;Argument[0];SyntheticGlobal[db1].ArrayElement;value;manual",
"my.qltest.synth;A;false;storeTaintInArray;(String);;Argument[0];SyntheticGlobal[db1].ArrayElement;taint;manual",
"my.qltest.synth;A;false;storeValue;(String);;Argument[0];SyntheticGlobal[db1];value;manual",
"my.qltest.synth;A;false;readValue;();;SyntheticGlobal[db1];ReturnValue;value;manual",
"my.qltest.synth;A;false;readArray;();;SyntheticGlobal[db1].ArrayElement;ReturnValue;value;manual",
]
}
}

View File

@@ -1,15 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];ReturnValue.MapValue;value;manual",
"generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];ReturnValue.MapKey;value;manual",
"generatedtest;Test;false;getMapValueDefault;(Object);;Argument[0].MapValue;ReturnValue;value;manual",
"generatedtest;Test;false;getMapKeyDefault;(Object);;Argument[0].MapKey;ReturnValue;value;manual"
]
}
}

View File

@@ -1,15 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;newBundleWithMapValue;(Object);;Argument[0];ReturnValue.MapValue;value;manual",
"generatedtest;Test;false;newPersistableBundleWithMapValue;(Object);;Argument[0];ReturnValue.MapValue;value;manual",
"generatedtest;Test;false;getMapValue;(BaseBundle);;Argument[0].MapValue;ReturnValue;value;manual",
"generatedtest;Test;false;newWithIntent_extras;(Bundle);;Argument[0];ReturnValue.SyntheticField[android.content.Intent.extras];value;manual"
]
}
}

View File

@@ -1,13 +1,3 @@
import java
import semmle.code.java.frameworks.android.Intent
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;getMapKeyDefault;(Bundle);;Argument[0].MapKey;ReturnValue;value;manual"
]
}
}

View File

@@ -1,13 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;newRBWithMapValue;;;Argument[0];ReturnValue.MapValue;value;manual",
"generatedtest;Test;false;newRBWithMapKey;;;Argument[0];ReturnValue.MapKey;value;manual"
]
}
}

View File

@@ -1,14 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
[
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
"generatedtest;Test;false;newWithElementDefault;(Object);;Argument[0];ReturnValue.Element;value;manual",
"generatedtest;Test;false;newWithMapKeyDefault;(Object);;Argument[0];ReturnValue.MapKey;value;manual",
"generatedtest;Test;false;newWithMapValueDefault;(Object);;Argument[0];ReturnValue.MapValue;value;manual"
]
}
}

View File

@@ -1,9 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row =
"generatedtest;Test;false;getElementSpliterator;(Spliterator);;Argument[0].Element;ReturnValue;value;manual"
}
}

View File

@@ -1,8 +1,2 @@
import java
import TestUtilities.InlineFlowTest
class SummaryModelTest extends SummaryModelCsv {
override predicate row(string row) {
row = "generatedtest;Test;false;getStreamElement;;;Argument[0].Element;ReturnValue;value;manual"
}
}

View File

@@ -5,3 +5,5 @@ dependencies:
codeql/java-queries: ${workspace}
extractor: java
tests: .
dataExtensions:
- ext/*.model.yml