From b19d83ff28fd0fa6d5a0e78750683d2767ce247b Mon Sep 17 00:00:00 2001 From: Jonathan Hedley Date: Mon, 1 Feb 2010 22:09:32 +1100 Subject: [PATCH] Parse unknown tags as inline elements that can contain blocks. Ensures

Test

parses like that, and not

Test. Closes #1 --- src/main/java/org/jsoup/parser/Tag.java | 4 +++- src/test/java/org/jsoup/org/jsoup/safety/CleanerTest.java | 6 ++++++ src/test/java/org/jsoup/parser/ParserTest.java | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jsoup/parser/Tag.java b/src/main/java/org/jsoup/parser/Tag.java index a2646bc727..d5c210d114 100644 --- a/src/main/java/org/jsoup/parser/Tag.java +++ b/src/main/java/org/jsoup/parser/Tag.java @@ -49,9 +49,11 @@ public static Tag valueOf(String tagName) { synchronized (tags) { Tag tag = tags.get(tagName); if (tag == null) { - // not defined: create default + // not defined: create default; go anywhere, do anything! (incl be inside a

) tag = new Tag(tagName); tag.setAncestor(defaultAncestor.tagName); + tag.isBlock = false; + tag.canContainBlock = true; } return tag; } diff --git a/src/test/java/org/jsoup/org/jsoup/safety/CleanerTest.java b/src/test/java/org/jsoup/org/jsoup/safety/CleanerTest.java index f72ff9cefc..ec0ffe05b5 100644 --- a/src/test/java/org/jsoup/org/jsoup/safety/CleanerTest.java +++ b/src/test/java/org/jsoup/org/jsoup/safety/CleanerTest.java @@ -74,4 +74,10 @@ public class CleanerTest { String cleanHtml = Jsoup.clean(h, Whitelist.relaxed()); assertEquals("XSS", cleanHtml); } + + @Test public void testDropsUnknownTags() { + String h = "

Test

"; + String cleanHtml = Jsoup.clean(h, Whitelist.relaxed()); + assertEquals("

Test

", cleanHtml); + } } diff --git a/src/test/java/org/jsoup/parser/ParserTest.java b/src/test/java/org/jsoup/parser/ParserTest.java index a8687342df..abf389e7b9 100644 --- a/src/test/java/org/jsoup/parser/ParserTest.java +++ b/src/test/java/org/jsoup/parser/ParserTest.java @@ -187,6 +187,13 @@ public class ParserTest { assertEquals("qux", foos.last().attr("title")); assertEquals("there", foos.last().text()); } + + @Test public void handlesUnknownInlineTags() { + String h = "

Test

Test

"; + Document doc = Jsoup.parseBodyFragment(h); + String out = doc.body().html(); + assertEquals(h, TextUtil.stripNewlines(out)); + } @Test public void handlesEmptyBlocks() { String h = "
";