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
// casefolded identifier.
func Skeleton(name string) (string, error) {
if !isBoring(name) {
name = confusables.Skeleton(name)
}
// XXX the confusables table includes some, but not all, fullwidth->standard
// mappings for latin characters. do a pass of explicit width folding,
// same as PRECIS:
name = width.Fold.String(name)
if !isBoring(name) {
name = confusables.Skeleton(name)
}
// internationalized lowercasing for skeletons; this is much more lenient than
// Casefold. In particular, skeletons are expected to mix scripts (which may
// 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")
}
if skeleton("sm") != "smt" {
t.Errorf("our friend lover successfully tricked the skeleton algorithm!")
}
if skeleton("еvan") != "evan" {
t.Errorf("we must protect against cyrillic homoglyph attacks")
}