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:
parent
49297c840b
commit
a7b9ab6200
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user