1
1
/*
2
- * Copyright (C) 2013, 2014, 2017, 2018, 2020, 2021, 2022, 2024 XStream Committers.
2
+ * Copyright (C) 2013, 2014, 2017, 2018, 2020, 2021, 2022, 2024, 2025 XStream Committers.
3
3
* All rights reserved.
4
4
*
5
5
* The software in this package is published under the terms of the BSD
42
42
public class SecurityVulnerabilityTest extends AbstractAcceptanceTest {
43
43
44
44
private final static StringBuffer BUFFER = new StringBuffer ();
45
+ private final static boolean SKIP_DOS_ATTACK_TESTS = Boolean .getBoolean ("skipDoSAttackTests" );
45
46
46
47
@ Override
47
48
protected void setUp () throws Exception {
@@ -52,13 +53,25 @@ protected void setUp() throws Exception {
52
53
xstream .addPermission (ProxyTypePermission .PROXIES );
53
54
}
54
55
56
+ @ Override
57
+ protected void setupSecurity (final XStream xstream ) {
58
+ xstream .allowTypes (Exec .class );
59
+ }
60
+
61
+ public static class Exec {
62
+
63
+ public void exec () {
64
+ BUFFER .append ("Executed!" );
65
+ }
66
+ }
67
+
55
68
public void testCannotInjectEventHandler () {
56
69
final String xml = ""
57
70
+ "<string class='runnable-array'>\n "
58
71
+ " <dynamic-proxy>\n "
59
72
+ " <interface>java.lang.Runnable</interface>\n "
60
73
+ " <handler class='java.beans.EventHandler'>\n "
61
- + " <target class='com.thoughtworks.acceptance.SecurityVulnerabilityTest$ Exec'/>\n "
74
+ + " <target class='com.thoughtworks.acceptance.SecurityVulnerabilityTest_- Exec'/>\n "
62
75
+ " <action>exec</action>\n "
63
76
+ " </handler>\n "
64
77
+ " </dynamic-proxy>\n "
@@ -213,13 +226,6 @@ public void testExplicitlyConvertSwingUIDefaults() {
213
226
assertNotNull (hashtable );
214
227
}
215
228
216
- public static class Exec {
217
-
218
- public void exec () {
219
- BUFFER .append ("Executed!" );
220
- }
221
- }
222
-
223
229
public void testInstanceOfVoid () {
224
230
try {
225
231
xstream .fromXML ("<void/>" );
@@ -353,6 +359,10 @@ public void testExplicitlyUnmarshalEndlessByteArrayInputStream() throws IOExcept
353
359
}
354
360
355
361
public void testDoSAttackWithHashSet () {
362
+ if (SKIP_DOS_ATTACK_TESTS ) {
363
+ return ;
364
+ }
365
+
356
366
final Set <Object > set = new HashSet <>();
357
367
Set <Object > s1 = set ;
358
368
Set <Object > s2 = new HashSet <>();
@@ -380,6 +390,10 @@ public void testDoSAttackWithHashSet() {
380
390
}
381
391
382
392
public void testDoSAttackWithLinkedHashSet () {
393
+ if (SKIP_DOS_ATTACK_TESTS ) {
394
+ return ;
395
+ }
396
+
383
397
final Set <Object > set = new LinkedHashSet <>();
384
398
Set <Object > s1 = set ;
385
399
Set <Object > s2 = new LinkedHashSet <>();
@@ -407,6 +421,10 @@ public void testDoSAttackWithLinkedHashSet() {
407
421
}
408
422
409
423
public void testDoSAttackWithHashMap () {
424
+ if (SKIP_DOS_ATTACK_TESTS ) {
425
+ return ;
426
+ }
427
+
410
428
final Map <Object , Object > map = new HashMap <>();
411
429
Map <Object , Object > m1 = map ;
412
430
Map <Object , Object > m2 = new HashMap <>();
@@ -434,6 +452,10 @@ public void testDoSAttackWithHashMap() {
434
452
}
435
453
436
454
public void testDoSAttackWithLinkedHashMap () {
455
+ if (SKIP_DOS_ATTACK_TESTS ) {
456
+ return ;
457
+ }
458
+
437
459
final Map <Object , Object > map = new LinkedHashMap <>();
438
460
Map <Object , Object > m1 = map ;
439
461
Map <Object , Object > m2 = new LinkedHashMap <>();
@@ -461,6 +483,10 @@ public void testDoSAttackWithLinkedHashMap() {
461
483
}
462
484
463
485
public void testDoSAttackWithHashtable () {
486
+ if (SKIP_DOS_ATTACK_TESTS ) {
487
+ return ;
488
+ }
489
+
464
490
final Map <Object , Object > map = new Hashtable <>();
465
491
Map <Object , Object > m1 = map ;
466
492
Map <Object , Object > m2 = new Hashtable <>();
0 commit comments