Skip to content

Commit 5fc7a1b

Browse files
authored
Merge pull request #171 from ashawley/cdata-quoting
Split CDATA containing closing triad ]]>
2 parents b7fcbeb + bcde63a commit 5fc7a1b

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

shared/src/main/scala/scala/xml/PCData.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class PCData(data: String) extends Atom[String](data) {
2626
* @return the input string buffer with the formatted CDATA section
2727
*/
2828
override def buildString(sb: StringBuilder): StringBuilder =
29-
sb append "<![CDATA[%s]]>".format(data)
29+
sb append "<![CDATA[%s]]>".format(data.replaceAll("]]>", "]]]]><![CDATA[>"))
3030
}
3131

3232
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package scala.xml
2+
3+
import org.junit.Test
4+
import org.junit.Assert.assertEquals
5+
6+
class PCDataTest {
7+
8+
@Test
9+
def emptyTest = {
10+
val pcdata = new PCData("")
11+
assertEquals("<![CDATA[]]>", pcdata.toString)
12+
}
13+
14+
@Test
15+
def bracketTest = {
16+
val pcdata = new PCData("[]")
17+
assertEquals("<![CDATA[[]]]>", pcdata.toString)
18+
}
19+
20+
@Test
21+
def hellaBracketingTest = {
22+
val pcdata = new PCData("[[[[[[[[]]]]]]]]")
23+
assertEquals("<![CDATA[[[[[[[[[]]]]]]]]]]>", pcdata.toString)
24+
}
25+
26+
@Test
27+
def simpleNestingTest = {
28+
val pcdata = new PCData("]]>")
29+
assertEquals("<![CDATA[]]]]><![CDATA[>]]>", pcdata.toString)
30+
}
31+
32+
@Test
33+
def recursiveNestingTest = {
34+
val pcdata = new PCData("<![CDATA[]]>")
35+
assertEquals("<![CDATA[<![CDATA[]]]]><![CDATA[>]]>", pcdata.toString)
36+
}
37+
}

0 commit comments

Comments
 (0)