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.
This commit is contained in:
Jonathan Wakely 2022-12-14 11:58:05 +00:00
parent 049dccd080
commit 881c6cabce

View file

@ -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);