From 3a343be4af262744f1a86edd8c20b8098c443e8a Mon Sep 17 00:00:00 2001 From: "Alexis (Poliorcetics) Bourget" Date: Mon, 24 Jul 2023 11:30:31 +0200 Subject: [PATCH] feat(tonic): Add limitation on body length --- tonic/src/codec/decode.rs | 7 ++++++- tonic/src/codec/mod.rs | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tonic/src/codec/decode.rs b/tonic/src/codec/decode.rs index b6d24f530..f008a49f4 100644 --- a/tonic/src/codec/decode.rs +++ b/tonic/src/codec/decode.rs @@ -187,7 +187,12 @@ impl StreamingInner { )); } - self.buf.reserve(len); + if let Err(err) = self.buf.try_reserve(len) { + return Err(Status::internal(format!( + "Could not allocate buffer (needed size: {}): {}", + len, err + ))); + } self.state = State::ReadBody { compression: compression_encoding, diff --git a/tonic/src/codec/mod.rs b/tonic/src/codec/mod.rs index 306621329..69cdaebad 100644 --- a/tonic/src/codec/mod.rs +++ b/tonic/src/codec/mod.rs @@ -30,7 +30,7 @@ const HEADER_SIZE: usize = std::mem::size_of::(); // The default maximum uncompressed size in bytes for a message. Defaults to 4MB. -const DEFAULT_MAX_RECV_MESSAGE_SIZE: usize = 4 * 1024 * 1024; +const DEFAULT_MAX_RECV_MESSAGE_SIZE: usize = 100 * 1024 * 1024; const DEFAULT_MAX_SEND_MESSAGE_SIZE: usize = usize::MAX; /// Trait that knows how to encode and decode gRPC messages.