Skip to content

Commit 021eae9

Browse files
committed
Update
1 parent 8ecf283 commit 021eae9

1 file changed

Lines changed: 28 additions & 8 deletions

File tree

app/src/main/java/com/omarea/krscript/config/PageConfigReader.kt

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,34 @@ class PageConfigReader {
6262
}
6363

6464
private fun sanitizeXmlContent(raw: String): String {
65-
return raw
66-
.replace("&", "&")
67-
.replace("<", "&lt;")
68-
.replace(">", "&gt;")
69-
.replace("\"", "&quot;")
70-
.replace("'", "&apos;")
71-
.replace("§", "&#xA;")
72-
.replace(Regex("[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]"), "")
65+
var result = raw
66+
67+
// 1. Loại bỏ các ký tự không hợp lệ trong XML 1.0
68+
// Giữ lại: TAB (\u0009), LF (\u000A), CR (\u000D)
69+
result = result.replace(
70+
Regex("[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\uD800-\\uDFFF\\uFFFE\\uFFFF]"),
71+
""
72+
)
73+
74+
// 2. Escape '&' nếu chưa phải entity hợp lệ
75+
result = result.replace(
76+
Regex("&(?!(?:amp|lt|gt|quot|apos|#[0-9]+|#x[0-9A-Fa-f]+);)"),
77+
"&amp;"
78+
)
79+
80+
// 3. Escape '<' nếu không phải mở đầu markup XML hợp lệ
81+
result = result.replace(
82+
Regex("<(?!/?[A-Za-z_]|!|\\?)"),
83+
"&lt;"
84+
)
85+
86+
// 4. Escape '>' chỉ khi tạo thành "]]>" ngoài CDATA
87+
result = result.replace("]]>", "]]&gt;")
88+
89+
// 5. Quy ước xuống dòng
90+
result = result.replace("§", "&#xA;")
91+
92+
return result
7393
}
7494

7595
constructor(context: Context, pageConfig: String, parentDir: String?) {

0 commit comments

Comments
 (0)