-
Enhancement
-
Resolution: Duplicate
-
P3
-
6u10, 6u17, 6u18
FULL PRODUCT VERSION :
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 5.2.3790]
Linux 2.6.31 #1 SMP Tue Nov 17 12:34:32 CET 2009 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
Rendering a JLabel which contains specific unicode characters in text results in a NullPointerException.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached test code with 6u17 or 6u18-ea-b04.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Expect return code 0 (as with 6u13).
ACTUAL -
NullPointerException (see below), return code 1
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at sun.font.PhysicalStrike.getGlyphPoint(PhysicalStrike.java:112)
at sun.font.SunLayoutEngine.nativeLayout(Native Method)
at sun.font.SunLayoutEngine.layout(SunLayoutEngine.java:133)
at sun.font.GlyphLayout$EngineRecord.layout(GlyphLayout.java:648)
at sun.font.GlyphLayout.layout(GlyphLayout.java:447)
at sun.font.ExtendedTextSourceLabel.createGV(ExtendedTextSourceLabel.java:308)
at sun.font.ExtendedTextSourceLabel.getGV(ExtendedTextSourceLabel.java:294)
at sun.font.ExtendedTextSourceLabel.createLogicalBounds(ExtendedTextSourceLabel.java:208)
at sun.font.ExtendedTextSourceLabel.getAdvance(ExtendedTextSourceLabel.java:117)
at java.awt.font.TextLine.init(TextLine.java:264)
at java.awt.font.TextLine.<init>(TextLine.java:110)
at java.awt.font.TextLine.fastCreateTextLine(TextLine.java:952)
at java.awt.font.TextLayout.fastInit(TextLayout.java:585)
at java.awt.font.TextLayout.<init>(TextLayout.java:374)
at sun.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:465)
at sun.swing.SwingUtilities2.stringWidth(SwingUtilities2.java:338)
at javax.swing.SwingUtilities.layoutCompoundLabelImpl(SwingUtilities.java:984)
at javax.swing.SwingUtilities.layoutCompoundLabel(SwingUtilities.java:870)
at javax.swing.plaf.basic.BasicLabelUI.layoutCL(BasicLabelUI.java:76)
at javax.swing.plaf.basic.BasicLabelUI.layout(BasicLabelUI.java:184)
at javax.swing.plaf.basic.BasicLabelUI.paint(BasicLabelUI.java:147)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:751)
at Bug72846$1.setText(Bug72846.java:18)
at Bug72846.test(Bug72846.java:24)
at Bug72846$2.run(Bug72846.java:32)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
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.Font;
import java.awt.image.BufferedImage;
import javax.swing.JLabel;
import org.junit.Test;
public class Bug72846 {
@Test
public void test() {
final BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
final JLabel jLabel = new JLabel() {
@Override
public void setText(final String text) {
super.setText(text);
paintComponent(image.getGraphics());
}
};
jLabel.setFont(Font.decode("Dialog"));
final char[] chars = Character.toChars(2375);
jLabel.setText(String.valueOf(chars));
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Code succeeds with 6u13, fails with 6u18
Additional report:
FULL PRODUCT VERSION :
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.0.6002] Japanese locale
A DESCRIPTION OF THE PROBLEM :
In Swing applications, NPE occurs at sun.font.PhysicalStrike.getGlyphPoint() method if a specific (unlikely) Unicode text is to be shown. Former Java SE 6 releases, at least 6u3, seem to be not affected.
Since somewhere between 6u3 and 6u12, Java_sun_font_TrueTypeFont_getGlyphPoint() defined in j2se\src\share\native\sun\font\scalerMethods.c was updeted to include a code path to return NULL, which is not expected by the caller, sun.font.PhysicalStrike.getGlyphPoint().
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached program on later versions of Java SE 6 runtime.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Do not die.
ACTUAL -
Dies with NPE.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at sun.font.PhysicalStrike.getGlyphPoint(PhysicalStrike.java:112)
at sun.font.SunLayoutEngine.nativeLayout(Native Method)
at sun.font.SunLayoutEngine.layout(SunLayoutEngine.java:133)
at sun.font.GlyphLayout$EngineRecord.layout(GlyphLayout.java:648)
at sun.font.GlyphLayout.layout(GlyphLayout.java:447)
at sun.font.ExtendedTextSourceLabel.createGV(ExtendedTextSourceLabel.java:308)
at sun.font.ExtendedTextSourceLabel.getGV(ExtendedTextSourceLabel.java:294)
at sun.font.ExtendedTextSourceLabel.createLogicalBounds(ExtendedTextSourceLabel.java:208)
at sun.font.ExtendedTextSourceLabel.getAdvance(ExtendedTextSourceLabel.java:117)
at java.awt.font.TextLine.init(TextLine.java:264)
at java.awt.font.TextLine.<init>(TextLine.java:110)
at java.awt.font.TextLine.fastCreateTextLine(TextLine.java:952)
at java.awt.font.TextLayout.fastInit(TextLayout.java:585)
at java.awt.font.TextLayout.<init>(TextLayout.java:374)
at sun.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:465)
at sun.swing.SwingUtilities2.stringWidth(SwingUtilities2.java:340)
at javax.swing.SwingUtilities.layoutCompoundLabelImpl(SwingUtilities.java:984)
at javax.swing.SwingUtilities.layoutCompoundLabel(SwingUtilities.java:870)
at javax.swing.plaf.basic.BasicLabelUI.layoutCL(BasicLabelUI.java:76)
at javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:221)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1634)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:702)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:907)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:702)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at java.awt.Window.pack(Window.java:706)
at SwingDeath.main(swingdeath.java:11)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javax.swing.*;
public class SwingDeath {
public static void main(String argv[])
{
String t = "\\U+0901-\u0901"; // ill Unicode text
JFrame frame = new JFrame("Swing Death");
final JLabel label = new JLabel(t);
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
// NOTREACHED
frame.setVisible(true);
}
}
---------- END SOURCE ----------
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 5.2.3790]
Linux 2.6.31 #1 SMP Tue Nov 17 12:34:32 CET 2009 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
Rendering a JLabel which contains specific unicode characters in text results in a NullPointerException.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached test code with 6u17 or 6u18-ea-b04.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Expect return code 0 (as with 6u13).
ACTUAL -
NullPointerException (see below), return code 1
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at sun.font.PhysicalStrike.getGlyphPoint(PhysicalStrike.java:112)
at sun.font.SunLayoutEngine.nativeLayout(Native Method)
at sun.font.SunLayoutEngine.layout(SunLayoutEngine.java:133)
at sun.font.GlyphLayout$EngineRecord.layout(GlyphLayout.java:648)
at sun.font.GlyphLayout.layout(GlyphLayout.java:447)
at sun.font.ExtendedTextSourceLabel.createGV(ExtendedTextSourceLabel.java:308)
at sun.font.ExtendedTextSourceLabel.getGV(ExtendedTextSourceLabel.java:294)
at sun.font.ExtendedTextSourceLabel.createLogicalBounds(ExtendedTextSourceLabel.java:208)
at sun.font.ExtendedTextSourceLabel.getAdvance(ExtendedTextSourceLabel.java:117)
at java.awt.font.TextLine.init(TextLine.java:264)
at java.awt.font.TextLine.<init>(TextLine.java:110)
at java.awt.font.TextLine.fastCreateTextLine(TextLine.java:952)
at java.awt.font.TextLayout.fastInit(TextLayout.java:585)
at java.awt.font.TextLayout.<init>(TextLayout.java:374)
at sun.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:465)
at sun.swing.SwingUtilities2.stringWidth(SwingUtilities2.java:338)
at javax.swing.SwingUtilities.layoutCompoundLabelImpl(SwingUtilities.java:984)
at javax.swing.SwingUtilities.layoutCompoundLabel(SwingUtilities.java:870)
at javax.swing.plaf.basic.BasicLabelUI.layoutCL(BasicLabelUI.java:76)
at javax.swing.plaf.basic.BasicLabelUI.layout(BasicLabelUI.java:184)
at javax.swing.plaf.basic.BasicLabelUI.paint(BasicLabelUI.java:147)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:751)
at Bug72846$1.setText(Bug72846.java:18)
at Bug72846.test(Bug72846.java:24)
at Bug72846$2.run(Bug72846.java:32)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
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.Font;
import java.awt.image.BufferedImage;
import javax.swing.JLabel;
import org.junit.Test;
public class Bug72846 {
@Test
public void test() {
final BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
final JLabel jLabel = new JLabel() {
@Override
public void setText(final String text) {
super.setText(text);
paintComponent(image.getGraphics());
}
};
jLabel.setFont(Font.decode("Dialog"));
final char[] chars = Character.toChars(2375);
jLabel.setText(String.valueOf(chars));
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Code succeeds with 6u13, fails with 6u18
Additional report:
FULL PRODUCT VERSION :
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.0.6002] Japanese locale
A DESCRIPTION OF THE PROBLEM :
In Swing applications, NPE occurs at sun.font.PhysicalStrike.getGlyphPoint() method if a specific (unlikely) Unicode text is to be shown. Former Java SE 6 releases, at least 6u3, seem to be not affected.
Since somewhere between 6u3 and 6u12, Java_sun_font_TrueTypeFont_getGlyphPoint() defined in j2se\src\share\native\sun\font\scalerMethods.c was updeted to include a code path to return NULL, which is not expected by the caller, sun.font.PhysicalStrike.getGlyphPoint().
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached program on later versions of Java SE 6 runtime.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Do not die.
ACTUAL -
Dies with NPE.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:394)
at sun.font.PhysicalStrike.getGlyphPoint(PhysicalStrike.java:112)
at sun.font.SunLayoutEngine.nativeLayout(Native Method)
at sun.font.SunLayoutEngine.layout(SunLayoutEngine.java:133)
at sun.font.GlyphLayout$EngineRecord.layout(GlyphLayout.java:648)
at sun.font.GlyphLayout.layout(GlyphLayout.java:447)
at sun.font.ExtendedTextSourceLabel.createGV(ExtendedTextSourceLabel.java:308)
at sun.font.ExtendedTextSourceLabel.getGV(ExtendedTextSourceLabel.java:294)
at sun.font.ExtendedTextSourceLabel.createLogicalBounds(ExtendedTextSourceLabel.java:208)
at sun.font.ExtendedTextSourceLabel.getAdvance(ExtendedTextSourceLabel.java:117)
at java.awt.font.TextLine.init(TextLine.java:264)
at java.awt.font.TextLine.<init>(TextLine.java:110)
at java.awt.font.TextLine.fastCreateTextLine(TextLine.java:952)
at java.awt.font.TextLayout.fastInit(TextLayout.java:585)
at java.awt.font.TextLayout.<init>(TextLayout.java:374)
at sun.font.FontDesignMetrics.stringWidth(FontDesignMetrics.java:465)
at sun.swing.SwingUtilities2.stringWidth(SwingUtilities2.java:340)
at javax.swing.SwingUtilities.layoutCompoundLabelImpl(SwingUtilities.java:984)
at javax.swing.SwingUtilities.layoutCompoundLabel(SwingUtilities.java:870)
at javax.swing.plaf.basic.BasicLabelUI.layoutCL(BasicLabelUI.java:76)
at javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:221)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1634)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:702)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:907)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1636)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:702)
at java.awt.Container.preferredSize(Container.java:1599)
at java.awt.Container.getPreferredSize(Container.java:1584)
at java.awt.Window.pack(Window.java:706)
at SwingDeath.main(swingdeath.java:11)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javax.swing.*;
public class SwingDeath {
public static void main(String argv[])
{
String t = "\\U+0901-\u0901"; // ill Unicode text
JFrame frame = new JFrame("Swing Death");
final JLabel label = new JLabel(t);
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
// NOTREACHED
frame.setVisible(true);
}
}
---------- END SOURCE ----------
- duplicates
-
JDK-6990683 Font system needs to better handle NULL returns on error conditions
-
- Closed
-
- relates to
-
JDK-6921593 Chinese Font PMingLiu not rendered correctly
-
- Closed
-