JDK-6692979 : VM Crash when shearing text + rect over a range of values
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: dr2,1.4.0
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: generic,windows_vista
  • CPU: generic,x86
  • Submitted: 2008-04-23
  • Updated: 2011-03-07
  • Resolved: 2011-03-07
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7
6u10Fixed 7 b28Fixed
Description
I am getting a VM crash when shearing a group containing a rectangle and text over a range of values specified by a slider. When I move the thumb of the slider, shear transform is applied on the group as follows - shear (slider.val, slider.val). When I move the slider to the maximum value, VM crashes. 

I tested with SDK build - 261 on Vista using 6u10-b22. This is reproducible on jdk6-FCS as well.

To reproduce the bug, run the attached test on the latest SDK and move the slider thumb slowly towards the right (till the max value is attained). You will see the app crashing when slider moves towards the max value. 

I have been trying to reproduce this with Scenegraph test but still have not succeeded.


Here is the crash dump-
------------------------
#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x770c1ad5, pid=5988, tid=5392
#
# Java VM: Java HotSpot(TM) Client VM (11.0-b11 mixed mode windows-x86)
# Problematic frame:
# C  [ntdll.dll+0x61ad5]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

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

Current thread (0x03575c00):  JavaThread "AWT-EventQueue-0" [_thread_in_native, id=5392, stack(0x03ae0000,0x03b30000)]

siginfo: ExceptionCode=0xc0000005, reading address 0x0000001c

Registers:
EAX=0x03638670, EBX=0x00c20000, ECX=0x00000018, EDX=0x00000138
ESP=0x03b2ed68, EBP=0x03b2ed90, ESI=0x03638668, EDI=0x03629ec8
EIP=0x770c1ad5, EFLAGS=0x00010246

Top of Stack: (sp=0x03b2ed68)
0x03b2ed68:   00000000 0362d3b8 00c20000 1dba5e9a
0x03b2ed78:   00000000 0367b330 00000018 0688bc90
0x03b2ed88:   000007ff 0000077f 03b2ee88 770c1d37
0x03b2ed98:   00c20000 03638668 03b2ee38 00000000
0x03b2eda8:   03b21c8c 00000000 00c20000 0362d3c0
0x03b2edb8:   00000000 3ff00000 00000000 3ff00000
0x03b2edc8:   00000000 03b2ee18 77073e35 03b2ee18
0x03b2edd8:   77073e7e 00c20000 00c22988 00000020 

Instructions: (pc=0x770c1ad5)
0x770c1ac5:   85 39 b7 01 00 8b 56 0c 8d 46 08 8b 08 89 4d f0
0x770c1ad5:   8b 49 04 89 55 f4 8b 12 3b d1 0f 85 2a b9 01 00 


Stack: [0x03ae0000,0x03b30000],  sp=0x03b2ed68,  free space=315k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ntdll.dll+0x61ad5]
C  [ntdll.dll+0x61d37]
C  [ntdll.dll+0x61c21]
C  [kernel32.dll+0x47a5e]
C  [msvcr71.dll+0x218a]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.font.FileFont.getGlyphImage(JI)J+0
j  sun.font.FileFontStrike.getGlyphImagePtr(I)J+115
j  sun.font.FileFontStrike.getGlyphMetrics(IZ)Ljava/awt/geom/Point2D$Float;+29
j  sun.font.FileFontStrike.getGlyphMetrics(I)Ljava/awt/geom/Point2D$Float;+3
j  sun.font.StandardGlyphVector$GlyphStrike.addDefaultGlyphAdvance(ILjava/awt/geom/Point2D$Float;)V+5
j  sun.font.StandardGlyphVector.initPositions()V+162
j  sun.font.StandardGlyphVector.getGlyphOutlineBounds(I)Ljava/awt/geom/Rectangle2D;+5
j  sun.font.StandardGlyphVector.getGlyphVisualBounds(I)Ljava/awt/Shape;+100
j  sun.font.StandardGlyphVector.getVisualBounds()Ljava/awt/geom/Rectangle2D;+22
j  com.sun.scenario.scenegraph.SGText.getRawBounds(Ljava/awt/geom/AffineTransform;)Ljava/awt/geom/Rectangle2D;+211
j  com.sun.scenario.scenegraph.SGText.getBounds(Ljava/awt/geom/AffineTransform;)Ljava/awt/geom/Rectangle2D;+33
j  com.sun.scenario.scenegraph.SGNode.calculateAccumBounds()Ljava/awt/geom/Rectangle2D;+5
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+255
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;ZZ)Ljava/awt/geom/Rectangle2D;+241
j  com.sun.scenario.scenegraph.SGNode.accumulateDirty(Ljava/awt/geom/Rectangle2D;)Ljava/awt/geom/Rectangle2D;+4
j  com.sun.scenario.scenegraph.JSGPanel.accumulateDirtyRegions(Ljava/awt/Rectangle;)Ljava/awt/Rectangle;+26
j  com.sun.scenario.scenegraph.JSGPanel.repaintDirtyRegions(Z)V+54
j  com.sun.scenario.scenegraph.JSGPanelRepainter.repaintAll()V+46
j  com.sun.scenario.scenegraph.JSGPanelRepainter$FrameDisplay.run()V+4
j  com.sun.scenario.animation.MasterTimer.timePulseImpl(J)V+252
j  com.sun.scenario.animation.MasterTimer.timePulse(J)V+4
j  com.sun.scenario.animation.MasterTimer$MainLoop.run()V+3
j  com.sun.scenario.scenegraph.SGEventQueue.doPulse()V+27
j  com.sun.scenario.scenegraph.SGEventQueue.access$000(Lcom/sun/scenario/scenegraph/SGEventQueue;)V+1
j  com.sun.scenario.scenegraph.SGEventQueue$2.run()V+4
j  java.awt.event.InvocationEvent.dispatch()V+47
j  java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+26
j  java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j  java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j  java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
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 )
  0x03642400 JavaThread "D3D Screen Updater" daemon [_thread_blocked, id=6012, stack(0x03b30000,0x03b80000)]
  0x035ddc00 JavaThread "TimerQueue" daemon [_thread_blocked, id=3924, stack(0x06390000,0x063e0000)]
  0x00c29400 JavaThread "DestroyJavaVM" [_thread_blocked, id=6048, stack(0x000c0000,0x00110000)]
=>0x03575c00 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=5392, stack(0x03ae0000,0x03b30000)]
  0x03573400 JavaThread "AWT-Windows" daemon [_thread_in_native, id=2072, stack(0x03a90000,0x03ae0000)]
  0x03573000 JavaThread "AWT-Shutdown" [_thread_blocked, id=3832, stack(0x03a40000,0x03a90000)]
  0x03570800 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2324, stack(0x039f0000,0x03a40000)]
  0x01201800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=680, stack(0x03430000,0x03480000)]
  0x011fcc00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=456, stack(0x033e0000,0x03430000)]
  0x011fc000 JavaThread "Attach Listener" daemon [_thread_blocked, id=5756, stack(0x03390000,0x033e0000)]
  0x011f1400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5040, stack(0x03340000,0x03390000)]
  0x011e2800 JavaThread "Finalizer" daemon [_thread_blocked, id=5584, stack(0x032f0000,0x03340000)]
  0x011dbc00 JavaThread "Reference Handler" daemon [_thread_blocked, id=1556, stack(0x032a0000,0x032f0000)]

Other Threads:
  0x011d8800 VMThread [stack: 0x03250000,0x032a0000] [id=1192]
  0x0120b800 WatcherThread [stack: 0x03480000,0x034d0000] [id=1016]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 960K, used 931K [0x10010000, 0x10110000, 0x104f0000)
  eden space 896K,  96% used [0x10010000, 0x100e8f58, 0x100f0000)
  from space 64K, 100% used [0x10100000, 0x10110000, 0x10110000)
  to   space 64K,   0% used [0x100f0000, 0x100f0000, 0x10100000)
 tenured generation   total 4096K, used 843K [0x104f0000, 0x108f0000, 0x14010000)
   the space 4096K,  20% used [0x104f0000, 0x105c2c00, 0x105c2c00, 0x108f0000)
 compacting perm gen  total 12288K, used 9675K [0x14010000, 0x14c10000, 0x18010000)
   the space 12288K,  78% used [0x14010000, 0x14982fa8, 0x14983000, 0x14c10000)
No shared spaces configured.

Dynamic libraries:
0x00400000 - 0x00423000 	c:\jdk\6uN\b22\windows-i586\bin\java.exe
0x77060000 - 0x7717e000 	C:\Windows\system32\ntdll.dll
0x76b80000 - 0x76c58000 	C:\Windows\system32\kernel32.dll
0x75920000 - 0x759df000 	C:\Windows\system32\ADVAPI32.dll
0x76a30000 - 0x76af3000 	C:\Windows\system32\RPCRT4.dll
0x7c340000 - 0x7c396000 	c:\jdk\6uN\b22\windows-i586\jre\bin\msvcr71.dll
0x08000000 - 0x08256000 	c:\jdk\6uN\b22\windows-i586\jre\bin\client\jvm.dll
0x76e70000 - 0x76f0e000 	C:\Windows\system32\USER32.dll
0x771b0000 - 0x771fb000 	C:\Windows\system32\GDI32.dll
0x73f90000 - 0x73fc3000 	C:\Windows\system32\WINMM.dll
0x76d30000 - 0x76dda000 	C:\Windows\system32\msvcrt.dll
0x76f10000 - 0x77054000 	C:\Windows\system32\ole32.dll
0x76580000 - 0x7660c000 	C:\Windows\system32\OLEAUT32.dll
0x73f50000 - 0x73f88000 	C:\Windows\system32\OLEACC.dll
0x77190000 - 0x771ae000 	C:\Windows\system32\IMM32.DLL
0x764b0000 - 0x76577000 	C:\Windows\system32\MSCTF.dll
0x75750000 - 0x7577c000 	C:\Windows\system32\apphelp.dll
0x769c0000 - 0x769c9000 	C:\Windows\system32\LPK.DLL
0x76940000 - 0x769bd000 	C:\Windows\system32\USP10.dll
0x10000000 - 0x10008000 	c:\jdk\6uN\b22\windows-i586\jre\bin\hpi.dll
0x75880000 - 0x75887000 	C:\Windows\system32\PSAPI.DLL
0x00150000 - 0x0015c000 	c:\jdk\6uN\b22\windows-i586\jre\bin\verify.dll
0x00160000 - 0x0017f000 	c:\jdk\6uN\b22\windows-i586\jre\bin\java.dll
0x00180000 - 0x0018f000 	c:\jdk\6uN\b22\windows-i586\jre\bin\zip.dll
0x036d0000 - 0x03811000 	C:\jdk\6uN\b22\windows-i586\jre\bin\awt.dll
0x73420000 - 0x73461000 	C:\Windows\system32\WINSPOOL.DRV
0x749c0000 - 0x749ff000 	C:\Windows\system32\uxtheme.dll
0x759e0000 - 0x764ae000 	C:\Windows\system32\shell32.dll
0x76750000 - 0x767a5000 	C:\Windows\system32\SHLWAPI.dll
0x746c0000 - 0x74854000 	C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6000.16386_none_5d07289e07e1d100\comctl32.dll
0x03f20000 - 0x03f74000 	C:\jdk\6uN\b22\windows-i586\jre\bin\fontmanager.dll
0x72210000 - 0x723ca000 	C:\Windows\system32\d3d9.dll
0x75020000 - 0x75028000 	C:\Windows\system32\VERSION.dll
0x72840000 - 0x72846000 	C:\Windows\system32\d3d8thk.dll
0x72cc0000 - 0x72ccc000 	C:\Windows\system32\dwmapi.dll
0x03fd0000 - 0x044bc000 	C:\Windows\system32\nvd3dum.dll
0x04510000 - 0x04523000 	C:\jdk\6uN\b22\windows-i586\jre\bin\net.dll
0x769d0000 - 0x769fd000 	C:\Windows\system32\WS2_32.dll
0x76610000 - 0x76616000 	C:\Windows\system32\NSI.dll
0x74fb0000 - 0x74feb000 	C:\Windows\system32\mswsock.dll
0x75010000 - 0x75016000 	C:\Windows\System32\wship6.dll
0x039d0000 - 0x039d9000 	C:\jdk\6uN\b22\windows-i586\jre\bin\nio.dll
0x03c90000 - 0x03cb3000 	C:\jdk\6uN\b22\windows-i586\jre\bin\dcpr.dll

VM Arguments:
jvm_args: -Djava.library.path=c:\JavaFX\JavaFX-player\261\javafx-sdk1.0\bin\..\lib 
java_command: ShearTest
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=c:\JavaFX\JavaFX-player\261\javafx-sdk1.0\bin;c:\jdk\6uN\b22\windows-i586\bin;C:\PROGRA~1\MKSTOO~1\bin;C:\PROGRA~1\MKSTOO~1\bin\X11;C:\PROGRA~1\MKSTOO~1\mksnt;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Common Files\Roxio Shared\9.0\DLLShared\;C:\PROGRA~1\ULTRAE~1;C:\Program Files\Subversion\bin;C:\Program Files\Mercurial;C:\Program Files\OpenSSH\bin
USERNAME=Praveen
SHELL=C:/PROGRA~1/MKSTOO~1/mksnt/sh.exe
DISPLAY=:0.0
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 10, GenuineIntel



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

OS: Windows Vista Build 6000 

CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 15 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3

Memory: 4k page, physical 2094664k(965696k free), swap 4194303k(2726004k free)

vm_info: Java HotSpot(TM) Client VM (11.0-b11) for windows-x86 JRE (1.6.0_10-b199), built on Jan 23 2008 23:48:17 by "jdeploy" with MS VC++ 7.1

time: Wed Apr 23 13:45:27 2008
elapsed time: 10 seconds

Comments
EVALUATION I've now got a JDK test which I think is sufficiently similar and I can see its reproducible at least as far back as 1.4. Actually 1.4 is much, much worse than 1.6 import javax.swing.*; import java.awt.*; import java.awt.font.*; import java.awt.geom.*; public class Shear extends Component { public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add("Center", new Shear()); f.pack(); f.setVisible(true); } public Dimension getPreferredSize() { return new Dimension(400,300); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; g.setColor(Color.white); g.fillRect(0,0,400,300); g.setColor(Color.black); Font origFont = new Font("Arial", Font.BOLD, 30); for (int i=0;i<=360;i++) { double sv = i*180.0/Math.PI; AffineTransform tx = AffineTransform.getShearInstance(sv, sv); Font font = origFont.deriveFont(tx); g.setFont(font); GlyphVector gv = font.createGlyphVector(g2.getFontRenderContext(), "JavaFX"); System.out.println(gv.getVisualBounds()); g.drawString("JavaFX", 100, 100); } } }
23-04-2008

EVALUATION Given the requested shear values I don't think we should be hitting sun.font.FileFont.getGlyphImage at all.
23-04-2008