cue: fail when converting invalid UTF-8 to a CUE string
To conform to spec.
Change-Id: I6beae1f7440ea56b8cdb7706a437370a92e206ce
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/4484
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/go.go b/cue/go.go
index 468369b..4c9efde 100644
--- a/cue/go.go
+++ b/cue/go.go
@@ -22,6 +22,7 @@
"reflect"
"sort"
"strings"
+ "unicode/utf8"
"cuelang.org/go/cue/ast"
"cuelang.org/go/cue/parser"
@@ -264,6 +265,10 @@
case bool:
return &boolLit{src.base(), v}
case string:
+ if !utf8.ValidString(v) {
+ return ctx.mkErr(src,
+ "cannot convert result to string: invalid UTF-8")
+ }
return &stringLit{src.base(), v, nil}
case []byte:
return &bytesLit{src.base(), v, nil}
@@ -306,7 +311,12 @@
return &boolLit{src.base(), value.Bool()}
case reflect.String:
- return &stringLit{src.base(), value.String(), nil}
+ str := value.String()
+ if !utf8.ValidString(str) {
+ return ctx.mkErr(src,
+ "cannot convert result to string: invalid UTF-8")
+ }
+ return &stringLit{src.base(), str, nil}
case reflect.Int, reflect.Int8, reflect.Int16,
reflect.Int32, reflect.Int64:
diff --git a/cue/go_test.go b/cue/go_test.go
index 621dfa8..bd2b1f2 100644
--- a/cue/go_test.go
+++ b/cue/go_test.go
@@ -46,6 +46,8 @@
}, {
"foo", `"foo"`,
}, {
+ "\x80", `_|_(cannot convert result to string: invalid UTF-8)`,
+ }, {
3, "3",
}, {
uint(3), "3",