From: Jonathan Wakely Date: Wed, 14 Dec 2022 11:58:05 +0000 (+0000) Subject: libstdc++: Fix size passed to operator delete [PR108097] X-Git-Tag: upstream/13.1.0~2543 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=881c6cabce5d0b27285ed41bd6dabdf48848cce7;p=platform%2Fupstream%2Fgcc.git libstdc++: Fix size passed to operator delete [PR108097] The number of elements gets stored in _M_capacity so use a separate variable for the number of bytes to allocate. libstdc++-v3/ChangeLog: PR libstdc++/108097 * include/std/stacktrace (basic_stracktrace::_Impl): Do not multiply N by sizeof(value_type) when allocating. --- diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace index 83c6463..402be3e 100644 --- a/libstdc++-v3/include/std/stacktrace +++ b/libstdc++-v3/include/std/stacktrace @@ -608,8 +608,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if constexpr (is_same_v>) { - __n *= sizeof(value_type); - void* const __p = _GLIBCXX_OPERATOR_NEW (__n, nothrow_t{}); + // For std::allocator we use nothrow-new directly so we + // don't need to handle bad_alloc exceptions. + size_t __nb = __n * sizeof(value_type); + void* const __p = _GLIBCXX_OPERATOR_NEW (__nb, nothrow_t{}); if (__p == nullptr) [[unlikely]] return nullptr; _M_frames = static_cast(__p);