From 5fc55b398062f9f849c1a3e6ab8508c7ea08630a Mon Sep 17 00:00:00 2001
From: erkas <erkasraim@gmail.com>
Date: Tue, 25 Mar 2025 10:58:51 +0900
Subject: [PATCH 1/3] Modified XmlParser to correctly parse CDATA.

---
 .../org/readium/r2/shared/util/xml/XmlParser.kt   |  4 +++-
 .../readium/r2/shared/util/xml/XmlParserTest.kt   | 15 +++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
index 2873222b25..6665c802a6 100644
--- a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
+++ b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
@@ -64,7 +64,9 @@ public class XmlParser(
                     val element = buildElement(attributes, children, lang)
                     stack.peek().first.add(element)
                 }
-                XmlPullParser.TEXT, XmlPullParser.ENTITY_REF -> {
+                XmlPullParser.CDSECT,
+                XmlPullParser.TEXT,
+                XmlPullParser.ENTITY_REF -> {
                     text += parser.text
                 }
             }
diff --git a/readium/shared/src/test/java/org/readium/r2/shared/util/xml/XmlParserTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/util/xml/XmlParserTest.kt
index e18c6b9d31..1611509fad 100644
--- a/readium/shared/src/test/java/org/readium/r2/shared/util/xml/XmlParserTest.kt
+++ b/readium/shared/src/test/java/org/readium/r2/shared/util/xml/XmlParserTest.kt
@@ -209,6 +209,21 @@ class XmlParserTest {
     fun `An input with no root raises an exception`() {
         parseXmlString("   \n    \n")
     }
+
+    @Test
+    fun `CDATA parsed rightly`() {
+        val doc = parseXmlString(
+            """
+            <text>
+                pre text <![CDATA["Some text like <, >, & are safe here"]]> post text
+            </text>
+            """.trimIndent()
+        )
+
+        val cdata = doc.children.first() as TextNode
+
+        assertEquals("pre text \"Some text like <, >, & are safe here\" post text", cdata.text.trim())
+    }
 }
 
 @RunWith(RobolectricTestRunner::class)

From bf7d68625178b339239ccf0466e16624b2222f12 Mon Sep 17 00:00:00 2001
From: erkas <erkasraim@gmail.com>
Date: Tue, 25 Mar 2025 15:16:55 +0900
Subject: [PATCH 2/3] lint error fixed

---
 .../src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
index 6665c802a6..f7a5c99edf 100644
--- a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
+++ b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
@@ -66,7 +66,7 @@ public class XmlParser(
                 }
                 XmlPullParser.CDSECT,
                 XmlPullParser.TEXT,
-                XmlPullParser.ENTITY_REF -> {
+                XmlPullParser.ENTITY_REF, -> {
                     text += parser.text
                 }
             }

From 9c92e94e44a6a217fd220bb2ef82d64993b1080a Mon Sep 17 00:00:00 2001
From: Quentin Gliosca <quentin.gliosca@gmail.com>
Date: Tue, 25 Mar 2025 10:27:56 +0100
Subject: [PATCH 3/3] Lint

---
 .../src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
index f7a5c99edf..28566cd26e 100644
--- a/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
+++ b/readium/shared/src/main/java/org/readium/r2/shared/util/xml/XmlParser.kt
@@ -66,7 +66,8 @@ public class XmlParser(
                 }
                 XmlPullParser.CDSECT,
                 XmlPullParser.TEXT,
-                XmlPullParser.ENTITY_REF, -> {
+                XmlPullParser.ENTITY_REF,
+                -> {
                     text += parser.text
                 }
             }