From 368537c7f4fc74f60be1e4e211f488b7dab654a7 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Tue, 24 Mar 2020 12:08:08 +0300 Subject: fix a bug where I failed to account for TCHARs, again --- include/pdb/symbol.hpp | 5 ++++- src/symbol.cpp | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/pdb/symbol.hpp b/include/pdb/symbol.hpp index 6a62e22..f843df7 100644 --- a/include/pdb/symbol.hpp +++ b/include/pdb/symbol.hpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace pdb { namespace symbol { @@ -61,7 +62,9 @@ public: bool is_function() const { return get_type() == Type::Function; } private: - static constexpr std::size_t max_buffer_size = sizeof(Impl) + MAX_SYM_NAME - 1; + static constexpr std::size_t char_size = sizeof(std::remove_extent::type); + static_assert(char_size == sizeof(wchar_t), "Aren't we using the wide WinAPI?"); + static constexpr std::size_t max_buffer_size = sizeof(Impl) + (MAX_SYM_NAME - 1) * char_size; std::array buffer; Address displacement = 0; diff --git a/src/symbol.cpp b/src/symbol.cpp index 1973f0b..3b0f5d9 100644 --- a/src/symbol.cpp +++ b/src/symbol.cpp @@ -16,13 +16,15 @@ #include #include #include +#include namespace pdb { namespace { std::size_t calc_size(const SymbolInfo::Impl& impl) { try { - return SafeInt{impl.SizeOfStruct} + impl.NameLen - 1; + static constexpr auto char_size = sizeof(std::remove_extent::type); + return SafeInt{impl.SizeOfStruct} + (impl.NameLen - 1) * char_size; } catch (const SafeIntException&) { throw std::runtime_error{"invalid SYMBOL_INFO size"}; } -- cgit v1.2.3