aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/thread.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-08-05 09:39:28 +0200
committerGitHub Enterprise <[email protected]>2025-08-05 09:39:28 +0200
commit34c8c53de8ddaff19e81fd1d3c520563c4f39a3b (patch)
treeb82bc18f6d7698954af497d49cf91f506346fc5b /src/zencore/thread.cpp
parentDon't set m_DispatchComplete in ParallelWork until after pending work countdo... (diff)
downloadzen-34c8c53de8ddaff19e81fd1d3c520563c4f39a3b.tar.xz
zen-34c8c53de8ddaff19e81fd1d3c520563c4f39a3b.zip
de/stringbuilder safety (#456)
- Improvement: Safeguard FormatCallstack to not throw exceptions when building the callstack string - Improvement: Limit thread name length when setting it for debugger use - Improvemnet: Don't allow assert callbacks to throw exception - Improvement: When formatting log output for malformed attachments in a package message, allow the string buffer to grow instead of throwing exception
Diffstat (limited to 'src/zencore/thread.cpp')
-rw-r--r--src/zencore/thread.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/zencore/thread.cpp b/src/zencore/thread.cpp
index ab7e6857a..0d5ad6091 100644
--- a/src/zencore/thread.cpp
+++ b/src/zencore/thread.cpp
@@ -80,8 +80,10 @@ SetNameInternal(DWORD thread_id, const char* name)
void
SetCurrentThreadName([[maybe_unused]] std::string_view ThreadName)
{
- StringBuilder<256> ThreadNameZ;
- ThreadNameZ << ThreadName;
+ constexpr std::string_view::size_type MaxThreadNameLength = 255;
+ std::string_view LimitedThreadName = ThreadName.substr(0, MaxThreadNameLength);
+ StringBuilder<MaxThreadNameLength + 1> ThreadNameZ;
+ ThreadNameZ << LimitedThreadName;
const int ThreadId = GetCurrentThreadId();
#if ZEN_WITH_TRACE
@@ -95,8 +97,8 @@ SetCurrentThreadName([[maybe_unused]] std::string_view ThreadName)
if (SetThreadDescriptionFunc)
{
- WideStringBuilder<256> ThreadNameW;
- Utf8ToWide(ThreadName, ThreadNameW);
+ WideStringBuilder<MaxThreadNameLength + 1> ThreadNameW;
+ Utf8ToWide(LimitedThreadName, ThreadNameW);
SetThreadDescriptionFunc(::GetCurrentThread(), ThreadNameW.c_str());
}