|
From: <ls...@us...> - 2009-01-02 22:42:57
|
Revision: 4816
http://jnode.svn.sourceforge.net/jnode/?rev=4816&view=rev
Author: lsantha
Date: 2009-01-02 22:42:52 +0000 (Fri, 02 Jan 2009)
Log Message:
-----------
Fixed more security exceptions.
Modified Paths:
--------------
trunk/core/src/core/org/jnode/vm/isolate/VmIsolate.java
trunk/gui/descriptors/org.jnode.desktop.xml
trunk/gui/src/awt/org/jnode/awt/swingpeers/SwingToolkit.java
Modified: trunk/core/src/core/org/jnode/vm/isolate/VmIsolate.java
===================================================================
--- trunk/core/src/core/org/jnode/vm/isolate/VmIsolate.java 2009-01-02 22:17:19 UTC (rev 4815)
+++ trunk/core/src/core/org/jnode/vm/isolate/VmIsolate.java 2009-01-02 22:42:52 UTC (rev 4816)
@@ -32,6 +32,8 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import javax.isolate.Isolate;
import javax.isolate.IsolateStartupException;
import javax.isolate.IsolateStatus;
@@ -772,7 +774,7 @@
*/
- private java.util.concurrent.ExecutorService executor;
+ private ExecutorService executor;
/**
* Execute a task within this isolate and wait for completion.
@@ -781,7 +783,11 @@
*/
public synchronized void invokeAndWait(final Runnable task) {
if (executor == null) {
- executor = java.util.concurrent.Executors.newSingleThreadExecutor(new IsolateThreadFactory2(this));
+ executor = AccessController.doPrivileged(new PrivilegedAction<ExecutorService>(){
+ public ExecutorService run() {
+ return Executors.newSingleThreadExecutor(new IsolateThreadFactory2(VmIsolate.this));
+ }
+ });
}
if (task == null)
return;
Modified: trunk/gui/descriptors/org.jnode.desktop.xml
===================================================================
--- trunk/gui/descriptors/org.jnode.desktop.xml 2009-01-02 22:17:19 UTC (rev 4815)
+++ trunk/gui/descriptors/org.jnode.desktop.xml 2009-01-02 22:42:52 UTC (rev 4816)
@@ -31,6 +31,7 @@
<permission class="java.util.PropertyPermission" name="jnode.desktop" actions="read,write"/>
<permission class="java.lang.RuntimePermission" name="getClassLoader" />
+ <permission class="java.lang.RuntimePermission" name="accessDeclaredMembers" />
<permission class="java.util.PropertyPermission" name="java.util.logging.manager" actions="read"/>
<permission class="java.util.logging.LoggingPermission" name="control" actions="" />
<permission class="java.util.PropertyPermission" name="java.util.logging.config.class" actions="read" />
Modified: trunk/gui/src/awt/org/jnode/awt/swingpeers/SwingToolkit.java
===================================================================
--- trunk/gui/src/awt/org/jnode/awt/swingpeers/SwingToolkit.java 2009-01-02 22:17:19 UTC (rev 4815)
+++ trunk/gui/src/awt/org/jnode/awt/swingpeers/SwingToolkit.java 2009-01-02 22:42:52 UTC (rev 4816)
@@ -84,6 +84,8 @@
import java.util.WeakHashMap;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import javax.swing.JComponent;
import javax.swing.JInternalFrame;
import javax.swing.JMenuBar;
@@ -253,7 +255,7 @@
protected FramePeer createFrame(final Frame target) {
final FramePeer[] ret = new FramePeer[1];
- Runnable run = new Runnable() {
+ final Runnable run = new Runnable() {
public void run() {
if (!isGuiActive()) {
@@ -296,68 +298,78 @@
} */
}
};
+ AccessController.doPrivileged(new PrivilegedAction<Object>(){
+ public Object run() {
- //peer frames should be created in the same app context where the desktop is
- //todo refactor this into a generic inter-appcontext invoke and wait
- AppContext ac = SunToolkit.targetToAppContext(target);
- if (ac != null) {
- EventQueue eq = (EventQueue) ac.get(sun.awt.AppContext.EVENT_QUEUE_KEY);
- if (eq != null) {
+
+ //peer frames should be created in the same app context where the desktop is
+ //todo refactor this into a generic inter-appcontext invoke and wait
+ AppContext ac = SunToolkit.targetToAppContext(target);
+ if (ac != null) {
+ EventQueue eq = (EventQueue) ac.get(sun.awt.AppContext.EVENT_QUEUE_KEY);
+ if (eq != null) {
+ try {
+ Method met = EventQueue.class.getDeclaredMethod("initDispatchThread");
+ met.setAccessible(true);
+ met.invoke(eq);
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+ }
+ }
+
+ // invoke and wait --
+ EventQueue eq = getMainEventQueue();
+
+ if (eq == getSystemEventQueueImpl()) {
+ run.run();
+ synchronized (ret) {
+ return ret[0];
+ }
+ }
+
try {
- Method met = EventQueue.class.getDeclaredMethod("initDispatchThread");
- met.setAccessible(true);
- met.invoke(eq);
+ Field field = EventQueue.class.getField("dispatchThread");
+ field.setAccessible(true);
+ Thread edt = (Thread) field.get(eq);
+ if (Thread.currentThread() == edt) {
+ run.run();
+ synchronized (ret) {
+ return ret[0];
+ }
+ }
} catch (Exception x) {
- x.printStackTrace();
+ throw new RuntimeException(x);
}
- }
- }
- // invoke and wait --
- EventQueue eq = getMainEventQueue();
+ class AWTInvocationLock {
+ }
+ Object lock = new AWTInvocationLock();
- if (eq == getSystemEventQueueImpl()) {
- run.run();
- synchronized (ret) {
- return ret[0];
- }
- }
+ InvocationEvent event = new InvocationEvent(Toolkit.getDefaultToolkit(), run, lock, true);
- try {
- Field field = EventQueue.class.getField("dispatchThread");
- field.setAccessible(true);
- Thread edt = (Thread) field.get(eq);
- if (Thread.currentThread() == edt) {
- run.run();
- synchronized (ret) {
- return ret[0];
+ try {
+ synchronized (lock) {
+ eq.postEvent(event);
+ lock.wait();
+ }
+ } catch (Exception x) {
+ throw new RuntimeException(x);
}
- }
- } catch (Exception x) {
- throw new RuntimeException(x);
- }
- class AWTInvocationLock {
- }
- Object lock = new AWTInvocationLock();
+ Throwable eventThrowable = event.getThrowable();
+ if (eventThrowable != null) {
+ throw new RuntimeException(eventThrowable);
+ }
- InvocationEvent event = new InvocationEvent(Toolkit.getDefaultToolkit(), run, lock, true);
+ // --invoke and wait
- try {
- synchronized (lock) {
- eq.postEvent(event);
- lock.wait();
+
+ return null;
}
- } catch (Exception x) {
- throw new RuntimeException(x);
- }
+ });
- Throwable eventThrowable = event.getThrowable();
- if (eventThrowable != null) {
- throw new RuntimeException(eventThrowable);
- }
- // --invoke and wait
synchronized (ret) {
return ret[0];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|