Check for end of string when parsing "%z" in wxDateTime::Format().

We could dereference an invalid iterator when parsing "%z", check for this in
the code and add a unit test for this case.

Closes #14075.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70846 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-03-09 01:09:20 +00:00
parent be88fea9ea
commit 649148f93e
2 changed files with 8 additions and 0 deletions

View File

@ -1408,6 +1408,11 @@ wxDateTime::ParseFormat(const wxString& date,
case wxT('z'):
{
// check that we have something here at all
if ( input == end )
return false;
// and then check that it's either plus or minus sign
bool minusFound;
if ( *input == wxT('-') )
minusFound = true;

View File

@ -829,6 +829,9 @@ void DateTimeTestCase::TestTimeFormat()
CPPUNIT_ASSERT( dt.ParseFormat("17", "%d") );
CPPUNIT_ASSERT_EQUAL( 17, dt.GetDay() );
// test some degenerate cases
CPPUNIT_ASSERT( !dt.ParseFormat("", "%z") );
// test compilation of some calls which should compile (and not result in
// ambiguity because of char*<->wxCStrData<->wxString conversions)
wxString s("foo");