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

JOptionPane message string with 5000+ newlines produces StackOverflowError

XMLWordPrintable

    • b06
    • x86
    • os_x

        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


              psadhukhan Prasanta Sadhukhan
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: