Don't crash in wxTextFile::GetLastLine() if the file is empty

Just return a reference to an empty wxString, as GetFirstLine() already does
(although this is actually questionable -- what if this string is modified?).

See #17283.
This commit is contained in:
Vadim Zeitlin
2016-06-09 16:48:01 +02:00
parent dd562649f0
commit 023ee99ea7
3 changed files with 5 additions and 1 deletions

View File

@@ -73,6 +73,7 @@ All:
- Make it easier to convert to/from UTF-8-encoded std::string (ARATA Mizuki).
- Add support for loading dynamic lexer in wxStyledTextCtrl (New Pagodi).
- Handle strings with embedded NULs in wxDataStream (Nitch).
- Don't crash in wxTextFile::GetLastLine() if the file is empty (crohr).
All (GUI):

View File

@@ -125,7 +125,7 @@ public:
wxString& GetPrevLine() /* const */
{ wxASSERT(m_nCurLine > 0); return m_aLines[--m_nCurLine]; }
wxString& GetLastLine() /* const */
{ m_nCurLine = m_aLines.size() - 1; return m_aLines.Last(); }
{ return m_aLines.empty() ? ms_eof : m_aLines[m_nCurLine = m_aLines.size() - 1]; }
// get the type of the line (see also GetEOL)
wxTextFileType GetLineType(size_t n) const { return m_aTypes[n]; }

View File

@@ -117,6 +117,9 @@ void TextFileTestCase::ReadEmpty()
CPPUNIT_ASSERT( f.Open(wxString::FromAscii(GetTestFileName())) );
CPPUNIT_ASSERT_EQUAL( (size_t)0, f.GetLineCount() );
CPPUNIT_ASSERT( f.Eof() );
CPPUNIT_ASSERT_EQUAL( "", f.GetFirstLine() );
CPPUNIT_ASSERT_EQUAL( "", f.GetLastLine() );
}
void TextFileTestCase::ReadDOS()