forked from OSchip/llvm-project
[libc++] Make sure __clear_and_shrink() maintains string invariants
__clear_and_shrink() was added in D41976, and a test was added alongside it to make sure that the string invariants were maintained. However, it appears that the test never ran under UBSan before, which would have highlighted the fact that it doesn't actually maintain the string invariants. Differential Revision: https://reviews.llvm.org/D88849
This commit is contained in:
parent
7b5dfb400a
commit
602c193e2a
|
@ -3941,7 +3941,7 @@ basic_string<_CharT, _Traits, _Allocator>::__invariants() const
|
|||
return false;
|
||||
if (data() == 0)
|
||||
return false;
|
||||
if (data()[size()] != value_type(0))
|
||||
if (data()[size()] != value_type())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -3959,6 +3959,7 @@ basic_string<_CharT, _Traits, _Allocator>::__clear_and_shrink() _NOEXCEPT
|
|||
__alloc_traits::deallocate(__alloc(), __get_long_pointer(), capacity() + 1);
|
||||
__set_long_cap(0);
|
||||
__set_short_size(0);
|
||||
traits_type::assign(*__get_short_pointer(), value_type());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue