JDK-6785354 : REG: getFontMetrics throws AccessControlException with unsigned applet in 6u11
  • Type: Bug
  • Component: deploy
  • Sub-Component: plugin
  • Affected Version: 6u11
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2008-12-15
  • Updated: 2010-05-22
  • Resolved: 2008-12-16
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Windows XP SP3

EXTRA RELEVANT SYSTEM CONFIGURATION :
Internet Explorer 7.0.5730.11CO

A DESCRIPTION OF THE PROBLEM :
When an unsigned applet try to call Font.getFontMetrics, Java 6 Update 11 will throws an AccessControlException trying to read c:\windows\fonts\arial.ttf directory.


STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1) Compile the applet test case
2) Run it using Java Plug-in 6u11

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The AccessControlException should not occur and the applet display "Hello World"
ACTUAL -
An exception occurs and the applet displays nothing

ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "AWT-EventQueue-11" java.security.AccessControlException: access denied (java.io.FilePermission C:\WINDOWS\Fonts\ARIAL.TTF read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
	at java.io.File.exists(File.java:731)
	at sun.font.FontManager.getPathName(FontManager.java:1502)
	at sun.font.FontManager.findFontFromPlatform(FontManager.java:1587)
	at sun.font.FontManager.findFont2D(FontManager.java:1788)
	at java.awt.Font.getFont2D(Font.java:452)
	at sun.font.FontManager.getFont2D(Native Method)
	at sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:343)
	at sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:336)
	at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:284)
	at sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:764)
	at FontMetricsApplet.paint(FontMetricsApplet.java:16)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;

import javax.swing.JApplet;


public class FontMetricsApplet extends JApplet {

	@Override
	public void paint(Graphics g) {
		Font font = new Font("Arial", Font.BOLD, 30);
		g.setFont(font);
		
		FontMetrics fm = g.getFontMetrics();
		g.setColor(Color.BLACK);
		
		int y = fm.getHeight();
		g.drawString("Hello World", 10, y);
	}
}
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Sign the applet and grant all permission.

Release Regression From : 6
The above release value was the last known release where this 
bug was not reproducible. Since then there has been a regression.

Comments
EVALUATION It nothing to do with plugin or 6u11. Its because its a terminal server
16-12-2008