From f2c6e607622d2f8c684b2a6417bd43f52e3b9eef Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 20 Jan 2012 22:11:51 +0000 Subject: [PATCH] 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 --- include/wx/buffer.h | 4 ++++ tests/strings/strings.cpp | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/wx/buffer.h b/include/wx/buffer.h index 800c41b..ec0e1fc 100644 --- a/include/wx/buffer.h +++ b/include/wx/buffer.h @@ -312,6 +312,10 @@ public: if ( !str ) 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() ) { this->m_data = new Data(str, len); diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index af18513..39e1904 100644 --- a/tests/strings/strings.cpp +++ b/tests/strings/strings.cpp @@ -1039,4 +1039,18 @@ void StringTestCase::ScopedBuffers() wxCharBuffer buf2 = sbuf; CPPUNIT_ASSERT( buf2.data() != literal ); 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]); } -- 2.7.4