aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormalenkov <none@none>2013-09-27 22:25:58 +0400
committermalenkov <none@none>2013-09-27 22:25:58 +0400
commit1ec50fdf3b57e5e3318a4d13ca912d632dd8b11d (patch)
treea31bd042096e6592a516816cc1121b198138e8c5
parentdb8699451918240227736ea327b948016e0b3219 (diff)
downloadjdk8u_jdk-1ec50fdf3b57e5e3318a4d13ca912d632dd8b11d.tar.gz
7117595: ArrayIndexOutOfBoundsException in Win32GraphicsEnvironment if display is removed
Reviewed-by: anthony, serb
-rw-r--r--src/macosx/classes/sun/awt/CGraphicsEnvironment.java3
-rw-r--r--src/share/classes/sun/java2d/SunGraphicsEnvironment.java6
-rw-r--r--src/solaris/classes/sun/awt/X11GraphicsEnvironment.java7
-rw-r--r--src/windows/classes/sun/awt/Win32GraphicsEnvironment.java7
4 files changed, 20 insertions, 3 deletions
diff --git a/src/macosx/classes/sun/awt/CGraphicsEnvironment.java b/src/macosx/classes/sun/awt/CGraphicsEnvironment.java
index a2319e675f..a117d99f42 100644
--- a/src/macosx/classes/sun/awt/CGraphicsEnvironment.java
+++ b/src/macosx/classes/sun/awt/CGraphicsEnvironment.java
@@ -181,6 +181,9 @@ public final class CGraphicsEnvironment extends SunGraphicsEnvironment {
initDevices();
d = devices.get(mainDisplayID);
+ if (d == null) {
+ throw new AWTError("no screen devices");
+ }
}
return d;
}
diff --git a/src/share/classes/sun/java2d/SunGraphicsEnvironment.java b/src/share/classes/sun/java2d/SunGraphicsEnvironment.java
index 724fa2f1d1..5bd2d2f99e 100644
--- a/src/share/classes/sun/java2d/SunGraphicsEnvironment.java
+++ b/src/share/classes/sun/java2d/SunGraphicsEnvironment.java
@@ -165,7 +165,11 @@ public abstract class SunGraphicsEnvironment extends GraphicsEnvironment
* Returns the default screen graphics device.
*/
public GraphicsDevice getDefaultScreenDevice() {
- return getScreenDevices()[0];
+ GraphicsDevice[] screens = getScreenDevices();
+ if (screens.length == 0) {
+ throw new AWTError("no screen devices");
+ }
+ return screens[0];
}
/**
diff --git a/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java b/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
index 4e1c816fd1..3dece38d45 100644
--- a/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
+++ b/src/solaris/classes/sun/awt/X11GraphicsEnvironment.java
@@ -200,7 +200,12 @@ public class X11GraphicsEnvironment
* Returns the default screen graphics device.
*/
public GraphicsDevice getDefaultScreenDevice() {
- return getScreenDevices()[getDefaultScreenNum()];
+ GraphicsDevice[] screens = getScreenDevices();
+ if (screens.length == 0) {
+ throw new AWTError("no screen devices");
+ }
+ int index = getDefaultScreenNum();
+ return screens[0 < index && index < screens.length ? index : 0];
}
public boolean isDisplayLocal() {
diff --git a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
index a3a48e2d7b..c3e684b414 100644
--- a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
+++ b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java
@@ -93,7 +93,12 @@ public class Win32GraphicsEnvironment
protected native int getDefaultScreen();
public GraphicsDevice getDefaultScreenDevice() {
- return getScreenDevices()[getDefaultScreen()];
+ GraphicsDevice[] screens = getScreenDevices();
+ if (screens.length == 0) {
+ throw new AWTError("no screen devices");
+ }
+ int index = getDefaultScreen();
+ return screens[0 < index && index < screens.length ? index : 0];
}
/**