]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed several bugs in ParseDate() (invalid dates could result in assert failure while...
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Mar 2006 16:20:43 +0000 (16:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 21 Mar 2006 16:20:43 +0000 (16:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38255 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/common/datetime.cpp

index 4f9a0716b9320aedf152d79c3fdd207ac07b1adf..0be81e0c1cb11594c775c8d3dd6d457cfd6de74b 100644 (file)
@@ -49,6 +49,7 @@ All:
 - Albanian translation added (Besnik Bleta)
 - Assert messages now show the function in which assert failed
 - wxApp::OnAssertFailure() should now be used instead the old wxApp::OnAssert()
+- Fixed several bugs in wxDateTime::ParseDate()
 
 All (GUI):
 
index ef51bf684b7b947e3b8ab4434a3e138c8b2b00ea..31d6a2ad18daa22473c94303eb9cc89731cb2bc5 100644 (file)
@@ -3817,9 +3817,11 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
                 }
                 else // may be either day or year
                 {
+                    // use a leap year if we don't have the year yet to allow
+                    // dates like 2/29/1976 which would be rejected otherwise
                     wxDateTime_t max_days = (wxDateTime_t)(
                         haveMon
-                        ? GetNumOfDaysInMonth(haveYear ? year : Inv_Year, mon)
+                        ? GetNumOfDaysInMonth(haveYear ? year : 1976, mon)
                         : 31
                     );
 
@@ -3972,7 +3974,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
     {
         wxLogDebug(_T("ParseDate: no day, no weekday hence no date."));
 
-        return (wxChar *)NULL;
+        return NULL;
     }
 
     if ( haveWDay && (haveMon || haveYear || haveDay) &&
@@ -3981,7 +3983,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
         // without adjectives (which we don't support here) the week day only
         // makes sense completely separately or with the full date
         // specification (what would "Wed 1999" mean?)
-        return (wxChar *)NULL;
+        return NULL;
     }
 
     if ( !haveWDay && haveYear && !(haveDay && haveMon) )
@@ -4011,7 +4013,7 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
             // if we give the year, month and day must be given too
             wxLogDebug(_T("ParseDate: day and month should be specified if year is."));
 
-            return (wxChar *)NULL;
+            return NULL;
         }
     }
 
@@ -4027,6 +4029,11 @@ const wxChar *wxDateTime::ParseDate(const wxChar *date)
 
     if ( haveDay )
     {
+        // normally we check the day above but the check is optimistic in case
+        // we find the day before its month/year so we have to redo it now
+        if ( day > GetNumOfDaysInMonth(year, mon) )
+            return NULL;
+
         Set(day, mon, year);
 
         if ( haveWDay )