Skip to content

Commit 4596630

Browse files
Use SecurityManager recommended by Stefan Birkner
1 parent 917a88f commit 4596630

File tree

1 file changed

+206
-12
lines changed

1 file changed

+206
-12
lines changed

src/test/java/org/junit/tests/running/core/MainRunner.java

Lines changed: 206 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
import java.io.ByteArrayOutputStream;
44
import java.io.PrintStream;
55
import java.security.Permission;
6+
import java.io.FileDescriptor;
7+
import java.net.InetAddress;
68

79
public class MainRunner {
8-
910
private static class ExitException extends SecurityException {
1011
private static final long serialVersionUID= -9104651568237766642L;
1112

@@ -21,24 +22,218 @@ public int getStatus() {
2122
}
2223
}
2324

24-
private static class NoExitSecurityManager extends SecurityManager {
25+
/**
26+
* A {@code NoExitSecurityManager} throws a {@link ExitException} exception
27+
* whenever {@link #checkExit(int)} is called. All other method calls are
28+
* delegated to the original security manager.
29+
*/
30+
public class NoExitSecurityManager extends SecurityManager {
31+
private final SecurityManager originalSecurityManager;
32+
33+
public NoExitSecurityManager(SecurityManager originalSecurityManager) {
34+
this.originalSecurityManager= originalSecurityManager;
35+
}
36+
37+
@Override
38+
public void checkExit(int status) {
39+
throw new ExitException(status);
40+
}
41+
42+
@Override
43+
public boolean getInCheck() {
44+
return (originalSecurityManager != null) && originalSecurityManager.getInCheck();
45+
}
46+
47+
@Override
48+
public Object getSecurityContext() {
49+
return (originalSecurityManager == null) ? super.getSecurityContext() : originalSecurityManager.getSecurityContext();
50+
}
51+
2552
@Override
2653
public void checkPermission(Permission perm) {
27-
// allow anything.
54+
if (originalSecurityManager != null)
55+
originalSecurityManager.checkPermission(perm);
2856
}
2957

3058
@Override
3159
public void checkPermission(Permission perm, Object context) {
32-
// allow anything.
60+
if (originalSecurityManager != null)
61+
originalSecurityManager.checkPermission(perm, context);
3362
}
3463

3564
@Override
36-
public void checkExit(int status) {
37-
super.checkExit(status);
38-
throw new ExitException(status);
65+
public void checkCreateClassLoader() {
66+
if (originalSecurityManager != null)
67+
originalSecurityManager.checkCreateClassLoader();
68+
}
69+
70+
@Override
71+
public void checkAccess(Thread t) {
72+
if (originalSecurityManager != null)
73+
originalSecurityManager.checkAccess(t);
74+
}
75+
76+
@Override
77+
public void checkAccess(ThreadGroup g) {
78+
if (originalSecurityManager != null)
79+
originalSecurityManager.checkAccess(g);
80+
}
81+
82+
@Override
83+
public void checkExec(String cmd) {
84+
if (originalSecurityManager != null)
85+
originalSecurityManager.checkExec(cmd);
86+
}
87+
88+
@Override
89+
public void checkLink(String lib) {
90+
if (originalSecurityManager != null)
91+
originalSecurityManager.checkLink(lib);
92+
}
93+
94+
@Override
95+
public void checkRead(FileDescriptor fd) {
96+
if (originalSecurityManager != null)
97+
originalSecurityManager.checkRead(fd);
98+
}
99+
100+
@Override
101+
public void checkRead(String file) {
102+
if (originalSecurityManager != null)
103+
originalSecurityManager.checkRead(file);
104+
}
105+
106+
@Override
107+
public void checkRead(String file, Object context) {
108+
if (originalSecurityManager != null)
109+
originalSecurityManager.checkRead(file, context);
110+
}
111+
112+
@Override
113+
public void checkWrite(FileDescriptor fd) {
114+
if (originalSecurityManager != null)
115+
originalSecurityManager.checkWrite(fd);
116+
}
117+
118+
@Override
119+
public void checkWrite(String file) {
120+
if (originalSecurityManager != null)
121+
originalSecurityManager.checkWrite(file);
122+
}
123+
124+
@Override
125+
public void checkDelete(String file) {
126+
if (originalSecurityManager != null)
127+
originalSecurityManager.checkDelete(file);
128+
}
129+
130+
@Override
131+
public void checkConnect(String host, int port) {
132+
if (originalSecurityManager != null)
133+
originalSecurityManager.checkConnect(host, port);
39134
}
40-
}
41135

136+
@Override
137+
public void checkConnect(String host, int port, Object context) {
138+
if (originalSecurityManager != null)
139+
originalSecurityManager.checkConnect(host, port, context);
140+
}
141+
142+
@Override
143+
public void checkListen(int port) {
144+
if (originalSecurityManager != null)
145+
originalSecurityManager.checkListen(port);
146+
}
147+
148+
@Override
149+
public void checkAccept(String host, int port) {
150+
if (originalSecurityManager != null)
151+
originalSecurityManager.checkAccept(host, port);
152+
}
153+
154+
@Override
155+
public void checkMulticast(InetAddress maddr) {
156+
if (originalSecurityManager != null)
157+
originalSecurityManager.checkMulticast(maddr);
158+
}
159+
160+
@Override
161+
public void checkMulticast(InetAddress maddr, byte ttl) {
162+
if (originalSecurityManager != null)
163+
originalSecurityManager.checkMulticast(maddr, ttl);
164+
}
165+
166+
@Override
167+
public void checkPropertiesAccess() {
168+
if (originalSecurityManager != null)
169+
originalSecurityManager.checkPropertiesAccess();
170+
}
171+
172+
@Override
173+
public void checkPropertyAccess(String key) {
174+
if (originalSecurityManager != null)
175+
originalSecurityManager.checkPropertyAccess(key);
176+
}
177+
178+
@Override
179+
public boolean checkTopLevelWindow(Object window) {
180+
return (originalSecurityManager == null) ? super.checkTopLevelWindow(window) : originalSecurityManager.checkTopLevelWindow(window);
181+
}
182+
183+
@Override
184+
public void checkPrintJobAccess() {
185+
if (originalSecurityManager != null)
186+
originalSecurityManager.checkPrintJobAccess();
187+
}
188+
189+
@Override
190+
public void checkSystemClipboardAccess() {
191+
if (originalSecurityManager != null)
192+
originalSecurityManager.checkSystemClipboardAccess();
193+
}
194+
195+
@Override
196+
public void checkAwtEventQueueAccess() {
197+
if (originalSecurityManager != null)
198+
originalSecurityManager.checkAwtEventQueueAccess();
199+
}
200+
201+
@Override
202+
public void checkPackageAccess(String pkg) {
203+
if (originalSecurityManager != null)
204+
originalSecurityManager.checkPackageAccess(pkg);
205+
}
206+
207+
@Override
208+
public void checkPackageDefinition(String pkg) {
209+
if (originalSecurityManager != null)
210+
originalSecurityManager.checkPackageDefinition(pkg);
211+
}
212+
213+
@Override
214+
public void checkSetFactory() {
215+
if (originalSecurityManager != null)
216+
originalSecurityManager.checkSetFactory();
217+
}
218+
219+
@Override
220+
public void checkMemberAccess(Class<?> clazz, int which) {
221+
if (originalSecurityManager != null)
222+
originalSecurityManager.checkMemberAccess(clazz, which);
223+
}
224+
225+
@Override
226+
public void checkSecurityAccess(String target) {
227+
if (originalSecurityManager != null)
228+
originalSecurityManager.checkSecurityAccess(target);
229+
}
230+
231+
@Override
232+
public ThreadGroup getThreadGroup() {
233+
return (originalSecurityManager == null) ? super.getThreadGroup() : originalSecurityManager.getThreadGroup();
234+
}
235+
}
236+
42237
/**
43238
* Execute runnable.run(), preventing System.exit(). If System.exit() is called
44239
* in runnable.run(), the value is returned. If System.exit()
@@ -48,9 +243,9 @@ public void checkExit(int status) {
48243
* @return null if System.exit() is not called, Integer.valueof(status) if not
49244
*/
50245
public Integer runWithCheckForSystemExit(Runnable runnable) {
51-
SecurityManager oldSecurityManager = System.getSecurityManager();
52-
System.setSecurityManager(new NoExitSecurityManager());
53-
PrintStream oldPrintStream = System.out;
246+
SecurityManager oldSecurityManager= System.getSecurityManager();
247+
System.setSecurityManager(new NoExitSecurityManager(oldSecurityManager));
248+
PrintStream oldPrintStream= System.out;
54249

55250
System.setOut(new PrintStream(new ByteArrayOutputStream()));
56251
try {
@@ -65,5 +260,4 @@ public Integer runWithCheckForSystemExit(Runnable runnable) {
65260
System.setOut(oldPrintStream);
66261
}
67262
}
68-
69263
}

0 commit comments

Comments
 (0)