Skip to content

Commit acfcd5c

Browse files
author
Sauyon Lee
committed
Add tests for Spring web.method
1 parent b95dbab commit acfcd5c

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package generatedtest;
2+
3+
import java.util.Map;
4+
import org.springframework.ui.ModelMap;
5+
import org.springframework.web.context.request.NativeWebRequest;
6+
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
7+
import org.springframework.web.method.support.ModelAndViewContainer;
8+
import org.springframework.web.method.support.UriComponentsContributor;
9+
import org.springframework.web.util.UriComponentsBuilder;
10+
11+
// Test case generated by GenerateFlowTestCase.ql
12+
public class MethodTest {
13+
14+
Object getMapKey(Map container) { return container.keySet().iterator().next(); }
15+
Object getMapValue(Map container) { return container.get(null); }
16+
ModelMap getModelAndViewContainer_Model(ModelAndViewContainer container) { return container.getModel(); }
17+
Object getModelAndViewContainer_View(ModelAndViewContainer container) { return container.getView(); }
18+
ModelAndViewContainer newWithModelAndViewContainer_Model(Object element) { ModelAndViewContainer ret = new ModelAndViewContainer(); ret.setRedirectModel((ModelMap)element); return ret; }
19+
ModelAndViewContainer newWithModelAndViewContainer_View(Object element) { ModelAndViewContainer ret = new ModelAndViewContainer(); ret.setView(element); return ret; }
20+
Object source() { return null; }
21+
void sink(Object o) { }
22+
23+
public void test() throws Exception {
24+
25+
{
26+
// "org.springframework.web.method.support;HandlerMethodArgumentResolver;true;resolveArgument;;;Argument[2];ReturnValue;taint"
27+
Object out = null;
28+
NativeWebRequest in = (NativeWebRequest)source();
29+
HandlerMethodArgumentResolver instance = null;
30+
out = instance.resolveArgument(null, null, in, null);
31+
sink(out); // $ hasTaintFlow
32+
}
33+
{
34+
// "org.springframework.web.method.support;ModelAndViewContainer;false;addAllAttributes;;;MapKey of Argument[0];MapKey of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
35+
ModelAndViewContainer out = null;
36+
Map in = Map.of(source(), null);
37+
out.addAllAttributes(in);
38+
sink(getMapKey(getModelAndViewContainer_Model(out))); // $ hasValueFlow
39+
}
40+
{
41+
// "org.springframework.web.method.support;ModelAndViewContainer;false;addAllAttributes;;;MapValue of Argument[0];MapValue of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
42+
ModelAndViewContainer out = null;
43+
Map in = Map.of(null, source());
44+
out.addAllAttributes(in);
45+
sink(getMapValue(getModelAndViewContainer_Model(out))); // $ hasValueFlow
46+
}
47+
{
48+
// "org.springframework.web.method.support;ModelAndViewContainer;false;addAttribute;;;Argument[0];MapKey of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
49+
ModelAndViewContainer out = null;
50+
String in = (String)source();
51+
out.addAttribute(in, null);
52+
sink(getMapKey(getModelAndViewContainer_Model(out))); // $ hasValueFlow
53+
}
54+
{
55+
// "org.springframework.web.method.support;ModelAndViewContainer;false;addAttribute;;;Argument[0];MapKey of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
56+
ModelAndViewContainer out = null;
57+
Object in = (Object)source();
58+
out.addAttribute(in);
59+
sink(getMapKey(getModelAndViewContainer_Model(out))); // $ hasValueFlow
60+
}
61+
{
62+
// "org.springframework.web.method.support;ModelAndViewContainer;false;addAttribute;;;Argument[1];MapValue of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
63+
ModelAndViewContainer out = null;
64+
Object in = (Object)source();
65+
out.addAttribute(null, in);
66+
sink(getMapValue(getModelAndViewContainer_Model(out))); // $ hasValueFlow
67+
}
68+
{
69+
// "org.springframework.web.method.support;ModelAndViewContainer;false;getDefaultModel;;;SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];ReturnValue;value"
70+
ModelMap out = null;
71+
ModelAndViewContainer in = (ModelAndViewContainer)newWithModelAndViewContainer_Model(source());
72+
out = in.getDefaultModel();
73+
sink(out); // $ hasValueFlow
74+
}
75+
{
76+
// "org.springframework.web.method.support;ModelAndViewContainer;false;getModel;;;SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];ReturnValue;value"
77+
ModelMap out = null;
78+
ModelAndViewContainer in = (ModelAndViewContainer)newWithModelAndViewContainer_Model(source());
79+
out = in.getModel();
80+
sink(out); // $ hasValueFlow
81+
}
82+
{
83+
// "org.springframework.web.method.support;ModelAndViewContainer;false;getView;;;SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.View] of Argument[-1];ReturnValue;value"
84+
Object out = null;
85+
ModelAndViewContainer in = (ModelAndViewContainer)newWithModelAndViewContainer_View(source());
86+
out = in.getView();
87+
sink(out); // $ hasValueFlow
88+
}
89+
{
90+
// "org.springframework.web.method.support;ModelAndViewContainer;false;mergeAttributes;;;MapKey of Argument[0];MapKey of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
91+
ModelAndViewContainer out = null;
92+
Map in = Map.of(source(), null);
93+
out.mergeAttributes(in);
94+
sink(getMapKey(getModelAndViewContainer_Model(out))); // $ hasValueFlow
95+
}
96+
{
97+
// "org.springframework.web.method.support;ModelAndViewContainer;false;mergeAttributes;;;MapValue of Argument[0];MapValue of SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
98+
ModelAndViewContainer out = null;
99+
Map in = Map.of(null, source());
100+
out.mergeAttributes(in);
101+
sink(getMapValue(getModelAndViewContainer_Model(out))); // $ hasValueFlow
102+
}
103+
{
104+
// "org.springframework.web.method.support;ModelAndViewContainer;false;setRedirectModel;;;Argument[0];SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.Model] of Argument[-1];value"
105+
ModelAndViewContainer out = null;
106+
ModelMap in = (ModelMap)source();
107+
out.setRedirectModel(in);
108+
sink(getModelAndViewContainer_Model(out)); // $ hasValueFlow
109+
}
110+
{
111+
// "org.springframework.web.method.support;ModelAndViewContainer;false;setView;;;Argument[0];SyntheticField[org.springframework.web.method.support.ModelAndViewContainer.View] of Argument[-1];value"
112+
ModelAndViewContainer out = null;
113+
Object in = (Object)source();
114+
out.setView(in);
115+
sink(getModelAndViewContainer_View(out)); // $ hasValueFlow
116+
}
117+
{
118+
// "org.springframework.web.method.support;UriComponentsContributor;true;contributeMethodArgument;;;Argument[1];Argument[2];taint"
119+
UriComponentsBuilder out = null;
120+
Object in = (Object)source();
121+
UriComponentsContributor instance = null;
122+
instance.contributeMethodArgument(null, in, out, null, null);
123+
sink(out); // $ hasTaintFlow
124+
}
125+
{
126+
// "org.springframework.web.method.support;UriComponentsContributor;true;contributeMethodArgument;;;Argument[1];Argument[3];taint"
127+
Map out = null;
128+
Object in = (Object)source();
129+
UriComponentsContributor instance = null;
130+
instance.contributeMethodArgument(null, in, null, out, null);
131+
sink(out); // $ hasTaintFlow
132+
}
133+
134+
}
135+
136+
}

java/ql/test/library-tests/frameworks/spring/web/test.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class TaintFlowConf extends TaintTracking::Configuration {
2525
override predicate isSink(DataFlow::Node n) {
2626
n.asExpr().(Argument).getCall().getCallee().hasName("sink")
2727
}
28+
29+
override int fieldFlowBranchLimit() { result = 10 }
2830
}
2931

3032
class HasFlowTest extends InlineExpectationsTest {

0 commit comments

Comments
 (0)