aboutsummaryrefslogtreecommitdiffstats
path: root/modules/charset/escape.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/charset/escape.go')
-rw-r--r--modules/charset/escape.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/modules/charset/escape.go b/modules/charset/escape.go
index d2e8fb0d87..20a4bb2a10 100644
--- a/modules/charset/escape.go
+++ b/modules/charset/escape.go
@@ -63,6 +63,7 @@ func EscapeControlBytes(text []byte) (EscapeStatus, []byte) {
func EscapeControlReader(text io.Reader, output io.Writer) (escaped EscapeStatus, err error) {
buf := make([]byte, 4096)
readStart := 0
+ runeCount := 0
var n int
var writePos int
@@ -79,6 +80,8 @@ readingloop:
for i < len(bs) {
r, size := utf8.DecodeRune(bs[i:])
+ runeCount++
+
// Now handle the codepoints
switch {
case r == utf8.RuneError:
@@ -113,6 +116,8 @@ readingloop:
lineHasRTLScript = false
lineHasLTRScript = false
+ case runeCount == 1 && r == 0xFEFF: // UTF BOM
+ // the first BOM is safe
case r == '\r' || r == '\t' || r == ' ':
// These are acceptable control characters and space characters
case unicode.IsSpace(r):