Sha256: ea3e961e39a0b92930bded05e8ba26e4902461ab53818843d40fae8065b1a803

Contents?: true

Size: 1.44 KB

Versions: 22

Compression:

Stored size: 1.44 KB

Contents

use futures::{
    executor::block_on,
    io::{self, AsyncRead, AsyncReadExt},
    task::{Context, Poll},
};
use std::pin::Pin;

#[test]
#[should_panic(expected = "assertion failed: n <= buf.len()")]
fn issue2310() {
    struct MyRead {
        first: bool,
    }

    impl MyRead {
        fn new() -> Self {
            MyRead { first: false }
        }
    }

    impl AsyncRead for MyRead {
        fn poll_read(
            mut self: Pin<&mut Self>,
            _cx: &mut Context,
            _buf: &mut [u8],
        ) -> Poll<io::Result<usize>> {
            Poll::Ready(if !self.first {
                self.first = true;
                // First iteration: return more than the buffer size
                Ok(64)
            } else {
                // Second iteration: indicate that we are done
                Ok(0)
            })
        }
    }

    struct VecWrapper {
        inner: Vec<u8>,
    }

    impl VecWrapper {
        fn new() -> Self {
            VecWrapper { inner: Vec::new() }
        }
    }

    impl Drop for VecWrapper {
        fn drop(&mut self) {
            // Observe uninitialized bytes
            println!("{:?}", &self.inner);
            // Overwrite heap contents
            for b in &mut self.inner {
                *b = 0x90;
            }
        }
    }

    block_on(async {
        let mut vec = VecWrapper::new();
        let mut read = MyRead::new();

        read.read_to_end(&mut vec.inner).await.unwrap();
    })
}

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
wasmtime-25.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-25.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-25.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-24.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-23.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-22.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-21.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-20.0.2 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-20.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-18.0.3 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-17.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-17.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-16.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-15.0.1 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-15.0.0 ./ext/cargo-vendor/futures-0.3.30/tests/io_read_to_end.rs
wasmtime-14.0.4 ./ext/cargo-vendor/futures-0.3.28/tests/io_read_to_end.rs
wasmtime-14.0.3 ./ext/cargo-vendor/futures-0.3.28/tests/io_read_to_end.rs
wasmtime-14.0.1 ./ext/cargo-vendor/futures-0.3.28/tests/io_read_to_end.rs
wasmtime-14.0.0 ./ext/cargo-vendor/futures-0.3.28/tests/io_read_to_end.rs
wasmtime-13.0.0 ./ext/cargo-vendor/futures-0.3.28/tests/io_read_to_end.rs