fix wxStringOutputStream to deal with NUL bytes correctly (incidentally fixes bug 1792727, part of patch 1795174)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48702 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2007-09-15 00:32:54 +00:00
parent 49297c840b
commit a7b9ab6200
2 changed files with 30 additions and 3 deletions

View File

@ -167,13 +167,14 @@ size_t wxStringOutputStream::OnSysWrite(const void *buffer, size_t size)
srcLen = size;
}
wxWCharBuffer wbuf(m_conv.cMB2WC(src, srcLen, NULL /* out len */));
size_t wlen;
wxWCharBuffer wbuf(m_conv.cMB2WC(src, srcLen, &wlen));
if ( wbuf )
{
// conversion succeeded, clear the unconverted buffer
m_unconv = wxMemoryBuffer(0);
*m_str += wbuf;
m_str->append(wbuf, wlen);
}
else // conversion failed
{

View File

@ -56,16 +56,21 @@ public:
//CPPUNIT_TEST(Output_TellO);
// Other test specific for String stream test case.
CPPUNIT_TEST(Output_Check);
CPPUNIT_TEST_SUITE_END();
protected:
// Add own test here.
void Output_Check();
private:
// Implement base class functions.
virtual wxStringInputStream *DoCreateInStream();
virtual wxStringOutputStream *DoCreateOutStream();
// output the given string to wxStringOutputStream and check that its
// contents is exactly the same string
void CheckString(const wxString& text);
wxString m_str;
};
@ -97,6 +102,27 @@ wxStringOutputStream *strStream::DoCreateOutStream()
return pStrOutStream;
}
void strStream::CheckString(const wxString& text)
{
wxStringOutputStream sos;
size_t len = text.length();
#if wxUSE_UNICODE
const wxCharBuffer textMB(wxConvLibc.cWC2MB(text.wc_str(), len + 1, &len));
#else
const char *textMB = text.c_str();
#endif
sos.Write(textMB, len);
CPPUNIT_ASSERT_EQUAL( text, sos.GetString() );
}
void strStream::Output_Check()
{
CheckString("Hello world!");
CheckString(wxString("hi\0dden", 8));
}
// Register the stream sub suite, by using some stream helper macro.
STREAM_TEST_SUBSUITE_NAMED_REGISTRATION(strStream)