diff options
| author | zousar <[email protected]> | 2025-08-05 14:58:08 -0600 |
|---|---|---|
| committer | zousar <[email protected]> | 2025-08-05 14:58:08 -0600 |
| commit | 7ddededb31c9b3415d4d85f0b284e5bf45c723b9 (patch) | |
| tree | e908f97766720550b7d3d4e8553b3c83132c0735 /src/zencore | |
| parent | xmake precommit (diff) | |
| parent | de/stringbuilder safety (#456) (diff) | |
| download | zen-7ddededb31c9b3415d4d85f0b284e5bf45c723b9.tar.xz zen-7ddededb31c9b3415d4d85f0b284e5bf45c723b9.zip | |
Merge branch 'main' into zs/put-overwrite-policy
Diffstat (limited to 'src/zencore')
| -rw-r--r-- | src/zencore/callstack.cpp | 25 | ||||
| -rw-r--r-- | src/zencore/thread.cpp | 10 | ||||
| -rw-r--r-- | src/zencore/zencore.cpp | 9 |
3 files changed, 30 insertions, 14 deletions
diff --git a/src/zencore/callstack.cpp b/src/zencore/callstack.cpp index 9b06d4575..b22f2ec1f 100644 --- a/src/zencore/callstack.cpp +++ b/src/zencore/callstack.cpp @@ -179,19 +179,26 @@ FormatCallstack(const CallstackFrames* Callstack, StringBuilderBase& SB, std::st bool First = true; for (const std::string& Symbol : GetFrameSymbols(Callstack)) { - if (!First) + try { - SB.Append("\n"); - } - else - { - First = false; + if (!First) + { + SB.Append("\n"); + } + else + { + First = false; + } + if (!Prefix.empty()) + { + SB.Append(Prefix); + } + SB.Append(Symbol); } - if (!Prefix.empty()) + catch (const std::exception&) { - SB.Append(Prefix); + break; } - SB.Append(Symbol); } } 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()); } diff --git a/src/zencore/zencore.cpp b/src/zencore/zencore.cpp index 82d28c0e3..51e06ae14 100644 --- a/src/zencore/zencore.cpp +++ b/src/zencore/zencore.cpp @@ -124,7 +124,14 @@ AssertImpl::ExecAssert(const char* Filename, int LineNumber, const char* Functio AssertImpl* AssertImpl = CurrentAssertImpl; while (AssertImpl) { - AssertImpl->OnAssert(Filename, LineNumber, FunctionName, Msg, Callstack); + try + { + AssertImpl->OnAssert(Filename, LineNumber, FunctionName, Msg, Callstack); + } + catch (const std::exception&) + { + // Just keep exception silent - we don't want exception thrown from assert callbacks + } AssertImpl = AssertImpl->NextAssertImpl; } ThrowAssertException(Filename, LineNumber, FunctionName, Msg, Callstack); |