From 9e32d0d9d12e62bf79b44b9ec51a998fe52bfd5a Mon Sep 17 00:00:00 2001 From: Yumin Qi Date: Mon, 8 Mar 2010 11:35:30 -0800 Subject: [PATCH] 6918065: Crash in Java2D blit loop (IntArgbToIntArgbPreSrcOverMaskBlit) in 64bit mode Reviewed-by: igor, bae --- .../classes/java/awt/AlphaComposite.java | 11 +++++----- .../TestAlphaCompositeForNaN.java | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 jdk/test/java/awt/AlphaComposite/TestAlphaCompositeForNaN.java diff --git a/jdk/src/share/classes/java/awt/AlphaComposite.java b/jdk/src/share/classes/java/awt/AlphaComposite.java index 622690cddef..978d9da2948 100644 --- a/jdk/src/share/classes/java/awt/AlphaComposite.java +++ b/jdk/src/share/classes/java/awt/AlphaComposite.java @@ -614,14 +614,15 @@ public final class AlphaComposite implements Composite { } private AlphaComposite(int rule, float alpha) { - if (alpha < 0.0f || alpha > 1.0f) { - throw new IllegalArgumentException("alpha value out of range"); - } if (rule < MIN_RULE || rule > MAX_RULE) { throw new IllegalArgumentException("unknown composite rule"); } - this.rule = rule; - this.extraAlpha = alpha; + if (alpha >= 0.0f && alpha <= 1.0f) { + this.rule = rule; + this.extraAlpha = alpha; + } else { + throw new IllegalArgumentException("alpha value out of range"); + } } /** diff --git a/jdk/test/java/awt/AlphaComposite/TestAlphaCompositeForNaN.java b/jdk/test/java/awt/AlphaComposite/TestAlphaCompositeForNaN.java new file mode 100644 index 00000000000..2b9fb6e2f2e --- /dev/null +++ b/jdk/test/java/awt/AlphaComposite/TestAlphaCompositeForNaN.java @@ -0,0 +1,22 @@ +/* + * @test + * @bug 6918065 + * @summary Test for passing NaN as alpha + * should throw IllegalArgumentException + */ + +import java.awt.*; + +public class TestAlphaCompositeForNaN { + public static void main(String[] args) { + try { + AlphaComposite a = AlphaComposite.getInstance(AlphaComposite.DST, Float.NaN); + System.out.println("Failed"); + throw new RuntimeException(a + " failed to throw IllegalArgumentException for alpha = " + Float.NaN); + } + catch (IllegalArgumentException ie) { + System.out.println("Passed"); + System.out.println("Caught " + ie); + } + } +}