7080109: Dialog.show() lacks doPrivileged() to access system event queue
Reviewed-by: art, anthony
--- a/jdk/src/share/classes/java/awt/Dialog.java Fri May 04 21:25:08 2012 +0400
+++ b/jdk/src/share/classes/java/awt/Dialog.java Thu May 10 20:05:12 2012 +0400
@@ -1037,7 +1037,7 @@
predictedFocusOwner = getMostRecentFocusOwner();
if (conditionalShow(predictedFocusOwner, time)) {
modalFilter = ModalEventFilter.createFilterForDialog(this);
- Conditional cond = new Conditional() {
+ final Conditional cond = new Conditional() {
@Override
public boolean evaluate() {
return windowClosingException == null;
@@ -1067,7 +1067,12 @@
modalityPushed();
try {
- EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ final EventQueue eventQueue = AccessController.doPrivileged(
+ new PrivilegedAction<EventQueue>() {
+ public EventQueue run() {
+ return Toolkit.getDefaultToolkit().getSystemEventQueue();
+ }
+ });
secondaryLoop = eventQueue.createSecondaryLoop(cond, modalFilter, 0);
if (!secondaryLoop.enter()) {
secondaryLoop = null;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java Thu May 10 20:05:12 2012 +0400
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/*
+ @test
+ @bug 7080109
+ @summary Dialog.show() lacks doPrivileged() to access system event queue.
+ @author sergey.bylokhov@oracle.com: area=awt.dialog
+ @run main/othervm/policy=java.policy -Djava.security.manager ModalDialogPermission
+*/
+public final class ModalDialogPermission {
+
+ public static void main(final String[] args) {
+ Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(final Thread t, final Throwable e) {
+ throw new RuntimeException(e);
+ }
+ });
+ final Frame frame = new Frame();
+ final Dialog dialog = new Dialog(frame, "ModalDialog", true);
+ final Timer t = new Timer();
+ t.schedule(new TimerTask() {
+
+ @Override
+ public void run() {
+ dialog.setVisible(false);
+ dialog.dispose();
+ }
+ }, 3000L);
+ dialog.show();
+ frame.dispose();
+ t.cancel();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Dialog/ModalDialogPermission/java.policy Thu May 10 20:05:12 2012 +0400
@@ -0,0 +1,3 @@
+grant {
+ permission java.lang.RuntimePermission "setDefaultUncaughtExceptionHandler";
+};