From f8dc9283ad13f990d1ee5ac814eac49189edcd59 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Wed, 25 Jul 2012 14:58:48 -0700 Subject: [PATCH] Reject non-UTF-8 files when reading as str. Close #2918. --- src/libcore/io.rs | 6 +++++- src/test/compile-fail/not-utf8.bin | Bin 0 -> 3036 bytes src/test/compile-fail/not-utf8.rs | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/not-utf8.bin create mode 100644 src/test/compile-fail/not-utf8.rs 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 0000000000000000000000000000000000000000..4148e5b88fe6369c7056f9659bb48902fefa19c6 GIT binary patch literal 3036 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