From: Vadim Zeitlin Date: Fri, 9 Mar 2012 01:09:20 +0000 (+0000) Subject: Check for end of string when parsing "%z" in wxDateTime::Format(). X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/649148f93e81a7883212a6f98546bbb3aadf7d5d 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 --- diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index fed909fe8a..c75d2e2c18 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -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; diff --git a/tests/datetime/datetimetest.cpp b/tests/datetime/datetimetest.cpp index 3d4fad74d1..71821d92e8 100644 --- a/tests/datetime/datetimetest.cpp +++ b/tests/datetime/datetimetest.cpp @@ -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");