From 68bb76beecb4395db639c1bd04ae07b4b2e174c2 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Tue, 9 Jul 2019 21:08:11 -0400 Subject: [PATCH] Split unsafe block HttpServiceHandlerResponse Also add explanation of the safety of the usage of `unsafe` --- actix-http/src/service.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/actix-http/src/service.rs b/actix-http/src/service.rs index 1ac018803..6fd1cc0c0 100644 --- a/actix-http/src/service.rs +++ b/actix-http/src/service.rs @@ -466,16 +466,18 @@ where State::Unknown(ref mut data) => { if let Some(ref mut item) = data { loop { - unsafe { - let b = item.1.bytes_mut(); - let n = try_ready!(item.0.poll_read(b)); - if n == 0 { - return Ok(Async::Ready(())); - } - item.1.advance_mut(n); - if item.1.len() >= HTTP2_PREFACE.len() { - break; - } + // Safety - we only write to the returned slice. + let b = unsafe { item.1.bytes_mut() }; + let n = try_ready!(item.0.poll_read(b)); + if n == 0 { + return Ok(Async::Ready(())); + } + // Safety - we know that 'n' bytes have + // been initialized via the contract of + // 'poll_read' + unsafe { item.1.advance_mut(n) }; + if item.1.len() >= HTTP2_PREFACE.len() { + break; } } } else {