1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-07-01 19:47:18 +00:00
actix-web/actix-http
Aaron Hill fe13789345
Use Pin<Box<S>> in BodyStream and SizedStream (#1328)
Fixes #1321

A better fix would be to change `MessageBody` to take a `Pin<&mut
Self>`, rather than a `Pin<&mut Self>`. This will avoid requiring the
use of `Box` for all consumers by allowing the caller to determine how
to pin the `MessageBody` implementation (e.g. via stack pinning).

However, doing so is a breaking change that will affect every user of
`MessageBody`. By pinning the inner stream ourselves, we can fix the
undefined behavior without breaking the API.

I've included @sebzim4500's reproduction case as a new test case.
However, due to the nature of undefined behavior, this could pass (and
not segfault) even if underlying issue were to regress.

Unfortunately, until rust-lang/unsafe-code-guidelines#148 is resolved,
it's not even possible to write a Miri test that will pass when the bug
is fixed.

Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
2020-01-31 09:39:34 +09:00
..
examples Fix actix-http examples (#1259) 2020-01-07 00:15:04 +09:00
src Use Pin<Box<S>> in BodyStream and SizedStream (#1328) 2020-01-31 09:39:34 +09:00
tests Fix poll_ready call for WebSockets upgrade (#1219) 2019-12-17 13:34:25 +06:00
.appveyor.yml Merge actix-http project 2019-03-26 11:54:35 -07:00
Cargo.toml Upgrade time to 0.2.5 (#1254) 2020-01-28 20:44:22 +09:00
CHANGES.md Upgrade time to 0.2.5 (#1254) 2020-01-28 20:44:22 +09:00
CODE_OF_CONDUCT.md Merge actix-http project 2019-03-26 11:54:35 -07:00
LICENSE-APACHE Merge actix-http project 2019-03-26 11:54:35 -07:00
LICENSE-MIT Merge actix-http project 2019-03-26 11:54:35 -07:00
README.md update readme 2019-04-08 17:53:19 -07:00
rustfmt.toml Merge actix-http project 2019-03-26 11:54:35 -07:00

Actix http Build Status codecov crates.io Join the chat at https://gitter.im/actix/actix

Actix http

Documentation & community resources

Example

// see examples/framed_hello.rs for complete list of used crates.
extern crate actix_http;
use actix_http::{h1, Response, ServiceConfig};

fn main() {
    Server::new().bind("framed_hello", "127.0.0.1:8080", || {
        IntoFramed::new(|| h1::Codec::new(ServiceConfig::default()))	// <- create h1 codec
            .and_then(TakeItem::new().map_err(|_| ()))	                // <- read one request
            .and_then(|(_req, _framed): (_, Framed<_, _>)| {	        // <- send response and close conn
                SendResponse::send(_framed, Response::Ok().body("Hello world!"))
                    .map_err(|_| ())
                    .map(|_| ())
            })
    }).unwrap().run();
}

License

This project is licensed under either of

at your option.

Code of Conduct

Contribution to the actix-http crate is organized under the terms of the Contributor Covenant, the maintainer of actix-http, @fafhrd91, promises to intervene to uphold that code of conduct.