Skip to content

Commit

Permalink
Fix a bug where read(buf, len) would fail if buf was big enough and s…
Browse files Browse the repository at this point in the history
…ucceed if it was too small ... which is the opposite of correct.
  • Loading branch information
Dretch committed Nov 24, 2012
1 parent dc34fb9 commit f841d43
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/libcore/io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ fn convert_whence(whence: SeekStyle) -> i32 {
impl *libc::FILE: Reader {
fn read(bytes: &[mut u8], len: uint) -> uint {
do vec::as_mut_buf(bytes) |buf_p, buf_len| {
assert buf_len <= len;
assert buf_len >= len;

let count = libc::fread(buf_p as *mut c_void, 1u as size_t,
len as size_t, self);
Expand Down Expand Up @@ -1208,6 +1208,29 @@ mod tests {
}
}

#[test]
#[should_fail]
fn test_read_buffer_too_small() {
let path = &Path("tmp/lib-io-test-read-buffer-too-small.tmp");
// ensure the file exists
io::file_writer(path, [io::Create]).get();

let file = io::file_reader(path).get();
let mut buf = vec::from_elem(5, 0);
file.read(buf, 6); // this should fail because buf is too small
}

#[test]
fn test_read_buffer_big_enough() {
let path = &Path("tmp/lib-io-test-read-buffer-big-enough.tmp");
// ensure the file exists
io::file_writer(path, [io::Create]).get();

let file = io::file_reader(path).get();
let mut buf = vec::from_elem(5, 0);
file.read(buf, 4); // this should succeed because buf is big enough
}

#[test]
fn test_write_empty() {
let file = io::file_writer(&Path("tmp/lib-io-test-write-empty.tmp"),
Expand Down

0 comments on commit f841d43

Please sign in to comment.