From 8b75a3fab0650b30f6edc7f494f9a5e19e621a64 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Fri, 2 Sep 2022 18:52:32 +0200 Subject: [PATCH] Fix callstackPayload overflow when data to read size was POT. --- server/TracyWorker.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index a79e8d96..72c3712b 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -535,8 +535,6 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) { auto loadStart = std::chrono::high_resolution_clock::now(); - m_data.callstackPayload.push_back( nullptr ); - int fileVer = 0; uint8_t hdr[8]; @@ -1344,7 +1342,8 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) s_loadProgress.subTotal.store( 0, std::memory_order_relaxed ); s_loadProgress.progress.store( LoadProgress::CallStacks, std::memory_order_relaxed ); f.Read( sz ); - m_data.callstackPayload.reserve( sz ); + m_data.callstackPayload.reserve_exact( sz+1, m_slab ); + m_data.callstackPayload[0] = nullptr; for( uint64_t i=0; i*)( mem + csz * sizeof( CallstackFrameId ) ); new(arr) VarArray( csz, data ); - m_data.callstackPayload.push_back_no_space_check( arr ); + m_data.callstackPayload[i+1] = arr; } f.Read( sz );