3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-10 22:19:31 +01:00

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 (
"fmt"
"regexp"
"strings"
"unicode"
@ -21,6 +22,12 @@ const (
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
const (
@ -271,11 +278,9 @@ func IsPureASCII(str string) bool {
}
func foldPermissive(str string) (result string, err error) {
for _, r := range str {
if unicode.IsSpace(r) || r == 0 {
if !permissiveCharsRegex.MatchString(str) {
return "", errInvalidCharacter
}
}
// YOLO
str = norm.NFD.String(str)
str = cases.Fold().String(str)

View File

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