mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-25 21:39:25 +01:00
more systematic bad-character check in permissive mode
This commit is contained in:
parent
2d4dbeba1c
commit
781bb6b051
@ -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)
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user