FULL PRODUCT VERSION :
vm_info: Java HotSpot(TM) 64-Bit Server VM (23.21-b01) for windows-amd64 JRE (1.7.0_21-b11), built on Apr 4 2013 08:11:28 by " java_re " with unknown MS VC++:1600
ADDITIONAL OS VERSION INFORMATION :
OS: Windows 7 , 64 bit Build 7601 Service Pack 1
A DESCRIPTION OF THE PROBLEM :
Providing a NaN rotation in the affine transform in the FontRenderContext causes Font.getStringBounds() to crash (on Windows only)
The obvious workaround is not to provide a NaN, of course. But I humbly suggest that it should still not crash the entire JRE.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000745493b0, pid=2036, tid=2692
#
# JRE version: 7.0_21-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.21-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [t2k.dll+0x193b0]
Stack: [0x0000000015b80000,0x0000000015c80000], sp=0x0000000015c7c2d0, free space=1008k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [t2k.dll+0x193b0]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.font.T2KFontScaler.getGlyphMetricsNative(Lsun/font/Font2D;JJILjava/awt/geom/Point2D$Float;)V+0
j sun.font.T2KFontScaler.getGlyphMetrics(JILjava/awt/geom/Point2D$Float;)V+28
j sun.font.FileFont.getGlyphMetrics(JILjava/awt/geom/Point2D$Float;)V+8
j sun.font.FileFontStrike.getGlyphMetrics(IZ)Ljava/awt/geom/Point2D$Float;+201
j sun.font.FileFontStrike.getGlyphMetrics(I)Ljava/awt/geom/Point2D$Float;+3
j sun.font.CompositeStrike.getGlyphMetrics(I)Ljava/awt/geom/Point2D$Float;+11
j sun.font.StandardGlyphVector$GlyphStrike.addDefaultGlyphAdvance(ILjava/awt/geom/Point2D$Float;)V+5
j sun.font.StandardGlyphVector.initPositions()V+162
j sun.font.StandardGlyphVector.getLogicalBounds()Ljava/awt/geom/Rectangle2D;+5
j java.awt.Font.getStringBounds([CIILjava/awt/font/FontRenderContext;)Ljava/awt/geom/Rectangle2D;+190
j java.awt.Font.getStringBounds(Ljava/lang/String;Ljava/awt/font/FontRenderContext;)Ljava/awt/geom/Rectangle2D;+11
j java.awt.FontMetrics.getStringBounds(Ljava/lang/String;Ljava/awt/Graphics;)Ljava/awt/geom/Rectangle2D;+10
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = (Graphics2D) image.getGraphics();
g2.rotate(Double.NaN);
g2.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
Rectangle2D stringBounds = g2.getFontMetrics().getStringBounds( " test " , g2);
System.err.println( " bounds: h= " + stringBounds.getHeight() + " w= " + stringBounds.getWidth());
---------- END SOURCE ----------
vm_info: Java HotSpot(TM) 64-Bit Server VM (23.21-b01) for windows-amd64 JRE (1.7.0_21-b11), built on Apr 4 2013 08:11:28 by " java_re " with unknown MS VC++:1600
ADDITIONAL OS VERSION INFORMATION :
OS: Windows 7 , 64 bit Build 7601 Service Pack 1
A DESCRIPTION OF THE PROBLEM :
Providing a NaN rotation in the affine transform in the FontRenderContext causes Font.getStringBounds() to crash (on Windows only)
The obvious workaround is not to provide a NaN, of course. But I humbly suggest that it should still not crash the entire JRE.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000745493b0, pid=2036, tid=2692
#
# JRE version: 7.0_21-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.21-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [t2k.dll+0x193b0]
Stack: [0x0000000015b80000,0x0000000015c80000], sp=0x0000000015c7c2d0, free space=1008k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [t2k.dll+0x193b0]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.font.T2KFontScaler.getGlyphMetricsNative(Lsun/font/Font2D;JJILjava/awt/geom/Point2D$Float;)V+0
j sun.font.T2KFontScaler.getGlyphMetrics(JILjava/awt/geom/Point2D$Float;)V+28
j sun.font.FileFont.getGlyphMetrics(JILjava/awt/geom/Point2D$Float;)V+8
j sun.font.FileFontStrike.getGlyphMetrics(IZ)Ljava/awt/geom/Point2D$Float;+201
j sun.font.FileFontStrike.getGlyphMetrics(I)Ljava/awt/geom/Point2D$Float;+3
j sun.font.CompositeStrike.getGlyphMetrics(I)Ljava/awt/geom/Point2D$Float;+11
j sun.font.StandardGlyphVector$GlyphStrike.addDefaultGlyphAdvance(ILjava/awt/geom/Point2D$Float;)V+5
j sun.font.StandardGlyphVector.initPositions()V+162
j sun.font.StandardGlyphVector.getLogicalBounds()Ljava/awt/geom/Rectangle2D;+5
j java.awt.Font.getStringBounds([CIILjava/awt/font/FontRenderContext;)Ljava/awt/geom/Rectangle2D;+190
j java.awt.Font.getStringBounds(Ljava/lang/String;Ljava/awt/font/FontRenderContext;)Ljava/awt/geom/Rectangle2D;+11
j java.awt.FontMetrics.getStringBounds(Ljava/lang/String;Ljava/awt/Graphics;)Ljava/awt/geom/Rectangle2D;+10
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = (Graphics2D) image.getGraphics();
g2.rotate(Double.NaN);
g2.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
Rectangle2D stringBounds = g2.getFontMetrics().getStringBounds( " test " , g2);
System.err.println( " bounds: h= " + stringBounds.getHeight() + " w= " + stringBounds.getWidth());
---------- END SOURCE ----------