3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-22 18:52:41 +01:00

Merge pull request #562 from slingamn/impersonation

fix an edge case in skeletonization
This commit is contained in:
Daniel Oaks 2019-06-18 17:28:35 +10:00 committed by GitHub
commit 0a67963f43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 4 deletions

View File

@ -163,15 +163,15 @@ func isIdent(name string) bool {
// from the original (unfolded) identifier and stored/tracked separately from the // from the original (unfolded) identifier and stored/tracked separately from the
// casefolded identifier. // casefolded identifier.
func Skeleton(name string) (string, error) { func Skeleton(name string) (string, error) {
if !isBoring(name) {
name = confusables.Skeleton(name)
}
// XXX the confusables table includes some, but not all, fullwidth->standard // XXX the confusables table includes some, but not all, fullwidth->standard
// mappings for latin characters. do a pass of explicit width folding, // mappings for latin characters. do a pass of explicit width folding,
// same as PRECIS: // same as PRECIS:
name = width.Fold.String(name) name = width.Fold.String(name)
if !isBoring(name) {
name = confusables.Skeleton(name)
}
// internationalized lowercasing for skeletons; this is much more lenient than // internationalized lowercasing for skeletons; this is much more lenient than
// Casefold. In particular, skeletons are expected to mix scripts (which may // Casefold. In particular, skeletons are expected to mix scripts (which may
// violate the bidi rule). We also don't care if they contain runes // violate the bidi rule). We also don't care if they contain runes

View File

@ -181,6 +181,10 @@ func TestSkeleton(t *testing.T) {
t.Errorf("after skeletonizing, we should casefold") t.Errorf("after skeletonizing, we should casefold")
} }
if skeleton("sm") != "smt" {
t.Errorf("our friend lover successfully tricked the skeleton algorithm!")
}
if skeleton("еvan") != "evan" { if skeleton("еvan") != "evan" {
t.Errorf("we must protect against cyrillic homoglyph attacks") t.Errorf("we must protect against cyrillic homoglyph attacks")
} }