-
Bug
-
Resolution: Fixed
-
P4
-
1.4.2
-
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
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