Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8023097

t2k.dll crash in T2KFontScaler.getGlyphMetricsNative with NaN rotation

XMLWordPrintable

    • 2d
    • b108
    • windows_7

      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 ----------

            jchen Johnny Chen (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: