Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-09-02 19:52:32 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-09-02 19:52:32 +0300
commit8b75a3fab0650b30f6edc7f494f9a5e19e621a64 (patch)
treeb04f2a624fe1eb4b1b77f787f951d5eed8bc2e6b /server/TracyWorker.cpp
parent2f44f65e026fd79be26adf84e186fedfb7a81f23 (diff)
Fix callstackPayload overflow when data to read size was POT.
Diffstat (limited to 'server/TracyWorker.cpp')
-rw-r--r--server/TracyWorker.cpp7
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 );