summaryrefslogtreecommitdiff
path: root/ext/http/lib.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-04-25 22:50:29 +0530
committerGitHub <noreply@github.com>2022-04-25 19:20:29 +0200
commit609c359dd448f2a7736ba1d93e94e1feff6acadc (patch)
tree284387075ed07627cff88f2cdba7bb5811dca7e5 /ext/http/lib.rs
parentc0e3b6096d37e9a4243c7ad461487db291c824fa (diff)
fix(ext/http): truncate read bytes when streaming bodies (#14389)
stream shutdown wasn't happening correctly (moved it to call op_http_shutdown) & extra zeroed bytes were being sent for when body length not a multiple of 64*1024
Diffstat (limited to 'ext/http/lib.rs')
-rw-r--r--ext/http/lib.rs17
1 files changed, 3 insertions, 14 deletions
diff --git a/ext/http/lib.rs b/ext/http/lib.rs
index b4a2f0c45..28689654e 100644
--- a/ext/http/lib.rs
+++ b/ext/http/lib.rs
@@ -729,7 +729,9 @@ async fn op_http_write_resource(
}
}
HttpResponseWriter::BodyUncompressed(body) => {
- if let Err(err) = body.send_data(Bytes::from(buf.to_temp())).await {
+ let mut buf = buf.to_temp();
+ buf.truncate(nread);
+ if let Err(err) = body.send_data(Bytes::from(buf)).await {
assert!(err.is_closed());
// Pull up the failure associated with the transport connection instead.
http_stream.conn.closed().await?;
@@ -740,19 +742,6 @@ async fn op_http_write_resource(
_ => unreachable!(),
};
}
-
- let wr = take(&mut *wr);
- if let HttpResponseWriter::Body(mut body_writer) = wr {
- match body_writer.shutdown().await {
- Ok(_) => {}
- Err(err) => {
- assert_eq!(err.kind(), std::io::ErrorKind::BrokenPipe);
- // Don't return "broken pipe", that's an implementation detail.
- // Pull up the failure associated with the transport connection instead.
- http_stream.conn.closed().await?;
- }
- }
- }
Ok(())
}