-
Bug
-
Resolution: Unresolved
-
P4
-
None
-
5.0
-
x86
-
windows_xp
FULL PRODUCT VERSION :
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
During a routine parse, the javax.swing.text.html.parser.Parser enters an infinite recursion loop resulting in a StackOverflowError. The apparent source of the problem is the following method in this class:
[code]
boolean legalElementContext(Element elem) throws ChangedCharSetException {
// System.out.println("-- legalContext -- " + elem);
// Deal with the empty stack
if (stack == null) {
// System.out.println("-- stack is empty");
if (elem != dtd.html) {
// System.out.println("-- pushing html");
startTag(makeTag(dtd.html, true));
return legalElementContext(elem); // <--- Infinite Recursion Here
}
return true;
}
[/code]
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful parse
ACTUAL -
Infinite recursion loop, resulting in total JVM crash
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Throwable.printStackTrace(Throwable.java:461)
at java.lang.Throwable.printStackTrace(Throwable.java:452)
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:618)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
...
etc
REPRODUCIBILITY :
This bug can be reproduced always.
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
During a routine parse, the javax.swing.text.html.parser.Parser enters an infinite recursion loop resulting in a StackOverflowError. The apparent source of the problem is the following method in this class:
[code]
boolean legalElementContext(Element elem) throws ChangedCharSetException {
// System.out.println("-- legalContext -- " + elem);
// Deal with the empty stack
if (stack == null) {
// System.out.println("-- stack is empty");
if (elem != dtd.html) {
// System.out.println("-- pushing html");
startTag(makeTag(dtd.html, true));
return legalElementContext(elem); // <--- Infinite Recursion Here
}
return true;
}
[/code]
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Successful parse
ACTUAL -
Infinite recursion loop, resulting in total JVM crash
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Throwable.printStackTrace(Throwable.java:461)
at java.lang.Throwable.printStackTrace(Throwable.java:452)
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:618)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:622)
at javax.swing.text.html.parser.Parser.legalElementContext(Parser.java:684)
...
etc
REPRODUCIBILITY :
This bug can be reproduced always.