<Swing Dev> OOM error parsing HTML with large <pre> Tag text
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Mon Mar 16 17:29:12 UTC 2020
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.
More information about the swing-dev
mailing list