Java: update test case

This commit is contained in:
Jami Cogswell
2022-12-15 23:47:17 -05:00
parent f01ee9e4c2
commit fdcaa93200
3 changed files with 85 additions and 160 deletions

View File

@@ -5,77 +5,90 @@ private import semmle.code.java.dataflow.FlowSummary
private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
private import semmle.code.java.dataflow.ExternalFlow
class TopJdkApi extends Callable {
predicate topJdkApiName(string apiName) {
apiName in [
// top 100 JDK APIs
"java.lang.StringBuilder#append(String)", "java.util.List#get(int)",
"java.util.List#add(Object)", "java.util.Map#put(Object,Object)",
"java.lang.String#equals(Object)", "java.util.Map#get(Object)", "java.util.List#size()",
"java.util.Collection#stream()", "java.lang.Object#getClass()",
"java.util.stream.Stream#collect(Collector)", "java.util.Objects#equals(Object,Object)",
"java.lang.String#format(String,Object[])", "java.util.stream.Stream#map(Function)",
"java.lang.Throwable#getMessage()", "java.util.Arrays#asList(Object[])",
"java.lang.String#equalsIgnoreCase(String)", "java.util.List#isEmpty()",
"java.util.Set#add(Object)", "java.util.HashMap#put(Object,Object)",
"java.util.stream.Collectors#toList()", "java.lang.StringBuilder#append(char)",
"java.util.stream.Stream#filter(Predicate)", "java.lang.String#length()",
"java.lang.Enum#name()", "java.lang.Object#toString()", "java.util.Optional#get()",
"java.lang.StringBuilder#toString()",
"java.lang.IllegalArgumentException#IllegalArgumentException(String)",
"java.lang.Class#getName()", "java.lang.Enum#Enum(String,int)",
"java.io.PrintWriter#write(String)", "java.util.Entry#getValue()", "java.util.Entry#getKey()",
"java.util.Iterator#next()", "java.lang.Object#hashCode()",
"java.util.Optional#orElse(Object)", "java.lang.StringBuffer#append(String)",
"java.util.Collections#singletonList(Object)", "java.lang.Iterable#forEach(Consumer)",
"java.util.Optional#of(Object)", "java.lang.String#contains(CharSequence)",
"java.util.ArrayList#add(Object)", "java.util.Optional#ofNullable(Object)",
"java.util.Collections#emptyList()", "java.math.BigDecimal#BigDecimal(String)",
"java.lang.System#currentTimeMillis()", "java.lang.Object#equals(Object)",
"java.util.Map#containsKey(Object)", "java.util.Optional#isPresent()",
"java.lang.String#trim()", "java.util.List#addAll(Collection)",
"java.util.Set#contains(Object)", "java.util.Optional#map(Function)",
"java.util.Map#entrySet()", "java.util.Optional#empty()",
"java.lang.Integer#parseInt(String)", "java.lang.String#startsWith(String)",
"java.lang.IllegalStateException#IllegalStateException(String)",
"java.lang.Enum#equals(Object)", "java.util.Iterator#hasNext()",
"java.util.List#contains(Object)", "java.lang.String#substring(int,int)",
"java.util.List#of(Object)", "java.util.Objects#hash(Object[])",
"java.lang.RuntimeException#RuntimeException(String)", "java.lang.String#isEmpty()",
"java.lang.String#replace(CharSequence,CharSequence)", "java.util.Set#size()",
"java.io.File#File(String)", "java.lang.StringBuilder#append(Object)",
"java.lang.String#split(String)", "java.util.Map#values()", "java.util.UUID#randomUUID()",
"java.util.ArrayList#ArrayList(Collection)", "java.util.Map#keySet()",
"java.sql.ResultSet#getString(String)", "java.lang.String#hashCode()",
"java.lang.Throwable#Throwable(Throwable)", "java.util.HashMap#get(Object)",
"java.lang.Class#getSimpleName()", "java.util.Set#isEmpty()", "java.util.Map#size()",
"java.lang.String#substring(int)", "java.util.Map#remove(Object)",
"java.lang.Throwable#printStackTrace()", "java.util.stream.Stream#findFirst()",
"java.util.Optional#ifPresent(Consumer)", "java.lang.String#valueOf(Object)",
"java.lang.String#toLowerCase()", "java.util.UUID#toString()",
"java.lang.StringBuilder#append(int)", "java.util.Objects#requireNonNull(Object,String)",
"java.nio.file.Path#resolve(String)", "java.lang.Enum#toString()",
"java.lang.RuntimeException#RuntimeException(Throwable)", "java.util.Collection#size()",
"java.lang.String#charAt(int)", "java.util.stream.Stream#forEach(Consumer)",
"java.util.Map#isEmpty()", "java.lang.String#valueOf(int)"
]
}
predicate hasCallable(string apiName) {
exists(Callable c |
apiName =
c.getDeclaringType().getPackage() + "." + c.getDeclaringType().getSourceDeclaration() + "#" +
c.getName() + paramsString(c)
)
}
class TopJdkApi extends SummarizedCallableBase {
TopJdkApi() {
exists(string apiName |
apiName =
this.getDeclaringType().getPackage() + "." + this.getDeclaringType().getSourceDeclaration() +
"#" + this.getName() + paramsString(this) and
apiName in [
// top 100 JDK APIs
"java.lang.StringBuilder#append(String)", "java.util.List#get(int)",
"java.util.List#add(Object)", "java.util.Map#put(Object,Object)",
"java.lang.String#equals(Object)", "java.util.Map#get(Object)", "java.util.List#size()",
"java.util.Collection#stream()", "java.lang.Object#getClass()",
"java.util.stream.Stream#collect(Collector)", "java.util.Objects#equals(Object,Object)",
"java.lang.String#format(String,Object[])", "java.util.stream.Stream#map(Function)",
"java.lang.Throwable#getMessage()", "java.util.Arrays#asList(Object[])",
"java.lang.String#equalsIgnoreCase(String)", "java.util.List#isEmpty()",
"java.util.Set#add(Object)", "java.util.HashMap#put(Object,Object)",
"java.util.stream.Collectors#toList()", "java.lang.StringBuilder#append(char)",
"java.util.stream.Stream#filter(Predicate)", "java.lang.String#length()",
"java.lang.Enum#name()", "java.lang.Object#toString()", "java.util.Optional#get()",
"java.lang.StringBuilder#toString()",
"java.lang.IllegalArgumentException#IllegalArgumentException(String)",
"java.lang.Class#getName()", "java.lang.Enum#Enum(String,int)",
"java.io.PrintWriter#write(String)", "java.util.Entry#getValue()",
"java.util.Entry#getKey()", "java.util.Iterator#next()", "java.lang.Object#hashCode()",
"java.util.Optional#orElse(Object)", "java.lang.StringBuffer#append(String)",
"java.util.Collections#singletonList(Object)", "java.lang.Iterable#forEach(Consumer)",
"java.util.Optional#of(Object)", "java.lang.String#contains(CharSequence)",
"java.util.ArrayList#add(Object)", "java.util.Optional#ofNullable(Object)",
"java.util.Collections#emptyList()", "java.math.BigDecimal#BigDecimal(String)",
"java.lang.System#currentTimeMillis()", "java.lang.Object#equals(Object)",
"java.util.Map#containsKey(Object)", "java.util.Optional#isPresent()",
"java.lang.String#trim()", "java.util.List#addAll(Collection)",
"java.util.Set#contains(Object)", "java.util.Optional#map(Function)",
"java.util.Map#entrySet()", "java.util.Optional#empty()",
"java.lang.Integer#parseInt(String)", "java.lang.String#startsWith(String)",
"java.lang.IllegalStateException#IllegalStateException(String)",
"java.lang.Enum#equals(Object)", "java.util.Iterator#hasNext()",
"java.util.List#contains(Object)", "java.lang.String#substring(int,int)",
"java.util.List#of(Object)", "java.util.Objects#hash(Object[])",
"java.lang.RuntimeException#RuntimeException(String)", "java.lang.String#isEmpty()",
"java.lang.String#replace(CharSequence,CharSequence)", "java.util.Set#size()",
"java.io.File#File(String)", "java.lang.StringBuilder#append(Object)",
"java.lang.String#split(String)", "java.util.Map#values()", "java.util.UUID#randomUUID()",
"java.util.ArrayList#ArrayList(Collection)", "java.util.Map#keySet()",
"java.sql.ResultSet#getString(String)", "java.lang.String#hashCode()",
"java.lang.Throwable#Throwable(Throwable)", "java.util.HashMap#get(Object)",
"java.lang.Class#getSimpleName()", "java.util.Set#isEmpty()", "java.util.Map#size()",
"java.lang.String#substring(int)", "java.util.Map#remove(Object)",
"java.lang.Throwable#printStackTrace()", "java.util.stream.Stream#findFirst()",
"java.util.Optional#ifPresent(Consumer)", "java.lang.String#valueOf(Object)",
"java.lang.String#toLowerCase()", "java.util.UUID#toString()",
"java.lang.StringBuilder#append(int)", "java.util.Objects#requireNonNull(Object,String)",
"java.nio.file.Path#resolve(String)", "java.lang.Enum#toString()",
"java.lang.RuntimeException#RuntimeException(Throwable)", "java.util.Collection#size()",
"java.lang.String#charAt(int)", "java.util.stream.Stream#forEach(Consumer)",
"java.util.Map#isEmpty()", "java.lang.String#valueOf(int)"
]
this.asCallable().getDeclaringType().getPackage() + "." +
this.asCallable().getDeclaringType().getSourceDeclaration() + "#" +
this.asCallable().getName() + paramsString(this.asCallable()) and
topJdkApiName(apiName)
)
}
/** Holds if this API has a manual summary model. */
private predicate hasManualSummary() {
exists(SummarizedCallable sc | this = sc.asCallable() and sc.hasProvenance(false))
this instanceof SummarizedCallable and
this.(SummarizedCallable).hasProvenance(false)
}
/** Holds if this API has a manual neutral model. */
private predicate hasManualNeutral() {
exists(FlowSummaryImpl::Public::NeutralCallable nsc |
this = nsc.asCallable() and nsc.hasProvenance(false)
)
this instanceof FlowSummaryImpl::Public::NeutralCallable and
this.(FlowSummaryImpl::Public::NeutralCallable).hasProvenance(false)
}
/** Holds if this API has a manual MaD model. */

View File

@@ -1,97 +1,3 @@
| java.io.File#File(String) |
| java.io.PrintWriter#write(String) |
| java.lang.Class#getName() |
| java.lang.Class#getSimpleName() |
| java.lang.Enum#Enum(String,int) |
| java.lang.Enum#equals(Object) |
| java.lang.Enum#name() |
| java.lang.Enum#toString() |
| java.lang.IllegalArgumentException#IllegalArgumentException(String) |
| java.lang.IllegalStateException#IllegalStateException(String) |
| java.lang.Integer#parseInt(String) |
| java.lang.Iterable#forEach(Consumer) |
| java.lang.Object#equals(Object) |
| java.lang.Object#getClass() |
| java.lang.Object#hashCode() |
| java.lang.Object#toString() |
| java.lang.RuntimeException#RuntimeException(String) |
| java.lang.RuntimeException#RuntimeException(Throwable) |
| java.lang.String#charAt(int) |
| java.lang.String#contains(CharSequence) |
| java.lang.String#equals(Object) |
| java.lang.String#equalsIgnoreCase(String) |
| java.lang.String#format(String,Object[]) |
| java.lang.String#hashCode() |
| java.lang.String#isEmpty() |
| java.lang.String#length() |
| java.lang.String#replace(CharSequence,CharSequence) |
| java.lang.String#split(String) |
| java.lang.String#startsWith(String) |
| java.lang.String#substring(int) |
| java.lang.String#substring(int,int) |
| java.lang.String#toLowerCase() |
| java.lang.String#trim() |
| java.lang.String#valueOf(int) |
| java.lang.StringBuffer#append(String) |
| java.lang.StringBuilder#append(Object) |
| java.lang.StringBuilder#append(String) |
| java.lang.StringBuilder#append(char) |
| java.lang.StringBuilder#append(int) |
| java.lang.StringBuilder#toString() |
| java.lang.System#currentTimeMillis() |
| java.lang.Throwable#Throwable(Throwable) |
| java.lang.Throwable#getMessage() |
| java.math.BigDecimal#BigDecimal(String) |
| java.nio.file.Path#resolve(String) |
| java.sql.ResultSet#getString(String) |
| java.util.ArrayList#ArrayList(Collection) |
| java.util.ArrayList#add(Object) |
| java.util.Arrays#asList(Object[]) |
| java.util.Collection#size() |
| java.util.Collection#stream() |
| java.util.Collections#emptyList() |
| java.util.Collections#singletonList(Object) |
| java.util.Entry#getKey() |
| java.util.Entry#getValue() |
| java.util.HashMap#get(Object) |
| java.util.HashMap#put(Object,Object) |
| java.util.Iterator#hasNext() |
| java.util.Iterator#next() |
| java.util.List#add(Object) |
| java.util.List#addAll(Collection) |
| java.util.List#contains(Object) |
| java.util.List#get(int) |
| java.util.List#isEmpty() |
| java.util.List#of(Object) |
| java.util.List#size() |
| java.util.Map#containsKey(Object) |
| java.util.Map#entrySet() |
| java.util.Map#get(Object) |
| java.util.Map#isEmpty() |
| java.util.Map#keySet() |
| java.util.Map#put(Object,Object) |
| java.util.Map#remove(Object) |
| java.util.Map#size() |
| java.util.Map#values() |
| java.util.Objects#equals(Object,Object) |
| java.util.Objects#hash(Object[]) |
| java.util.Objects#requireNonNull(Object,String) |
| java.util.Optional#empty() |
| java.util.Optional#get() |
| java.util.Optional#ifPresent(Consumer) |
| java.util.Optional#isPresent() |
| java.util.Optional#map(Function) |
| java.util.Optional#of(Object) |
| java.util.Optional#ofNullable(Object) |
| java.util.Optional#orElse(Object) |
| java.util.Set#add(Object) |
| java.util.Set#contains(Object) |
| java.util.Set#isEmpty() |
| java.util.Set#size() |
| java.util.UUID#randomUUID() |
| java.util.UUID#toString() |
| java.util.stream.Collectors#toList() |
| java.util.stream.Stream#filter(Predicate) |
| java.util.stream.Stream#findFirst() |
| java.util.stream.Stream#forEach(Consumer) |
| java.util.stream.Stream#map(Function) |
| java.lang.String#valueOf(Object) |
| java.lang.Throwable#printStackTrace() |
| java.util.stream.Stream#collect(Collector) |

View File

@@ -8,10 +8,16 @@ import java
import semmle.code.java.dataflow.ExternalFlow
import TopJdkApis
from TopJdkApi topApi, string apiName
from string apiName, TopJdkApi topApi
where
topApi.hasManualMadModel() and
// top jdk api names for which there is no callable
topJdkApiName(apiName) and
not hasCallable(apiName)
or
// top jdk api names for which there isn't a manual model
not topApi.hasManualMadModel() and
apiName =
topApi.getDeclaringType().getPackage() + "." + topApi.getDeclaringType().getSourceDeclaration() +
"#" + topApi.getName() + paramsString(topApi)
topApi.asCallable().getDeclaringType().getPackage() + "." +
topApi.asCallable().getDeclaringType().getSourceDeclaration() + "#" +
topApi.asCallable().getName() + paramsString(topApi.asCallable())
select apiName order by apiName