diff --git a/server/TracyFileHeader.hpp b/server/TracyFileHeader.hpp new file mode 100644 index 00000000..67ca8afc --- /dev/null +++ b/server/TracyFileHeader.hpp @@ -0,0 +1,11 @@ +#ifndef __TRACYFILEHEADER_HPP__ +#define __TRACYFILEHEADER_HPP__ + +namespace tracy +{ + +static const char Lz4Header[4] = { 't', 'l', 'Z', 4 }; + +} + +#endif diff --git a/server/TracyFileRead.hpp b/server/TracyFileRead.hpp index 45451b34..fb851167 100644 --- a/server/TracyFileRead.hpp +++ b/server/TracyFileRead.hpp @@ -2,15 +2,19 @@ #define __TRACYFILEREAD_HPP__ #include +#include #include #include +#include "TracyFileHeader.hpp" #include "../common/tracy_lz4.hpp" #include "../common/TracyForceInline.hpp" namespace tracy { +struct NotTracyDump : public std::exception {}; + class FileRead { public: @@ -84,7 +88,18 @@ private: , m_offset( BufSize ) , m_active( 1 ) , m_lastBlock( 0 ) - {} + { + char hdr[4]; + if( fread( hdr, 1, sizeof( hdr ), m_file ) != sizeof( hdr ) ) throw NotTracyDump(); + if( memcmp( hdr, Lz4Header, sizeof( hdr ) ) != 0 ) + { + fseek( m_file, 0, SEEK_SET ); + uint32_t sz; + static_assert( sizeof( sz ) == sizeof( hdr ), "Size mismatch" ); + memcpy( &sz, hdr, sizeof( sz ) ); + if( sz > LZ4Size ) throw NotTracyDump(); + } + } tracy_force_inline void ReadSmall( void* ptr, size_t size ) { diff --git a/server/TracyFileWrite.hpp b/server/TracyFileWrite.hpp index 71269f89..9d3f8537 100644 --- a/server/TracyFileWrite.hpp +++ b/server/TracyFileWrite.hpp @@ -5,6 +5,7 @@ #include #include +#include "TracyFileHeader.hpp" #include "../common/tracy_lz4.hpp" #include "../common/TracyForceInline.hpp" @@ -48,7 +49,9 @@ private: , m_file( f ) , m_offset( 0 ) , m_active( 0 ) - {} + { + fwrite( Lz4Header, 1, sizeof( Lz4Header ), m_file ); + } tracy_force_inline void WriteSmall( const void* ptr, size_t size ) { diff --git a/standalone/build/win32/Tracy.vcxproj b/standalone/build/win32/Tracy.vcxproj index 9b5101fc..8aa4e9a7 100644 --- a/standalone/build/win32/Tracy.vcxproj +++ b/standalone/build/win32/Tracy.vcxproj @@ -117,6 +117,7 @@ + diff --git a/standalone/build/win32/Tracy.vcxproj.filters b/standalone/build/win32/Tracy.vcxproj.filters index fe6814c7..963db2b8 100644 --- a/standalone/build/win32/Tracy.vcxproj.filters +++ b/standalone/build/win32/Tracy.vcxproj.filters @@ -167,6 +167,9 @@ imgui + + server +