8140530: Creating a VolatileImage with size 0, 0 results in no longer working g2d.drawStri
Reviewed-by: flar, serb
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/SunVolatileImage.java Fri Dec 04 09:56:50 2015 +0400
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/SunVolatileImage.java Fri Dec 04 13:52:21 2015 +0300
@@ -70,6 +70,10 @@
{
this.comp = comp;
this.graphicsConfig = graphicsConfig;
+ if (width <= 0 || height <= 0) {
+ throw new IllegalArgumentException("Width (" + width + ")" +
+ " and height (" + height + ") cannot be <= 0");
+ }
this.width = width;
this.height = height;
this.forcedAccelSurfaceType = accType;
--- a/jdk/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c Fri Dec 04 09:56:50 2015 +0400
+++ b/jdk/src/java.desktop/unix/native/common/java2d/x11/X11SurfaceData.c Fri Dec 04 13:52:21 2015 +0300
@@ -438,6 +438,15 @@
xsdo->drawable = drawable;
xsdo->isPixmap = JNI_FALSE;
} else {
+ /*
+ * width , height must be nonzero otherwise XCreatePixmap
+ * generates BadValue in error_handler
+ */
+ if (width <= 0 || height <= 0) {
+ JNU_ThrowOutOfMemoryError(env,
+ "Can't create offscreen surface");
+ return JNI_FALSE;
+ }
xsdo->isPixmap = JNI_TRUE;
/* REMIND: workaround for bug 4420220 on pgx32 boards:
don't use DGA with pixmaps unless USE_DGA_PIXMAPS is set.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/VolatileImage/VolatileImageBug.java Fri Dec 04 13:52:21 2015 +0300
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015, 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.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.image.VolatileImage;
+
+/**
+ * @test
+ * @bug 8140530
+ * @run main VolatileImageBug
+ * @summary Creating volatileimage(0,0) should throw IAE
+ */
+public class VolatileImageBug {
+ public static void main(String[] args) {
+
+ boolean iaeThrown = false;
+ GraphicsEnvironment ge = GraphicsEnvironment.
+ getLocalGraphicsEnvironment();
+ GraphicsConfiguration gc = ge.getDefaultScreenDevice().
+ getDefaultConfiguration();
+ try {
+ VolatileImage volatileImage = gc.createCompatibleVolatileImage(0, 0);
+ } catch (IllegalArgumentException iae) {
+ iaeThrown = true;
+ }
+ if (!iaeThrown) {
+ throw new RuntimeException ("IllegalArgumentException not thrown " +
+ "for createCompatibleVolatileImage(0,0)");
+ }
+ }
+}
+