X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dbcf443c7d19d415c23678c16d3da5cd8fbb151d..91885f468ae257fd295ae46750e91719646fa381:/src/common/textfile.cpp diff --git a/src/common/textfile.cpp b/src/common/textfile.cpp index c48a48d2ab..3334375b44 100644 --- a/src/common/textfile.cpp +++ b/src/common/textfile.cpp @@ -86,7 +86,7 @@ bool wxTextFile::OnClose() } -bool wxTextFile::OnRead(wxMBConv& conv) +bool wxTextFile::OnRead(const wxMBConv& conv) { // file should be opened and we must be in it's beginning wxASSERT( m_file.IsOpened() && m_file.Tell() == 0 ); @@ -98,7 +98,7 @@ bool wxTextFile::OnRead(wxMBConv& conv) // read and so the conversion would fail) and, as the file contents is kept // in memory by wxTextFile anyhow, it shouldn't be a big problem to read // the file entirely - const size_t bufSize = m_file.Length() + 4 /* for trailing NULs */; + const size_t bufSize = (size_t)(m_file.Length() + 4 /* for trailing NULs */ ); size_t bufPos = 0; wxCharBuffer buf(bufSize - 1 /* it adds 1 internally */); @@ -114,18 +114,8 @@ bool wxTextFile::OnRead(wxMBConv& conv) return false; } - eof = nRead == 0; - if ( eof ) - { - // append 4 trailing NUL bytes: this is needed to ensure that the - // string is going to be NUL-terminated, whatever is the encoding - // used (even UTF-32) - block[0] = - block[1] = - block[2] = - block[3] = '\0'; - nRead = 4; - } + if ( nRead == 0 ) + break; // this shouldn't happen but don't overwrite the buffer if it does wxCHECK_MSG( bufPos + nRead <= bufSize, false, @@ -136,9 +126,11 @@ bool wxTextFile::OnRead(wxMBConv& conv) bufPos += nRead; } - const wxString str(buf, conv); + const wxString str(buf, conv, bufPos); + + // this doesn't risk to happen in ANSI build #if wxUSE_UNICODE - if ( str.empty() ) + if ( bufSize > 4 && str.empty() ) { wxLogError(_("Failed to convert file contents to Unicode.")); return false; @@ -209,7 +201,7 @@ bool wxTextFile::OnRead(wxMBConv& conv) } -bool wxTextFile::OnWrite(wxTextFileType typeNew, wxMBConv& conv) +bool wxTextFile::OnWrite(wxTextFileType typeNew, const wxMBConv& conv) { wxFileName fn = m_strBufferName; @@ -239,4 +231,3 @@ bool wxTextFile::OnWrite(wxTextFileType typeNew, wxMBConv& conv) } #endif // wxUSE_TEXTFILE -