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

The HTML parser throws a StackOverflowError when it encounters an OPTION tag

XMLWordPrintable

    • b11
    • x86
    • linux

      FULL PRODUCT VERSION :
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)


      ADDITIONAL OS VERSION INFORMATION :
      Linux lumberjack 2.4.18-18.7.x #1 Wed Nov 13 20:29:30 EST 2002 i686 unknown


      A DESCRIPTION OF THE PROBLEM :
      The HTML parser in the HTMLEditorKit goes into an infinite recursion when it encounters an OPTION tag inside a SELECT.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Compile the program below, and run against the following data file

      javac Bug.java
      java Bug fail.html

      --- begin fail.html ---
      <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head><title>Update Spies!</title>
      </head><body bgcolor="#FFFFFF"><H1>Update Spies!</H1>
      <form method="post" action="/cgi-bin/game.cgi?id=34" enctype="application/x-www-form-urlencoded">
      <TABLE><TR><TH>User Name:</TH><TD><INPUT TYPE="text" NAME="username"></TD></TR>
      <TR><TH>Password:</TH><TD><INPUT TYPE="password" NAME="password"></TD></TR>
      <TR><TH>Name:</TH><TD><INPUT TYPE="text" NAME="name" VALUE="Spies!" MAXLENGTH=50></TD></TR>
      <TR><TH>Description:</TH><TD><INPUT TYPE="text" NAME="desc" VALUE="" MAXLENGTH=250></TD></TR>
      <TR><TH>Company:</TH><TD><SELECT NAME="company"> <OPTION VALUE="31">4-Player Chess</OPTION>
          <OPTION VALUE="1"><unknown></OPTION>
          <OPTION VALUE="2">Avalon Hill</OPTION>
          <OPTION VALUE="3">Chaosium Inc.</OPTION>
          <OPTION VALUE="27">Classic Game</OPTION>
          <OPTION VALUE="4">Engleman Military Simulations</OPTION>
          <OPTION VALUE="5">Eon Products</OPTION>
          <OPTION VALUE="6">Family Games Inc.</OPTION>
          <OPTION VALUE="30">FASA</OPTION>
          <OPTION VALUE="28">FASA Corporation</OPTION>
          <OPTION VALUE="7">Flying Buffalo</OPTION>
          <OPTION VALUE="8">Game Designers Workshop</OPTION>
          <OPTION VALUE="9">Games Workshop</OPTION>
          <OPTION VALUE="10">Hasbro</OPTION>
          <OPTION VALUE="29">Hero Games</OPTION>
          <OPTION VALUE="11">I.C.E.</OPTION>
          <OPTION VALUE="12">Mayfair Games</OPTION>
          <OPTION VALUE="23">Milton Bradley</OPTION>
          <OPTION VALUE="24">Monash Games</OPTION>
          <OPTION VALUE="25">Nova</OPTION>
          <OPTION VALUE="26">Parker Brothers</OPTION>
          <OPTION VALUE="13">Reiss</OPTION>
          <OPTION VALUE="14">SPI</OPTION>
          <OPTION VALUE="15">Steve Jackson Games</OPTION>
          <OPTION VALUE="16">Supremacy Games</OPTION>
          <OPTION VALUE="17">Task Force Games</OPTION>
          <OPTION VALUE="18">The Emperor's Pass</OPTION>
          <OPTION VALUE="19" SELECTED>TSR</OPTION>
          <OPTION VALUE="20">Victory Games</OPTION>
          <OPTION VALUE="21">West End Games</OPTION>
          <OPTION VALUE="22">Wizards of the Coast</OPTION>
      </SELECT></TD></TR>
      <TR><TH>Min Players:</TH><TD><INPUT TYPE="text" NAME="minplayers" VALUE="2" MAXLENGTH=2></TD></TR>
      <TR><TH>Max Players:</TH><TD><INPUT TYPE="text" NAME="maxplayers" VALUE="5" MAXLENGTH=2></TD></TR>
      <TR><TH>Min Time:</TH><TD><INPUT TYPE="text" NAME="mintime" VALUE="2.00" MAXLENGTH=5></TD></TR>
      <TR><TH>Max Time:</TH><TD><INPUT TYPE="text" NAME="maxtime" VALUE="3.00" MAXLENGTH=5></TD></TR>
      <TR><TH>Image URL:</TH><TD><INPUT TYPE="text" NAME="imageurl" VALUE="" MAXLENGTH=50></TD></TR>
      <TR><TH>Game Type:</TH><TD><SELECT NAME="type">
      <OPTION VALUE=""></OPTION>
      <OPTION VALUE="WGM" >War Game</OPTION>
      <OPTION VALUE="CRD" >Card Game</OPTION>
      <OPTION VALUE="MNI" >Miniatures Game</OPTION>
      <OPTION VALUE="BRD" SELECTED >Board Game</OPTION>
      <OPTION VALUE="RPG" >Role-Playing Game</OPTION>
      <OPTION VALUE="LVA" >Live-Action RPG</OPTION>
      <OPTION VALUE="PUZ" >Puzzle</OPTION>
      <OPTION VALUE="NET" >Net Game</OPTION>
      </SELECT></TD></TR>
      </TABLE><INPUT TYPE="submit" NAME="update" VALUE="Update Spies!"><INPUT TYPE="hidden" NAME="id" VALUE="34"></form>
      </body></html>
      --- end fail.html ---


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The program should print each tag as it encounters it.

      ACTUAL -
      When it hits the OPTION tag, it recursively re-invokes itself on the same tag.

      [html]
      [head]
      [title]
      [body]
      [h1]
      [form]
      [table]
      [tr]
      [th]
      [td]
      [tr]
      [th]
      [td]
      [tr]
      [th]
      [td]
      [tr]
      [th]
      [td]
      [tr]
      [th]
      [td]
      [select]
      [option]
      [option]
        ...
        ...
      [option]
      [option]Exception in thread "main" java.lang.StackOverflowError
              at java.nio.Buffer.<init>(Buffer.java:176)
              at java.nio.CharBuffer.<init>(CharBuffer.java:259)
              at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:52)
              at java.nio.CharBuffer.wrap(CharBuffer.java:350)
              at sun.nio.cs.StreamEncoder$CharsetSE.implWrite(StreamEncoder.java:378)
              at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
              at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
              at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
              at java.io.PrintStream.write(PrintStream.java:458)
              at java.io.PrintStream.print(PrintStream.java:602)
              at java.io.PrintStream.println(PrintStream.java:739)
              at Bug$TesterCallback.handleStartTag(Bug.java:15)
              at javax.swing.text.html.parser.DocumentParser.handleStartTag(DocumentParser.java:140)
              at javax.swing.text.html.parser.Parser.startTag(Parser.java:417)
              at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:617)
              at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:683)
              at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:621)
              at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:683)
              at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:621)


      ERROR MESSAGES/STACK TRACES THAT OCCUR :

      Exception in thread "main" [option]java.lang.StackOverflowError


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.util.*;
      import java.text.*;
      import java.io.*;
      import javax.swing.text.*;
      import javax.swing.text.html.*;
      import javax.swing.text.html.parser.*;

      public class Bug {

        static class TesterCallback extends HTMLEditorKit.ParserCallback {
            

          public void handleStartTag(HTML.Tag t, MutableAttributeSet attrib, int pos) {

              System.err.println("[" + t + "]");
          }
        }


        public Bug() {
        }

        public boolean test(Reader r, boolean verbose) {
          TesterCallback tcb = new TesterCallback();
          try {
            (new ParserDelegator()).parse(r, tcb, true);
          } catch (Exception e) {
            // ignore
          }

          return true;
        }

        public boolean test(Reader r) {
          return test(r, false);
        }

        public boolean test(String s) {
          return test(new StringReader(s));
        }

        public static void main(String[] args) throws Exception {
          Bug tester = new Bug();
          for (int i = 0; i < args.length; i++) {
            boolean result = tester.test(new FileReader(args[i]), true);
            System.out.print(args[i] + " : " + result);
            System.out.println();
          }
        }

      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      None so far. Continuing to investigate.
      ###@###.### 10/15/04 07:41 GMT

            peterz Peter Zhelezniakov
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: