@@ -157,4 +157,70 @@ public Collection<String> extractValidDomains(String configInfo) {
157
157
}
158
158
});
159
159
}
160
+
161
+ @ DataProvider (name = "relative" )
162
+ public Object [][] getRelativeCases () {
163
+ return new Object [][]{
164
+ {"/foo" , true },
165
+ {"foo" , true },
166
+ {"foo?abc=123" , true },
167
+ {"foo/bar" , true },
168
+ {"areallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurl" , true },
169
+ {"areallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurlareallyreallylongurltoolong" , false },
170
+ };
171
+ }
172
+
173
+ @ Test (dataProvider = "relative" )
174
+ public void testRelativeUrlsWithWhitelist (String url , boolean result ) {
175
+ RedirectUrlValidator <String > validator = getValidator (asSet ("http://example.com/*" ));
176
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
177
+ }
178
+
179
+ @ Test (dataProvider = "relative" )
180
+ public void testRelativeUrlsWithoutWhitelist (String url , boolean result ) {
181
+ RedirectUrlValidator <String > validator = getValidator (null );
182
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
183
+ }
184
+
185
+ @ DataProvider (name = "javascript" )
186
+ public Object [][] getJavaScriptCases () {
187
+ return new Object [][]{
188
+ {"javascript:alert" , false },
189
+ {"JavaSCRIpt:alert" , false },
190
+ {"/javascript:alert" , true },
191
+ };
192
+ }
193
+
194
+ @ Test (dataProvider = "javascript" )
195
+ public void testJavaScriptUrlsWithWhitelist (String url , boolean result ) {
196
+ RedirectUrlValidator <String > validator = getValidator (asSet ("http://example.com/*" ));
197
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
198
+ }
199
+
200
+ @ Test (dataProvider = "javascript" )
201
+ public void testJavaScriptUrlsWithoutWhitelist (String url , boolean result ) {
202
+ RedirectUrlValidator <String > validator = getValidator (null );
203
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
204
+ }
205
+
206
+ @ DataProvider (name = "malformed" )
207
+ public Object [][] getMalformedCases () {
208
+ return new Object [][]{
209
+ {"http:abc" , false },
210
+ {"http:/abc" , false },
211
+ {"/a$bc" , false }
212
+ };
213
+ }
214
+
215
+ @ Test (dataProvider = "malformed" )
216
+ public void testMalformedUrlsWithWhitelist (String url , boolean result ) {
217
+ RedirectUrlValidator <String > validator = getValidator (asSet ("http://example.com/*" ));
218
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
219
+ }
220
+
221
+ @ Test (dataProvider = "malformed" )
222
+ public void testMalformedUrlsWithoutWhitelist (String url , boolean result ) {
223
+ RedirectUrlValidator <String > validator = getValidator (null );
224
+ assertThat (validator .isRedirectUrlValid (url , null )).isEqualTo (result );
225
+ }
160
226
}
0 commit comments