Skip to content

Commit 351a245

Browse files
committed
Add tests for JacksonSerializability
Upgraded jackson stubs to 2.12
1 parent 632ae74 commit 351a245

File tree

34 files changed

+2934
-185
lines changed

34 files changed

+2934
-185
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-http-4.4.13/:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/fastjson-1.2.74/:${testdir}/../../../../stubs/gson-2.8.6/:${testdir}/../../../../stubs/jackson-databind-2.10/:${testdir}/../../../../stubs/springframework-5.3.8/
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-http-4.4.13/:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/fastjson-1.2.74/:${testdir}/../../../../stubs/gson-2.8.6/:${testdir}/../../../../stubs/jackson-databind-2.12/:${testdir}/../../../../stubs/springframework-5.3.8/
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/jackson-databind-2.10
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/jackson-databind-2.12
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.10:${testdir}/../../../stubs/akka-2.6.x
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/google-android-9.0.0:${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/akka-2.6.x
Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
package generatedtest;
2+
3+
import com.fasterxml.jackson.core.JsonFactory;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.core.type.TypeReference;
6+
import com.fasterxml.jackson.databind.JavaType;
7+
import com.fasterxml.jackson.databind.JsonNode;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.fasterxml.jackson.databind.ObjectReader;
10+
import java.io.DataInput;
11+
import java.io.File;
12+
import java.io.InputStream;
13+
import java.io.Reader;
14+
import java.net.URL;
15+
import java.util.Map;
16+
17+
// Test case generated by GenerateFlowTestCase.ql
18+
public class Test {
19+
20+
Object newWithMapValue(Object element) {
21+
return Map.of(null, element);
22+
}
23+
24+
Object source() {
25+
return null;
26+
}
27+
28+
void sink(Object o) {}
29+
30+
public void test() throws Exception {
31+
32+
{
33+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
34+
JsonParser out = null;
35+
char[] in = (char[]) source();
36+
JsonFactory instance = null;
37+
out = instance.createParser(in, 0, 0);
38+
sink(out); // $ hasTaintFlow
39+
}
40+
{
41+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
42+
JsonParser out = null;
43+
char[] in = (char[]) source();
44+
JsonFactory instance = null;
45+
out = instance.createParser(in);
46+
sink(out); // $ hasTaintFlow
47+
}
48+
{
49+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
50+
JsonParser out = null;
51+
byte[] in = (byte[]) source();
52+
JsonFactory instance = null;
53+
out = instance.createParser(in, 0, 0);
54+
sink(out); // $ hasTaintFlow
55+
}
56+
{
57+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
58+
JsonParser out = null;
59+
byte[] in = (byte[]) source();
60+
JsonFactory instance = null;
61+
out = instance.createParser(in);
62+
sink(out); // $ hasTaintFlow
63+
}
64+
{
65+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
66+
JsonParser out = null;
67+
URL in = (URL) source();
68+
JsonFactory instance = null;
69+
out = instance.createParser(in);
70+
sink(out); // $ hasTaintFlow
71+
}
72+
{
73+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
74+
JsonParser out = null;
75+
String in = (String) source();
76+
JsonFactory instance = null;
77+
out = instance.createParser(in);
78+
sink(out); // $ hasTaintFlow
79+
}
80+
{
81+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
82+
JsonParser out = null;
83+
Reader in = (Reader) source();
84+
JsonFactory instance = null;
85+
out = instance.createParser(in);
86+
sink(out); // $ hasTaintFlow
87+
}
88+
{
89+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
90+
JsonParser out = null;
91+
InputStream in = (InputStream) source();
92+
JsonFactory instance = null;
93+
out = instance.createParser(in);
94+
sink(out); // $ hasTaintFlow
95+
}
96+
{
97+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
98+
JsonParser out = null;
99+
File in = (File) source();
100+
JsonFactory instance = null;
101+
out = instance.createParser(in);
102+
sink(out); // $ hasTaintFlow
103+
}
104+
{
105+
// "com.fasterxml.jackson.core;JsonFactory;false;createParser;;;Argument[0];ReturnValue;taint"
106+
JsonParser out = null;
107+
DataInput in = (DataInput) source();
108+
JsonFactory instance = null;
109+
out = instance.createParser(in);
110+
sink(out); // $ hasTaintFlow
111+
}
112+
{
113+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
114+
JsonParser out = null;
115+
char[] in = (char[]) source();
116+
ObjectMapper instance = null;
117+
out = instance.createParser(in, 0, 0);
118+
sink(out); // $ hasTaintFlow
119+
}
120+
{
121+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
122+
JsonParser out = null;
123+
char[] in = (char[]) source();
124+
ObjectMapper instance = null;
125+
out = instance.createParser(in);
126+
sink(out); // $ hasTaintFlow
127+
}
128+
{
129+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
130+
JsonParser out = null;
131+
byte[] in = (byte[]) source();
132+
ObjectMapper instance = null;
133+
out = instance.createParser(in, 0, 0);
134+
sink(out); // $ hasTaintFlow
135+
}
136+
{
137+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
138+
JsonParser out = null;
139+
byte[] in = (byte[]) source();
140+
ObjectMapper instance = null;
141+
out = instance.createParser(in);
142+
sink(out); // $ hasTaintFlow
143+
}
144+
{
145+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
146+
JsonParser out = null;
147+
URL in = (URL) source();
148+
ObjectMapper instance = null;
149+
out = instance.createParser(in);
150+
sink(out); // $ hasTaintFlow
151+
}
152+
{
153+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
154+
JsonParser out = null;
155+
String in = (String) source();
156+
ObjectMapper instance = null;
157+
out = instance.createParser(in);
158+
sink(out); // $ hasTaintFlow
159+
}
160+
{
161+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
162+
JsonParser out = null;
163+
Reader in = (Reader) source();
164+
ObjectMapper instance = null;
165+
out = instance.createParser(in);
166+
sink(out); // $ hasTaintFlow
167+
}
168+
{
169+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
170+
JsonParser out = null;
171+
InputStream in = (InputStream) source();
172+
ObjectMapper instance = null;
173+
out = instance.createParser(in);
174+
sink(out); // $ hasTaintFlow
175+
}
176+
{
177+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
178+
JsonParser out = null;
179+
File in = (File) source();
180+
ObjectMapper instance = null;
181+
out = instance.createParser(in);
182+
sink(out); // $ hasTaintFlow
183+
}
184+
{
185+
// "com.fasterxml.jackson.databind;ObjectMapper;false;createParser;;;Argument[0];ReturnValue;taint"
186+
JsonParser out = null;
187+
DataInput in = (DataInput) source();
188+
ObjectMapper instance = null;
189+
out = instance.createParser(in);
190+
sink(out); // $ hasTaintFlow
191+
}
192+
{
193+
// "com.fasterxml.jackson.databind;ObjectMapper;true;convertValue;;;Argument[0];ReturnValue;taint"
194+
Object out = null;
195+
Object in = (Object) source();
196+
ObjectMapper instance = null;
197+
out = instance.convertValue(in, (TypeReference) null);
198+
sink(out); // $ hasTaintFlow
199+
}
200+
{
201+
// "com.fasterxml.jackson.databind;ObjectMapper;true;convertValue;;;Argument[0];ReturnValue;taint"
202+
Object out = null;
203+
Object in = (Object) source();
204+
ObjectMapper instance = null;
205+
out = instance.convertValue(in, (JavaType) null);
206+
sink(out); // $ hasTaintFlow
207+
}
208+
{
209+
// "com.fasterxml.jackson.databind;ObjectMapper;true;convertValue;;;Argument[0];ReturnValue;taint"
210+
Object out = null;
211+
Object in = (Object) source();
212+
ObjectMapper instance = null;
213+
out = instance.convertValue(in, (Class) null);
214+
sink(out); // $ hasTaintFlow
215+
}
216+
{
217+
// "com.fasterxml.jackson.databind;ObjectMapper;true;valueToTree;;;Argument[0];ReturnValue;taint"
218+
JsonNode out = null;
219+
Object in = (Object) source();
220+
ObjectMapper instance = null;
221+
out = instance.valueToTree(in);
222+
sink(out); // $ hasTaintFlow
223+
}
224+
{
225+
// "com.fasterxml.jackson.databind;ObjectMapper;true;valueToTree;;;MapValue of
226+
// Argument[0];ReturnValue;taint"
227+
JsonNode out = null;
228+
Object in = (Object) newWithMapValue(source());
229+
ObjectMapper instance = null;
230+
out = instance.valueToTree(in);
231+
sink(out); // $ hasTaintFlow
232+
}
233+
{
234+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
235+
JsonParser out = null;
236+
char[] in = (char[]) source();
237+
ObjectReader instance = null;
238+
out = instance.createParser(in, 0, 0);
239+
sink(out); // $ hasTaintFlow
240+
}
241+
{
242+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
243+
JsonParser out = null;
244+
char[] in = (char[]) source();
245+
ObjectReader instance = null;
246+
out = instance.createParser(in);
247+
sink(out); // $ hasTaintFlow
248+
}
249+
{
250+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
251+
JsonParser out = null;
252+
byte[] in = (byte[]) source();
253+
ObjectReader instance = null;
254+
out = instance.createParser(in, 0, 0);
255+
sink(out); // $ hasTaintFlow
256+
}
257+
{
258+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
259+
JsonParser out = null;
260+
byte[] in = (byte[]) source();
261+
ObjectReader instance = null;
262+
out = instance.createParser(in);
263+
sink(out); // $ hasTaintFlow
264+
}
265+
{
266+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
267+
JsonParser out = null;
268+
URL in = (URL) source();
269+
ObjectReader instance = null;
270+
out = instance.createParser(in);
271+
sink(out); // $ hasTaintFlow
272+
}
273+
{
274+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
275+
JsonParser out = null;
276+
String in = (String) source();
277+
ObjectReader instance = null;
278+
out = instance.createParser(in);
279+
sink(out); // $ hasTaintFlow
280+
}
281+
{
282+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
283+
JsonParser out = null;
284+
Reader in = (Reader) source();
285+
ObjectReader instance = null;
286+
out = instance.createParser(in);
287+
sink(out); // $ hasTaintFlow
288+
}
289+
{
290+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
291+
JsonParser out = null;
292+
InputStream in = (InputStream) source();
293+
ObjectReader instance = null;
294+
out = instance.createParser(in);
295+
sink(out); // $ hasTaintFlow
296+
}
297+
{
298+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
299+
JsonParser out = null;
300+
File in = (File) source();
301+
ObjectReader instance = null;
302+
out = instance.createParser(in);
303+
sink(out); // $ hasTaintFlow
304+
}
305+
{
306+
// "com.fasterxml.jackson.databind;ObjectReader;false;createParser;;;Argument[0];ReturnValue;taint"
307+
JsonParser out = null;
308+
DataInput in = (DataInput) source();
309+
ObjectReader instance = null;
310+
out = instance.createParser(in);
311+
sink(out); // $ hasTaintFlow
312+
}
313+
314+
}
315+
316+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/jackson-core-2.12

java/ql/test/library-tests/frameworks/jackson/test.expected

Whitespace-only changes.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import java
2+
import semmle.code.java.dataflow.DataFlow
3+
import semmle.code.java.dataflow.ExternalFlow
4+
import semmle.code.java.dataflow.TaintTracking
5+
import TestUtilities.InlineExpectationsTest
6+
7+
class ValueFlowConf extends DataFlow::Configuration {
8+
ValueFlowConf() { this = "qltest:valueFlowConf" }
9+
10+
override predicate isSource(DataFlow::Node n) {
11+
n.asExpr().(MethodAccess).getMethod().hasName("source")
12+
}
13+
14+
override predicate isSink(DataFlow::Node n) {
15+
n.asExpr().(Argument).getCall().getCallee().hasName("sink")
16+
}
17+
}
18+
19+
class TaintFlowConf extends TaintTracking::Configuration {
20+
TaintFlowConf() { this = "qltest:taintFlowConf" }
21+
22+
override predicate isSource(DataFlow::Node n) {
23+
n.asExpr().(MethodAccess).getMethod().hasName("source")
24+
}
25+
26+
override predicate isSink(DataFlow::Node n) {
27+
n.asExpr().(Argument).getCall().getCallee().hasName("sink")
28+
}
29+
}
30+
31+
class HasFlowTest extends InlineExpectationsTest {
32+
HasFlowTest() { this = "HasFlowTest" }
33+
34+
override string getARelevantTag() { result = ["hasValueFlow", "hasTaintFlow"] }
35+
36+
override predicate hasActualResult(Location location, string element, string tag, string value) {
37+
tag = "hasValueFlow" and
38+
exists(DataFlow::Node src, DataFlow::Node sink, ValueFlowConf conf | conf.hasFlow(src, sink) |
39+
sink.getLocation() = location and
40+
element = sink.toString() and
41+
value = ""
42+
)
43+
or
44+
tag = "hasTaintFlow" and
45+
exists(DataFlow::Node src, DataFlow::Node sink, TaintFlowConf conf |
46+
conf.hasFlow(src, sink) and not any(ValueFlowConf c).hasFlow(src, sink)
47+
|
48+
sink.getLocation() = location and
49+
element = sink.toString() and
50+
value = ""
51+
)
52+
}
53+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.10:${testdir}/../../../stubs/akka-2.6.x
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/playframework-2.6.x:${testdir}/../../../stubs/jackson-databind-2.12:${testdir}/../../../stubs/akka-2.6.x
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.fasterxml.jackson.core;
2+
3+
public abstract class JacksonException extends java.io.IOException {
4+
public abstract String getOriginalMessage();
5+
6+
public abstract Object getProcessor();
7+
8+
}

0 commit comments

Comments
 (0)