From ecc50f47e854a97131008d77345baf9fec0d04a6 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Thu, 24 Aug 2023 10:05:17 -0700 Subject: [PATCH] Clients to avoid sending payloads larger than the maximum allowed size Summary: ^ Reviewed By: passy Differential Revision: D48645400 fbshipit-source-id: ac262296f113298812803c12eccf5a37da1da2b7 --- android/src/main/cpp/sonar.cpp | 7 +++++++ iOS/FlipperKit/FlipperWebSocket.mm | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/android/src/main/cpp/sonar.cpp b/android/src/main/cpp/sonar.cpp index 3bfa8d3a3..d9415668e 100644 --- a/android/src/main/cpp/sonar.cpp +++ b/android/src/main/cpp/sonar.cpp @@ -343,6 +343,13 @@ class JFlipperWebSocket : public facebook::flipper::FlipperSocket { if (socket_ == nullptr) { return; } + // Ensure the payload size is valid before sending. + // The maximum allowed size for a message payload is 2^53 - 1. But that is + // for the entire message, including any additional metadata. + if (message.length() > pow(2, 53) - 1) { + throw std::length_error("Payload is too big to send"); + } + socket_->send(message); completion(); } diff --git a/iOS/FlipperKit/FlipperWebSocket.mm b/iOS/FlipperKit/FlipperWebSocket.mm index 53529b882..241f096e0 100644 --- a/iOS/FlipperKit/FlipperWebSocket.mm +++ b/iOS/FlipperKit/FlipperWebSocket.mm @@ -121,6 +121,14 @@ void FlipperWebSocket::send( if (socket_ == NULL) { return; } + + // Ensure the payload size is valid before sending. + // The maximum allowed size for a message payload is 2^53 - 1. But that is + // for the entire message, including any additional metadata. + if (message.length() > pow(2, 53) - 1) { + throw std::length_error("Payload is too big to send"); + } + NSString* messageObjc = [NSString stringWithUTF8String:message.c_str()]; [socket_ send:messageObjc withCompletionHandler:^(NSError*) {