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

Java2D Graphics transform with NaN SEGV in T2K font rasteriser on Linux

XMLWordPrintable

    • 2d
    • b81
    • x86
    • linux

      FULL PRODUCT VERSION :
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)


      FULL OS VERSION :
      Linux meliboea 2.6.11.12 #1 SMP Thu Jun 16 19:33:00 CEST 2005 i686 GNU/Linux

      A DESCRIPTION OF THE PROBLEM :
      VM segfaults on call to drawString of a Graphics previously rotated by NaN.

      THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Yes

      THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Yes

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run attached Java class.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      An empty frame with no display should open.

      On Linux, the attached code causes a SIGSEGV.
      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      #
      # An unexpected error has been detected by HotSpot Virtual Machine:
      #
      # SIGSEGV (0xb) at pc=0xb1e202c4, pid=23011, tid=2982325168
      #
      # Java VM: Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing)
      # Problematic frame:
      # C [libfontmanager.so+0x462c4] Java_sun_font_FileFont_getGlyphImage+0x174
      #

      --------------- T H R E A D ---------------

      Current thread (0x08164890): JavaThread "AWT-EventQueue-0" [_thread_in_native, id=23022]

      siginfo:si_signo=11, si_errno=0, si_code=1, si_addr=0x00000014

      Registers:
      EAX=0x00000000, EBX=0xb1e565a8, ECX=0xffffffe0, EDX=0xb23005f0
      ESP=0xb1c29ebc, EBP=0xb1c29f44, ESI=0x90bf5018, EDI=0x08164890
      EIP=0xb1e202c4, CR2=0x00000014, EFLAGS=0x00010246

        Top of Stack: (sp=0xb1c29ebc)
      0xb1c29ebc: 3b2d2fd5 00000025 00000000 00000000
      0xb1c29ecc: 00000000 0000000b b1c29f10 9145ea40
      0xb1c29edc: b1c29f3c b78933fa 08164e24 b1c29efc
      0xb1c29eec: 08164890 01000000 08164e2c 08164e30
      0xb1c29efc: 00000000 08164e24 08164890 b1c29f94
      0xb1c29f0c: b27a8bc8 00000000 08164890 3b2d2fb9
      0xb1c29f1c: 84eb4e48 010b84eb 0817c7e0 0816a2f8
      0xb1c29f2c: 0817d060 00000000 0817d060 00000000

      Instructions: (pc=0xb1e202c4)
      0xb1e202b4: c0 1c 89 04 24 e8 6a f8 fb ff 89 45 ec 8b 45 ec
      0xb1e202c4: c7 40 14 00 00 00 00 8b 55 ec 8b 45 dc 66 89 42

      Stack: [0xb1bab000,0xb1c2b000), sp=0xb1c29ebc, free space=507k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      C [libfontmanager.so+0x462c4] Java_sun_font_FileFont_getGlyphImage+0x174
      j sun.font.FileFont.getGlyphImage(JI)J+0
      j sun.font.FileFontStrike.getSlot0GlyphImagePtrs([I[JI)I+108
      j sun.font.CompositeStrike.getGlyphImagePtrs([I[JI)V+12
      j sun.font.GlyphList.mapChars(Lsun/java2d/loops/FontInfo;I)Z+37
      j sun.font.GlyphList.setFromString(Lsun/java2d/loops/FontInfo;Ljava/lang/String;FF)Z+47
      j sun.java2d.pipe.GlyphListPipe.drawString(Lsun/java2d/SunGraphics2D;Ljava/lang/String;DD)V+148
      j sun.java2d.pipe.ValidatePipe.drawString(Lsun/java2d/SunGraphics2D;Ljava/lang/String;DD)V+17
      j sun.java2d.SunGraphics2D.drawString(Ljava/lang/String;II)V+25
      j Segfault.paint(Ljava/awt/Graphics;)V+17
      j javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+495
      j javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+292
      j javax.swing.JLayeredPane.paint(Ljava/awt/Graphics;)V+73
      j javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+495
      j javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+292
      j javax.swing.JComponent.paintWithOffscreenBuffer(Ljavax/swing/JComponent;Ljava/awt/Graphics;IIIILjava/awt/Image;)V+174
      j javax.swing.JComponent.paintDoubleBuffered(Ljavax/swing/JComponent;Ljava/awt/Component;Ljava/awt/Graphics;IIII)Z+131
      j javax.swing.JComponent._paintImmediately(IIII)V+739
      j javax.swing.JComponent.paintImmediately(IIII)V+83
      j javax.swing.RepaintManager.paintDirtyRegions()V+314
      j javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run()V+32
      j java.awt.event.InvocationEvent.dispatch()V+47
      j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+26
      j java.awt.EventDispatchThread.pumpOneEventForHierarchy(ILjava/awt/Component;)Z+200
      j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+26
      j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
      j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
      j java.awt.EventDispatchThread.run()V+9
      v ~StubRoutines::call_stub
      V [libjvm.so+0x1688ec]
      V [libjvm.so+0x257378]
      V [libjvm.so+0x168145]
      V [libjvm.so+0x1681de]
      V [libjvm.so+0x1d5495]
      V [libjvm.so+0x2b030d]
      V [libjvm.so+0x257e88]
      C [libpthread.so.0+0x4b63]

      Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
      j sun.font.FileFont.getGlyphImage(JI)J+0
      j sun.font.FileFontStrike.getSlot0GlyphImagePtrs([I[JI)I+108
      j sun.font.CompositeStrike.getGlyphImagePtrs([I[JI)V+12
      j sun.font.GlyphList.mapChars(Lsun/java2d/loops/FontInfo;I)Z+37
      j sun.font.GlyphList.setFromString(Lsun/java2d/loops/FontInfo;Ljava/lang/String;FF)Z+47
      j sun.java2d.pipe.GlyphListPipe.drawString(Lsun/java2d/SunGraphics2D;Ljava/lang/String;DD)V+148
      j sun.java2d.pipe.ValidatePipe.drawString(Lsun/java2d/SunGraphics2D;Ljava/lang/String;DD)V+17
      j sun.java2d.SunGraphics2D.drawString(Ljava/lang/String;II)V+25
      j Segfault.paint(Ljava/awt/Graphics;)V+17
      j javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+495
      j javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+292
      j javax.swing.JLayeredPane.paint(Ljava/awt/Graphics;)V+73
      j javax.swing.JComponent.paintChildren(Ljava/awt/Graphics;)V+495
      j javax.swing.JComponent.paint(Ljava/awt/Graphics;)V+292
      j javax.swing.JComponent.paintWithOffscreenBuffer(Ljavax/swing/JComponent;Ljava/awt/Graphics;IIIILjava/awt/Image;)V+174
      j javax.swing.JComponent.paintDoubleBuffered(Ljavax/swing/JComponent;Ljava/awt/Component;Ljava/awt/Graphics;IIII)Z+131
      j javax.swing.JComponent._paintImmediately(IIII)V+739
      j javax.swing.JComponent.paintImmediately(IIII)V+83
      j javax.swing.RepaintManager.paintDirtyRegions()V+314
      j javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run()V+32
      j java.awt.event.InvocationEvent.dispatch()V+47
      j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+26
      j java.awt.EventDispatchThread.pumpOneEventForHierarchy(ILjava/awt/Component;)Z+200
      j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+26
      j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
      j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
      j java.awt.EventDispatchThread.run()V+9
      v ~StubRoutines::call_stub

      --------------- P R O C E S S ---------------

      Java Threads: ( => current thread )
        0x0805b600 JavaThread "DestroyJavaVM" [_thread_blocked, id=23011]
      =>0x08164890 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=23022]
        0x08164298 JavaThread "AWT-Shutdown" [_thread_blocked, id=23021]
        0x08158f40 JavaThread "AWT-XAWT" daemon [_thread_in_native, id=23020]
        0x0814dd88 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=23019]
        0x0809f170 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=23017]
        0x0809dcb0 JavaThread "CompilerThread0" daemon [_thread_blocked, id=23016]
        0x0809cd38 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=23015]
        0x080999d8 JavaThread "Finalizer" daemon [_thread_blocked, id=23014]
        0x08097b68 JavaThread "Reference Handler" daemon [_thread_blocked, id=23013]

      Other Threads:
        0x08095090 VMThread [id=23012]
        0x080b9ed0 WatcherThread [id=23018]

      VM state:not at safepoint (normal execution)

      VM Mutex/Monitor currently owned by a thread: None

      Heap
       def new generation total 576K, used 144K [0x88b20000, 0x88bc0000, 0x89000000)
        eden space 512K, 15% used [0x88b20000, 0x88b34278, 0x88ba0000)
        from space 64K, 100% used [0x88ba0000, 0x88bb0000, 0x88bb0000)
        to space 64K, 0% used [0x88bb0000, 0x88bb0000, 0x88bc0000)
       tenured generation total 1408K, used 367K [0x89000000, 0x89160000, 0x8cb20000)
         the space 1408K, 26% used [0x89000000, 0x8905be98, 0x8905c000, 0x89160000)
       compacting perm gen total 8192K, used 100K [0x8cb20000, 0x8d320000, 0x90b20000)
         the space 8192K, 1% used [0x8cb20000, 0x8cb39280, 0x8cb39400, 0x8d320000)
          ro space 8192K, 68% used [0x90b20000, 0x91097a00, 0x91097a00, 0x91320000)
          rw space 12288K, 47% used [0x91320000, 0x918d5db0, 0x918d5e00, 0x91f20000)

      Dynamic libraries:

      VM Arguments:
      java_command: Segfault

      Environment Variables:
      PATH=/home/fsc/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/sbin:/usr/sbin:/home/fsc/distcc/bin
      LD_LIBRARY_PATH=/home/fsc/jdk1.5.0/jre/lib/i386/client:/home/fsc/jdk1.5.0/jre/lib/i386:/home/fsc/jdk1.5.0/jre/../lib/i386
      SHELL=/bin/bash
      DISPLAY=:0.0


      --------------- S Y S T E M ---------------

      OS:3.1

      uname:Linux 2.6.11.12 #1 SMP Thu Jun 16 19:33:00 CEST 2005 i686
      libc:glibc 2.3.2 NPTL 0.60
      rlimit: STACK 8192k, CORE 0k, NPROC infinity, NOFILE 1024, AS infinity
      load average:0.01 0.11 0.15

      CPU:total 2 family 15, cmov, cx8, fxsr, mmx, sse, sse2, ht

      Memory: 4k page, physical 969480k(14704k free), swap 0k(0k free)

      vm_info: Java HotSpot(TM) Client VM (1.5.0-b64) for linux-x86, built on Sep 15 2004 03:56:41 by java_re with gcc 3.2.1-7a (J2SE release)



      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.*;
      import java.awt.*;

      public class Segfault extends JComponent {
              public static void main(String [] args) {
                      JFrame f = new JFrame("Segfault");
                      f.setContentPane(new Segfault());
                      f.pack();
                      f.setVisible(true);
              }

              public void paint(Graphics gg) {
                      Graphics2D g = (Graphics2D)gg;
                      g.rotate(0f/0f);
                      g.drawString("BOO!", 0, 0);
              }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Don't rotate Graphics2D objects by NaN ;)

            prr Philip Race
            prr Philip Race
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: