diff options
author | Josh Betz <j@joshbetz.com> | 2017-07-31 11:46:31 -0500 |
---|---|---|
committer | Josh Betz <j@joshbetz.com> | 2017-07-31 11:46:31 -0500 |
commit | 27b67a493d3b0a4f15252b77b546115c00ad2226 (patch) | |
tree | e540a6f545458bca1b9d9d2fbabb9cffd7bca8e4 /utils/merkletrie/noder/path.go | |
parent | 91cdedae7faffca0a707fa47780efafe157ba47c (diff) | |
download | go-git-27b67a493d3b0a4f15252b77b546115c00ad2226.tar.gz |
Normalize filenames before comparing.
Some multibyte characters can have multiple representations. Before
comparing strings, we need to normalize them. In this case we're
normalizing to normalized form C, but it shouldn't matter as long as
both strings are normalized to the same form.
Fixes https://github.com/src-d/go-git/issues/495
Diffstat (limited to 'utils/merkletrie/noder/path.go')
-rw-r--r-- | utils/merkletrie/noder/path.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/utils/merkletrie/noder/path.go b/utils/merkletrie/noder/path.go index 85742db..d2e2932 100644 --- a/utils/merkletrie/noder/path.go +++ b/utils/merkletrie/noder/path.go @@ -3,6 +3,8 @@ package noder import ( "bytes" "strings" + + "golang.org/x/text/unicode/norm" ) // Path values represent a noder and its ancestors. The root goes first @@ -78,7 +80,11 @@ func (p Path) Compare(other Path) int { case i == len(p): return -1 default: - cmp := strings.Compare(p[i].Name(), other[i].Name()) + form := norm.Form(norm.NFC) + this := form.String(p[i].Name()) + that := form.String(other[i].Name()) + + cmp := strings.Compare(this, that) if cmp != 0 { return cmp } |