Skip to content

Commit 5794b7a

Browse files
committed
priviliged action for security exception
Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
1 parent 8850535 commit 5794b7a

File tree

3 files changed

+69
-4
lines changed

3 files changed

+69
-4
lines changed

core-common/src/main/java/org/glassfish/jersey/message/internal/Utils.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
import java.io.File;
2020
import java.io.IOException;
2121
import java.nio.file.Files;
22+
import java.security.AccessController;
23+
import java.security.PrivilegedAction;
24+
import java.util.ArrayList;
25+
import java.util.List;
2226

2327
/**
2428
* Utility class.
@@ -47,9 +51,23 @@ static void throwIllegalArgumentExceptionIfNull(final Object toCheck, final Stri
4751
* @throws IOException if a file could not be created.
4852
*/
4953
public static File createTempFile() throws IOException {
50-
final File file = Files.createTempFile("rep", "tmp").toFile();
51-
// Make sure the file is deleted when JVM is shutdown at last.
52-
file.deleteOnExit();
54+
final List<IOException> exs = new ArrayList<>();
55+
final File file = AccessController.doPrivileged(new PrivilegedAction<File>() {
56+
public File run() {
57+
File tempFile = null;
58+
try {
59+
tempFile = Files.createTempFile("rep", "tmp").toFile();
60+
// Make sure the file is deleted when JVM is shutdown at last.
61+
tempFile.deleteOnExit();
62+
} catch (IOException e) {
63+
exs.add(e);
64+
}
65+
return tempFile;
66+
}
67+
});
68+
if (!exs.isEmpty()) {
69+
throw exs.get(0);
70+
}
5371
return file;
5472
}
5573

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0, which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* This Source Code may also be made available under the following Secondary
9+
* Licenses when the conditions for such availability set forth in the
10+
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
11+
* version 2 with the GNU Classpath Exception, which is available at
12+
* https://www.gnu.org/software/classpath/license.html.
13+
*
14+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15+
*/
16+
17+
package org.glassfish.jersey.message.internal;
18+
19+
import org.junit.Assert;
20+
import org.junit.Test;
21+
22+
import java.io.BufferedOutputStream;
23+
import java.io.ByteArrayInputStream;
24+
import java.io.File;
25+
import java.io.FileOutputStream;
26+
import java.io.IOException;
27+
import java.io.OutputStream;
28+
29+
public class UtilsTest {
30+
31+
@Test
32+
public void createTempFile() throws IOException {
33+
final File file = Utils.createTempFile();
34+
final OutputStream stream = new BufferedOutputStream(new FileOutputStream(file));
35+
36+
try {
37+
final ByteArrayInputStream entityStream = new ByteArrayInputStream("Test stream byte input".getBytes());
38+
ReaderWriter.writeTo(entityStream, stream);
39+
} finally {
40+
stream.close();
41+
}
42+
Assert.assertTrue(file.exists());
43+
}
44+
45+
}

core-common/src/test/resources/surefire.policy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2014, 2019 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -30,6 +30,7 @@ grant codebase "file:${project.build.directory}/test-classes/-" {
3030
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
3131
permission java.lang.RuntimePermission "modifyThread";
3232
permission java.util.PropertyPermission "*", "write";
33+
permission java.io.FilePermission "${java.io.tmpdir}/-", "read,write,delete";
3334
permission java.lang.RuntimePermission "getClassLoader";
3435
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
3536
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc.*";
@@ -43,6 +44,7 @@ grant codebase "file:${project.build.directory}/classes/-" {
4344
permission java.lang.RuntimePermission "modifyThread";
4445
permission java.util.PropertyPermission "*", "read";
4546
permission java.io.FilePermission "<<ALL FILES>>", "read";
47+
permission java.io.FilePermission "${java.io.tmpdir}/-", "read,write,delete";
4648
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
4749
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc.*";
4850
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";

0 commit comments

Comments
 (0)