Skip to content

Commit f4fb1ab

Browse files
authored
Handle CDATA apostraphes (#1617)
1 parent 4bb7313 commit f4fb1ab

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

capy/src/main/java/com/jocmp/capy/accounts/local/ParsedItem.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.jocmp.capy.common.optionalURL
55
import com.jocmp.capy.common.unescapingHTMLCharacters
66
import com.jocmp.rssparser.model.RssItem
77
import org.jsoup.Jsoup
8+
import org.jsoup.parser.Parser
89
import org.jsoup.safety.Cleaner
910
import org.jsoup.safety.Safelist
1011
import java.net.URI
@@ -74,8 +75,16 @@ internal class ParsedItem(private val item: RssItem, private val siteURL: String
7475
val title: String
7576
get() {
7677
val cleaner = Cleaner(Safelist.none())
78+
val itemTitle = item.title.orEmpty()
7779

78-
return cleaner.clean(Jsoup.parse(item.title.orEmpty())).text()
80+
val parsedTitle = if (itemTitle.contains("<![CDATA[")) {
81+
val xmlDoc = Jsoup.parse("<root>$itemTitle</root>", "", Parser.xmlParser())
82+
xmlDoc.text()
83+
} else {
84+
itemTitle
85+
}
86+
87+
return cleaner.clean(Jsoup.parse(parsedTitle)).text()
7988
}
8089

8190
val imageURL: String?

capy/src/test/java/com/jocmp/capy/accounts/local/ParsedItemTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,24 @@ class ParsedItemTest {
5353
)
5454
}
5555

56+
@Test
57+
fun title_withNumericHtmlEntity() {
58+
val title = "It&#x27;s FOSS"
59+
val item = RssItem.Builder().title(title).build()
60+
val parsedItem = ParsedItem(item, siteURL = "")
61+
62+
assertEquals(expected = "It's FOSS", actual = parsedItem.title)
63+
}
64+
65+
@Test
66+
fun title_withNumericHtmlEntityInCDATA() {
67+
val title = "<![CDATA[ It&#x27;s FOSS ]]>"
68+
val item = RssItem.Builder().title(title).build()
69+
val parsedItem = ParsedItem(item, siteURL = "")
70+
71+
assertEquals(expected = "It's FOSS", actual = parsedItem.title)
72+
}
73+
5674
@Test
5775
fun title_whenNull() {
5876
val item = RssItem.Builder().title(null).build()

0 commit comments

Comments
 (0)