Skip to content

Commit 3e53484

Browse files
committed
Java: Convert Google HTTP client API parseAs sink to CSV format
1 parent e544fae commit 3e53484

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ private module Frameworks {
7676
private import semmle.code.java.frameworks.ApacheHttp
7777
private import semmle.code.java.frameworks.apache.Lang
7878
private import semmle.code.java.frameworks.guava.Guava
79+
private import semmle.code.java.frameworks.google.GoogleHttpClientApi
7980
private import semmle.code.java.security.ResponseSplitting
8081
private import semmle.code.java.security.XSS
8182
}

java/ql/src/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,7 @@ import java
22
import semmle.code.java.Serializability
33
import semmle.code.java.dataflow.DataFlow
44
import semmle.code.java.dataflow.DataFlow5
5-
6-
/** The method `parseAs` in `com.google.api.client.http.HttpResponse`. */
7-
private class ParseAsMethod extends Method {
8-
ParseAsMethod() {
9-
this.getDeclaringType().hasQualifiedName("com.google.api.client.http", "HttpResponse") and
10-
this.hasName("parseAs")
11-
}
12-
}
5+
private import semmle.code.java.dataflow.ExternalFlow
136

147
private class TypeLiteralToParseAsFlowConfiguration extends DataFlow5::Configuration {
158
TypeLiteralToParseAsFlowConfiguration() {
@@ -18,16 +11,17 @@ private class TypeLiteralToParseAsFlowConfiguration extends DataFlow5::Configura
1811

1912
override predicate isSource(DataFlow::Node source) { source.asExpr() instanceof TypeLiteral }
2013

21-
override predicate isSink(DataFlow::Node sink) {
22-
exists(MethodAccess ma |
23-
ma.getAnArgument() = sink.asExpr() and
24-
ma.getMethod() instanceof ParseAsMethod
25-
)
26-
}
14+
override predicate isSink(DataFlow::Node sink) { sinkNode(sink, "google-parse-as") }
2715

2816
TypeLiteral getSourceWithFlowToParseAs() { hasFlow(DataFlow::exprNode(result), _) }
2917
}
3018

19+
private class ParseAsSinkModel extends SinkModelCsv {
20+
override predicate row(string row) {
21+
row = ["com.google.api.client.http;HttpResponse;false;parseAs;;;Argument;google-parse-as"]
22+
}
23+
}
24+
3125
/** A field that is deserialized by `HttpResponse.parseAs`. */
3226
class HttpResponseParseAsDeserializableField extends DeserializableField {
3327
HttpResponseParseAsDeserializableField() {

0 commit comments

Comments
 (0)