diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 25d1b5e66805..3704f2b70da4 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -687,7 +687,11 @@ fn seek_in_buf(offset: int, pos: uint, len: uint, whence: seek_style) -> fn read_whole_file_str(file: ~str) -> result<~str, ~str> { result::chain(read_whole_file(file), |bytes| { - result::ok(str::from_bytes(bytes)) + if str::is_utf8(bytes) { + result::ok(str::from_bytes(bytes)) + } else { + result::err(file + ~" is not UTF-8") + } }) } diff --git a/src/test/compile-fail/not-utf8.bin b/src/test/compile-fail/not-utf8.bin new file mode 100644 index 000000000000..4148e5b88fe6 Binary files /dev/null and b/src/test/compile-fail/not-utf8.bin differ diff --git a/src/test/compile-fail/not-utf8.rs b/src/test/compile-fail/not-utf8.rs new file mode 100644 index 000000000000..2038f1393590 --- /dev/null +++ b/src/test/compile-fail/not-utf8.rs @@ -0,0 +1,5 @@ +// error-pattern: is not UTF-8 + +fn foo() { + #include("not-utf8.bin") +}