diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2022-12-14 11:58:05 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2022-12-14 14:11:13 +0000 |
commit | 881c6cabce5d0b27285ed41bd6dabdf48848cce7 (patch) | |
tree | 120144de4b28ff24416eb315fba91a2747635264 | |
parent | 049dccd080c6ad74a8d0923c57c8a488a9a18496 (diff) | |
download | gcc-881c6cabce5d0b27285ed41bd6dabdf48848cce7.zip gcc-881c6cabce5d0b27285ed41bd6dabdf48848cce7.tar.gz gcc-881c6cabce5d0b27285ed41bd6dabdf48848cce7.tar.bz2 |
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.
-rw-r--r-- | libstdc++-v3/include/std/stacktrace | 6 |
1 files changed, 4 insertions, 2 deletions
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<allocator_type, allocator<value_type>>) { - __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<pointer>(__p); |