Hi, Kenny.

Thank you for your report, can you please file the bug here:
https://bugs.java.com/bugdatabase

On 3/16/20 10:08 am, Kenny Wong wrote:
Hello,

After upgrading from Java 8 to 11, we started seeing OOM errors when parsing HTML files 
with a large <pre> tag text. The test program below works fine under Java 8, but 
terminates with an OutOfMemoryError under Java 9 or later. If the <pre> tag text is 
*not* '\n' separated, it works in all versions of Java.

We have tracked down the problem to a change originally committed to Java 9:
https://github.com/openjdk/jdk/commit/17679435a174f6a7f0e450309dc8775e77df968a

Reverting the above change or replacing `Arrays.copyOf(txt, txt.length)` with 
`Arrays.copyOfRange(txt, offs, offs + length)` fixes the OOM error.

Thank you,
Kenny Wong

--- 8< ---
import java.io.StringReader;

import javax.swing.text.html.HTMLEditorKit;

public class Test {
     public static void main(String[] args) throws Exception {
         StringBuilder html = new StringBuilder();
         html.append("<html><body><pre>");
         for (int i = 0; i < 10_000; i++) {
             
html.append("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
                 .append("\n");
         }
         html.append("</pre></body></html>");

         HTMLEditorKit kit = new HTMLEditorKit();
         kit.read(new StringReader(html.toString()), 
kit.createDefaultDocument(), 0);
     }
}
--

--- 8< ---
$ java --version
openjdk 11.0.3 2019-04-16 LTS
OpenJDK Runtime Environment Zulu11.31+11-CA (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Zulu11.31+11-CA (build 11.0.3+7-LTS, mixed mode)

-bash3.2$ java Test.java
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
     at java.base/java.util.Arrays.copyOf(Arrays.java:3841)
     at 
java.desktop/javax.swing.text.DefaultStyledDocument$ElementSpec.<init>(DefaultStyledDocument.java:1267)
     at 
java.desktop/javax.swing.text.html.HTMLDocument$HTMLReader.addContent(HTMLDocument.java:3909)
     at 
java.desktop/javax.swing.text.html.HTMLDocument$HTMLReader.addContent(HTMLDocument.java:3883)
     at 
java.desktop/javax.swing.text.html.HTMLDocument$HTMLReader.preContent(HTMLDocument.java:3787)
     at 
java.desktop/javax.swing.text.html.HTMLDocument$HTMLReader.handleText(HTMLDocument.java:2766)
     at 
java.desktop/javax.swing.text.html.parser.DocumentParser.handleText(DocumentParser.java:271)
     at 
java.desktop/javax.swing.text.html.parser.Parser.handleText(Parser.java:409)
     at java.desktop/javax.swing.text.html.parser.Parser.endTag(Parser.java:524)
     at 
java.desktop/javax.swing.text.html.parser.Parser.parseTag(Parser.java:1934)
     at 
java.desktop/javax.swing.text.html.parser.Parser.parseContent(Parser.java:2195)
     at java.desktop/javax.swing.text.html.parser.Parser.parse(Parser.java:2372)
     at 
java.desktop/javax.swing.text.html.parser.DocumentParser.parse(DocumentParser.java:135)
     at 
java.desktop/javax.swing.text.html.parser.ParserDelegator.parse(ParserDelegator.java:113)
     at 
java.desktop/javax.swing.text.html.HTMLEditorKit.read(HTMLEditorKit.java:263)
     at Test.main(Test.java:16)
---




--
Best regards, Sergey.

Reply via email to