mirror of
https://github.com/fafhrd91/actix-web
synced 2025-07-04 01:51:30 +02:00
Compare commits
2 Commits
web-v1.0.6
...
web-v1.0.7
Author | SHA1 | Date | |
---|---|---|---|
bae29897d6 | |||
616981ecf9 |
@ -1,5 +1,12 @@
|
|||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
## [1.0.7] - 2019-08-29
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* Request Extensions leak #1062
|
||||||
|
|
||||||
|
|
||||||
## [1.0.6] - 2019-08-28
|
## [1.0.6] - 2019-08-28
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "actix-web"
|
name = "actix-web"
|
||||||
version = "1.0.6"
|
version = "1.0.7"
|
||||||
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
||||||
description = "Actix web is a simple, pragmatic and extremely fast web framework for Rust."
|
description = "Actix web is a simple, pragmatic and extremely fast web framework for Rust."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -259,6 +259,7 @@ impl Drop for HttpRequest {
|
|||||||
if Rc::strong_count(&self.0) == 1 {
|
if Rc::strong_count(&self.0) == 1 {
|
||||||
let v = &mut self.0.pool.0.borrow_mut();
|
let v = &mut self.0.pool.0.borrow_mut();
|
||||||
if v.len() < 128 {
|
if v.len() < 128 {
|
||||||
|
self.extensions_mut().clear();
|
||||||
v.push(self.0.clone());
|
v.push(self.0.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -494,4 +495,36 @@ mod tests {
|
|||||||
let resp = call_service(&mut srv, req);
|
let resp = call_service(&mut srv, req);
|
||||||
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_extensions_dropped() {
|
||||||
|
struct Tracker {
|
||||||
|
pub dropped: bool,
|
||||||
|
}
|
||||||
|
struct Foo {
|
||||||
|
tracker: Rc<RefCell<Tracker>>,
|
||||||
|
}
|
||||||
|
impl Drop for Foo {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
self.tracker.borrow_mut().dropped = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let tracker = Rc::new(RefCell::new(Tracker { dropped: false }));
|
||||||
|
{
|
||||||
|
let tracker2 = Rc::clone(&tracker);
|
||||||
|
let mut srv = init_service(App::new().data(10u32).service(
|
||||||
|
web::resource("/").to(move |req: HttpRequest| {
|
||||||
|
req.extensions_mut().insert(Foo { tracker: Rc::clone(&tracker2) });
|
||||||
|
HttpResponse::Ok()
|
||||||
|
}),
|
||||||
|
));
|
||||||
|
|
||||||
|
let req = TestRequest::default().to_request();
|
||||||
|
let resp = call_service(&mut srv, req);
|
||||||
|
assert_eq!(resp.status(), StatusCode::OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(tracker.borrow().dropped);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user