Ensure wxCharTypeBuffer data is NUL-terminated after extend() call.

As wxCharTypeBuffer ctor taking the length NUL-terminates the buffer, it may
be expected that extend() does the same but it did not. Do add the NUL at the
end for consistency, even though it's not really needed for the existing code
using extend() in wxWidgets itself.

Closes #13885.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70417 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-01-20 22:11:51 +00:00
parent 0c99d1fb56
commit f2c6e60762
2 changed files with 18 additions and 0 deletions

View File

@@ -312,6 +312,10 @@ public:
if ( !str ) if ( !str )
return false; return false;
// For consistency with the ctor taking just the length, NUL-terminate
// the buffer.
str[len] = (CharType)0;
if ( this->m_data == this->GetNullData() ) if ( this->m_data == this->GetNullData() )
{ {
this->m_data = new Data(str, len); this->m_data = new Data(str, len);

View File

@@ -1039,4 +1039,18 @@ void StringTestCase::ScopedBuffers()
wxCharBuffer buf2 = sbuf; wxCharBuffer buf2 = sbuf;
CPPUNIT_ASSERT( buf2.data() != literal ); CPPUNIT_ASSERT( buf2.data() != literal );
CPPUNIT_ASSERT_EQUAL( literal, buf.data() ); CPPUNIT_ASSERT_EQUAL( literal, buf.data() );
// Check that extending the buffer keeps it NUL-terminated.
size_t len = 10;
wxCharBuffer buf3(len);
CPPUNIT_ASSERT_EQUAL('\0', buf3.data()[len]);
wxCharBuffer buf4;
buf4.extend(len);
CPPUNIT_ASSERT_EQUAL('\0', buf4.data()[len]);
wxCharBuffer buf5(5);
buf5.extend(len);
CPPUNIT_ASSERT_EQUAL('\0', buf5.data()[len]);
} }