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

View File

@@ -125,7 +125,7 @@ public:
wxString& GetPrevLine() /* const */ wxString& GetPrevLine() /* const */
{ wxASSERT(m_nCurLine > 0); return m_aLines[--m_nCurLine]; } { wxASSERT(m_nCurLine > 0); return m_aLines[--m_nCurLine]; }
wxString& GetLastLine() /* const */ 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) // get the type of the line (see also GetEOL)
wxTextFileType GetLineType(size_t n) const { return m_aTypes[n]; } 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( f.Open(wxString::FromAscii(GetTestFileName())) );
CPPUNIT_ASSERT_EQUAL( (size_t)0, f.GetLineCount() ); 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() void TextFileTestCase::ReadDOS()