Skip to content

Commit

Permalink
Make sure null elements aren't added to the stack
Browse files Browse the repository at this point in the history
Fixes #1579
  • Loading branch information
jhy committed Jul 11, 2021
1 parent 478b568 commit 9031164
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 3 deletions.
3 changes: 3 additions & 0 deletions CHANGES
Expand Up @@ -7,6 +7,9 @@ jsoup changelog
* Bugfix [Fuzz]: the adoption agency algorithm can have an incorrect bookmark position
<https://github.com/jhy/jsoup/issues/1576>

* Bugfiz [Fuzz]: malformed HTML could result in null elements on stack
<https://github.com/jhy/jsoup/issues/1579>

*** Release 1.14.1 [2021-Jul-10]
* Change: updated the minimum supported Java version from Java 7 to Java 8.

Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/jsoup/parser/HtmlTreeBuilder.java
Expand Up @@ -356,6 +356,7 @@ boolean removeFromStack(Element el) {
return false;
}

@Nullable
Element popStackToClose(String elName) {
for (int pos = stack.size() -1; pos >= 0; pos--) {
Element el = stack.get(pos);
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/org/jsoup/parser/HtmlTreeBuilderState.java
Expand Up @@ -8,7 +8,6 @@
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;

import javax.annotation.Nullable;
import java.util.ArrayList;

import static org.jsoup.internal.StringUtil.inSorted;
Expand Down Expand Up @@ -1530,8 +1529,11 @@ boolean process(Token t, HtmlTreeBuilder tb) {
// that space into body if other tags get re-added. but that's overkill for now
Element html = tb.popStackToClose("html");
tb.insert(t.asCharacter());
tb.stack.add(html);
tb.stack.add(html.selectFirst("body"));
if (html != null) {
tb.stack.add(html);
Element body = html.selectFirst("body");
if (body != null) tb.stack.add(body);
}
}else if (t.isEOF()) {
// nice work chuck
} else {
Expand Down
11 changes: 11 additions & 0 deletions src/test/java/org/jsoup/integration/FuzzFixesTest.java
Expand Up @@ -89,4 +89,15 @@ public void bookmark() {
Document xmlDoc = Parser.xmlParser().parseInput(html, "");
assertNotNull(xmlDoc);
}

@Test
public void scope1579() {
// https://github.com/jhy/jsoup/issues/1579
String html = "<table<html\u001D<ÛÛ<tr><body\u001D<b:<select<m<input></html> </html>";
Document doc = Jsoup.parse(html);
assertNotNull(doc);

Document xmlDoc = Parser.xmlParser().parseInput(html, "");
assertNotNull(xmlDoc);
}
}

0 comments on commit 9031164

Please sign in to comment.