diff options
| author | Dan Engelbrecht <[email protected]> | 2025-08-05 09:39:28 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-08-05 09:39:28 +0200 |
| commit | 34c8c53de8ddaff19e81fd1d3c520563c4f39a3b (patch) | |
| tree | b82bc18f6d7698954af497d49cf91f506346fc5b /src/zencore/thread.cpp | |
| parent | Don't set m_DispatchComplete in ParallelWork until after pending work countdo... (diff) | |
| download | zen-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.cpp | 10 |
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()); } |