more systematic bad-character check in permissive mode

This commit is contained in:
Shivaram Lingamneni 2019-12-22 09:31:51 -05:00
parent 2d4dbeba1c
commit 781bb6b051
2 changed files with 10 additions and 4 deletions

View File

@ -7,6 +7,7 @@ package irc
import ( import (
"fmt" "fmt"
"regexp"
"strings" "strings"
"unicode" "unicode"
@ -21,6 +22,12 @@ const (
precisUTF8MappingToken = "rfc8265" precisUTF8MappingToken = "rfc8265"
) )
var (
// reviving the old ergonomadic nickname regex:
// in permissive mode, allow arbitrary letters, numbers, punctuation, and symbols
permissiveCharsRegex = regexp.MustCompile(`^[\pL\pN\pP\pS]*$`)
)
type Casemapping uint type Casemapping uint
const ( const (
@ -271,10 +278,8 @@ func IsPureASCII(str string) bool {
} }
func foldPermissive(str string) (result string, err error) { func foldPermissive(str string) (result string, err error) {
for _, r := range str { if !permissiveCharsRegex.MatchString(str) {
if unicode.IsSpace(r) || r == 0 { return "", errInvalidCharacter
return "", errInvalidCharacter
}
} }
// YOLO // YOLO
str = norm.NFD.String(str) str = norm.NFD.String(str)

View File

@ -237,6 +237,7 @@ func TestFoldPermissive(t *testing.T) {
tester("shivaram", "DAN-", false) tester("shivaram", "DAN-", false)
tester("dolph🐬n", "DOLPH🐬n", true) tester("dolph🐬n", "DOLPH🐬n", true)
tester("dolph🐬n", "dolph💻n", false) tester("dolph🐬n", "dolph💻n", false)
tester("9FRONT", "9front", true)
} }
func TestFoldPermissiveInvalid(t *testing.T) { func TestFoldPermissiveInvalid(t *testing.T) {