From 7d51dbdc1795ff9708dc3e60e4fb7089e0af8d36 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Tue, 12 Dec 2023 15:14:32 +0100 Subject: [PATCH] fix(storage, windows): fix an issue where getData function would statically allocate memory (#12020) --- .../windows/firebase_storage_plugin.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/firebase_storage/firebase_storage/windows/firebase_storage_plugin.cpp b/packages/firebase_storage/firebase_storage/windows/firebase_storage_plugin.cpp index 578e71bebc16..98175a0329bb 100644 --- a/packages/firebase_storage/firebase_storage/windows/firebase_storage_plugin.cpp +++ b/packages/firebase_storage/firebase_storage/windows/firebase_storage_plugin.cpp @@ -402,17 +402,21 @@ void FirebaseStoragePlugin::ReferenceGetData( StorageReference cpp_reference = GetCPPStorageReferenceFromPigeon(app, reference); const size_t kMaxAllowedSize = 1 * 1024 * 1024; - uint8_t byte_buffer[kMaxAllowedSize]; - Future future_result = cpp_reference.GetBytes(byte_buffer, max_size); + // Use a shared pointer for automatic memory management and copyability + auto byte_buffer = std::make_shared>(kMaxAllowedSize); + + Future future_result = + cpp_reference.GetBytes(byte_buffer->data(), max_size); ::Sleep(1); // timing for c++ sdk grabbing a mutex + future_result.OnCompletion( [result, byte_buffer](const Future& data_result) { if (data_result.error() == firebase::storage::kErrorNone) { size_t vector_size = *data_result.result(); std::optional> vector_buffer; - vector_buffer = - std::vector(byte_buffer, byte_buffer + vector_size); + vector_buffer = std::vector( + byte_buffer->begin(), byte_buffer->begin() + vector_size); result(vector_buffer); } else { result(FirebaseStoragePlugin::ParseError(data_result));