diff options
author | Bartosz Taudul <wolf@nereid.pl> | 2022-09-02 19:52:32 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf@nereid.pl> | 2022-09-02 19:52:32 +0300 |
commit | 8b75a3fab0650b30f6edc7f494f9a5e19e621a64 (patch) | |
tree | b04f2a624fe1eb4b1b77f787f951d5eed8bc2e6b /server/TracyWorker.cpp | |
parent | 2f44f65e026fd79be26adf84e186fedfb7a81f23 (diff) |
Fix callstackPayload overflow when data to read size was POT.
Diffstat (limited to 'server/TracyWorker.cpp')
-rw-r--r-- | server/TracyWorker.cpp | 7 |
1 files 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<sz; i++ ) { uint16_t csz; @@ -1359,7 +1358,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) auto arr = (VarArray<CallstackFrameId>*)( mem + csz * sizeof( CallstackFrameId ) ); new(arr) VarArray<CallstackFrameId>( csz, data ); - m_data.callstackPayload.push_back_no_space_check( arr ); + m_data.callstackPayload[i+1] = arr; } f.Read( sz ); |