-
Bug
-
Resolution: Fixed
-
P3
-
8, 9, 12.0.1, 13
-
b06
-
x86
-
os_x
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8350867 | 17.0.16-oracle | Alexey Ivanov | P3 | Resolved | Fixed | master |
JDK-8350868 | 11.0.28-oracle | Alexey Ivanov | P3 | Resolved | Fixed | master |
JDK-8350963 | 8u461 | Alexey Ivanov | P3 | Resolved | Fixed | master |
ADDITIONAL SYSTEM INFORMATION :
scrappy:Documents jimdouglas$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.4
BuildVersion: 18E226
scrappy:Documents jimdouglas$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
scrappy:Documents jimdouglas$
A DESCRIPTION OF THE PROBLEM :
BasicOptionPaneUI.addMessageComponents() uses recursion to split message strings at newlines, generating a StackOverflowError when the message string contains an unusually large number of newlines (approximately 5000+).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
scrappy:Documents jimdouglas$ cat OptionPane.java
public class OptionPane
{
public static void main(String[] argv) throws Exception
{
String message = java.nio.CharBuffer.allocate(5000).toString().replace('\0','\n');
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}
scrappy:Documents jimdouglas$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
scrappy:Documents jimdouglas$ javac OptionPane.java
scrappy:Documents jimdouglas$ java OptionPane
Exception in thread "main" java.lang.StackOverflowError
at java.awt.Component.setBackground(Component.java:1835)
at javax.swing.JComponent.setBackground(JComponent.java:2733)
at javax.swing.LookAndFeel.installColors(LookAndFeel.java:175)
at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:211)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
at javax.swing.JComponent.setUI(JComponent.java:666)
at javax.swing.JPanel.setUI(JPanel.java:153)
at javax.swing.JPanel.updateUI(JPanel.java:126)
at javax.swing.JPanel.<init>(JPanel.java:86)
at javax.swing.JPanel.<init>(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:117)
at javax.swing.plaf.basic.BasicOptionPaneUI$1.<init>(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
,,,etc.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Show a JOptionPane with the specified message.
ACTUAL -
Exception in thread "main" java.lang.StackOverflowError
at java.awt.Component.setBackground(Component.java:1835)
at javax.swing.JComponent.setBackground(JComponent.java:2733)
at javax.swing.LookAndFeel.installColors(LookAndFeel.java:175)
at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:211)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
at javax.swing.JComponent.setUI(JComponent.java:666)
at javax.swing.JPanel.setUI(JPanel.java:153)
at javax.swing.JPanel.updateUI(JPanel.java:126)
at javax.swing.JPanel.<init>(JPanel.java:86)
at javax.swing.JPanel.<init>(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:117)
at javax.swing.plaf.basic.BasicOptionPaneUI$1.<init>(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
,,,etc.
---------- BEGIN SOURCE ----------
public class OptionPane
{
public static void main(String[] argv) throws Exception
{
String message = java.nio.CharBuffer.allocate(5000).toString().replace('\0','\n');
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Avoid message text with a large number of newlines.
FREQUENCY : always
scrappy:Documents jimdouglas$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.4
BuildVersion: 18E226
scrappy:Documents jimdouglas$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
scrappy:Documents jimdouglas$
A DESCRIPTION OF THE PROBLEM :
BasicOptionPaneUI.addMessageComponents() uses recursion to split message strings at newlines, generating a StackOverflowError when the message string contains an unusually large number of newlines (approximately 5000+).
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
scrappy:Documents jimdouglas$ cat OptionPane.java
public class OptionPane
{
public static void main(String[] argv) throws Exception
{
String message = java.nio.CharBuffer.allocate(5000).toString().replace('\0','\n');
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}
scrappy:Documents jimdouglas$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
scrappy:Documents jimdouglas$ javac OptionPane.java
scrappy:Documents jimdouglas$ java OptionPane
Exception in thread "main" java.lang.StackOverflowError
at java.awt.Component.setBackground(Component.java:1835)
at javax.swing.JComponent.setBackground(JComponent.java:2733)
at javax.swing.LookAndFeel.installColors(LookAndFeel.java:175)
at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:211)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
at javax.swing.JComponent.setUI(JComponent.java:666)
at javax.swing.JPanel.setUI(JPanel.java:153)
at javax.swing.JPanel.updateUI(JPanel.java:126)
at javax.swing.JPanel.<init>(JPanel.java:86)
at javax.swing.JPanel.<init>(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:117)
at javax.swing.plaf.basic.BasicOptionPaneUI$1.<init>(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
,,,etc.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Show a JOptionPane with the specified message.
ACTUAL -
Exception in thread "main" java.lang.StackOverflowError
at java.awt.Component.setBackground(Component.java:1835)
at javax.swing.JComponent.setBackground(JComponent.java:2733)
at javax.swing.LookAndFeel.installColors(LookAndFeel.java:175)
at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:211)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:66)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:56)
at javax.swing.JComponent.setUI(JComponent.java:666)
at javax.swing.JPanel.setUI(JPanel.java:153)
at javax.swing.JPanel.updateUI(JPanel.java:126)
at javax.swing.JPanel.<init>(JPanel.java:86)
at javax.swing.JPanel.<init>(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:117)
at javax.swing.plaf.basic.BasicOptionPaneUI$1.<init>(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:397)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
at javax.swing.plaf.basic.BasicOptionPaneUI.addMessageComponents(BasicOptionPaneUI.java:414)
,,,etc.
---------- BEGIN SOURCE ----------
public class OptionPane
{
public static void main(String[] argv) throws Exception
{
String message = java.nio.CharBuffer.allocate(5000).toString().replace('\0','\n');
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Avoid message text with a large number of newlines.
FREQUENCY : always
- backported by
-
JDK-8350867 JOptionPane message string with 5000+ newlines produces StackOverflowError
-
- Resolved
-
-
JDK-8350868 JOptionPane message string with 5000+ newlines produces StackOverflowError
-
- Resolved
-
-
JDK-8350963 JOptionPane message string with 5000+ newlines produces StackOverflowError
-
- Resolved
-
- causes
-
JDK-8290162 Reset recursion counter missed in fix of JDK-8224267
-
- Resolved
-
(1 links to)