StringRef no longer repoints m_start to m_data after c_str() on a substring.

This fixes an issue where a self-assignment of a StringRef copy would point into internally (and now dangling) data.
(now self-assignment check is no longer needed)
This commit is contained in:
Phil Nash 2019-05-21 00:04:19 +01:00
parent 71fce429af
commit 96355da34e
3 changed files with 10 additions and 11 deletions

View file

@ -39,9 +39,11 @@ namespace Catch {
}
auto StringRef::c_str() const -> char const* {
if( isSubstring() )
const_cast<StringRef*>( this )->takeOwnership();
return m_start;
if( !isSubstring() )
return m_start;
const_cast<StringRef *>( this )->takeOwnership();
return m_data;
}
auto StringRef::currentData() const noexcept -> char const* {
return m_start;
@ -59,7 +61,6 @@ namespace Catch {
m_data = new char[m_size+1];
memcpy( m_data, m_start, m_size );
m_data[m_size] = '\0';
m_start = m_data;
}
}
auto StringRef::substr( size_type start, size_type size ) const noexcept -> StringRef {