diff --git a/builtins.go b/builtins.go index 0e6812d..eaee396 100644 --- a/builtins.go +++ b/builtins.go @@ -1179,7 +1179,7 @@ func builtinSubstr(i *interpreter, inputStr, inputFrom, inputLen value) (value, } fromInt := int(fromV.value) - strStr := strV.getGoString() + strStr := strV.getRunes() endIndex := fromInt + lenInt @@ -1190,9 +1190,7 @@ func builtinSubstr(i *interpreter, inputStr, inputFrom, inputLen value) (value, if fromInt > len(strStr) { return makeValueString(""), nil } - - runes := []rune(strStr) - return makeValueString(string(runes[fromInt:endIndex])), nil + return makeValueString(string(strStr[fromInt:endIndex])), nil } func builtinSplitLimit(i *interpreter, strv, cv, maxSplitsV value) (value, error) { diff --git a/testdata/builtin_substr_multibyte.golden b/testdata/builtin_substr_multibyte.golden new file mode 100644 index 0000000..19ea4ad --- /dev/null +++ b/testdata/builtin_substr_multibyte.golden @@ -0,0 +1 @@ +"🤩" diff --git a/testdata/builtin_substr_multibyte.jsonnet b/testdata/builtin_substr_multibyte.jsonnet new file mode 100644 index 0000000..ea7b51f --- /dev/null +++ b/testdata/builtin_substr_multibyte.jsonnet @@ -0,0 +1 @@ +std.substr("🤩", 0, 5) \ No newline at end of file diff --git a/testdata/builtin_substr_multibyte.linter.golden b/testdata/builtin_substr_multibyte.linter.golden new file mode 100644 index 0000000..e69de29