From aaab3133ee55f49f88c9f61200d31ed38fccd0ac Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 29 Aug 2016 11:16:17 +0200 Subject: [PATCH 1/2] Add tests to handle utf8 paths Signed-off-by: Martino Facchin --- src/arduino.cc/builder/test/utils_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/arduino.cc/builder/test/utils_test.go b/src/arduino.cc/builder/test/utils_test.go index c868ebd7..81739415 100644 --- a/src/arduino.cc/builder/test/utils_test.go +++ b/src/arduino.cc/builder/test/utils_test.go @@ -127,4 +127,14 @@ func TestParseCppString(t *testing.T) { require.Equal(t, true, ok) require.Equal(t, ` !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~`, str) require.Equal(t, ``, rest) + + str, rest, ok = utils.ParseCppString(`"/home/ççç/"`) + require.Equal(t, true, ok) + require.Equal(t, `/home/ççç/`, str) + require.Equal(t, ``, rest) + + str, rest, ok = utils.ParseCppString(`"/home/ççç/ /$sdsdd\\"`) + require.Equal(t, true, ok) + require.Equal(t, `/home/ççç/ /$sdsdd\`, str) + require.Equal(t, ``, rest) } From 46410677e92f51aca90fc9a4689f08eee766ff5f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 23 Nov 2016 12:26:26 +0100 Subject: [PATCH 2/2] Treat cpp string as UTF8 Fix arduino/Arduino#5277 Signed-off-by: Cristian Maglie --- src/arduino.cc/builder/utils/utils.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/arduino.cc/builder/utils/utils.go b/src/arduino.cc/builder/utils/utils.go index 1fdbd9d0..7338805e 100644 --- a/src/arduino.cc/builder/utils/utils.go +++ b/src/arduino.cc/builder/utils/utils.go @@ -38,6 +38,7 @@ import ( "path/filepath" "runtime" "strings" + "unicode/utf8" "arduino.cc/builder/constants" "arduino.cc/builder/gohasissues" @@ -443,10 +444,12 @@ func ParseCppString(line string) (string, string, bool) { return "", line, false } - switch line[i] { + c, width := utf8.DecodeRuneInString(line[i:]) + + switch c { // Backslash, next character is used unmodified case '\\': - i++ + i += width if i >= len(line) { return "", line, false } @@ -454,12 +457,12 @@ func ParseCppString(line string) (string, string, bool) { break // Quote, end of string case '"': - return res, line[i+1:], true + return res, line[i+width:], true default: - res += string(line[i]) + res += string(c) break } - i++ + i += width } }