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:
		| @@ -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): | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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]; } | ||||||
|   | |||||||
| @@ -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() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user