diff options
Diffstat (limited to 'modules/charset/escape.go')
-rw-r--r-- | modules/charset/escape.go | 5 |
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): |