]> git.saurik.com Git - wxWidgets.git/commitdiff
Don't return a dangling pointer from wxDateTime::ParseXXX(wxCStrData).
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 May 2012 21:37:25 +0000 (21:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 May 2012 21:37:25 +0000 (21:37 +0000)
We don't have any sufficiently long-lived pointer to return from this
overload, so don't return anything from it -- it's better to break the
compilation of the existing code rather than make it crash during run-time.

Closes #14214.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71430 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/datetime.h

index 3f795ed8673c2a53daed25004c3683885b6fd5c8..709dc588664242499f14db0dfa1d6849fe340912 100644 (file)
@@ -285,6 +285,12 @@ Changes in behaviour which may result in compilation errors
     error instead. This can be worked around by explicitly casting to const
     wxChar*: wxLogError(_("error: %s"), !err.empty() ? (const wxChar*)err.c_str() : "")
 
+- wxDateTime::ParseXXX() overloads don't return anything when called with
+  wxCStrData argument. If you need to test the parsing success, use a newer
+  overload taking wxString::const_iterator and returning bool or explicitly
+  select a narrow or wide char version to use by casting c_str() to either
+  "char*" or "wchar_t*". Or create a temporary wxString and parse it instead.
+
 - wxCtime() and wxAsctime() return char*; this is incompatible with Unicode
   build in wxWidgets 2.8 that returned wchar_t*.
 
index 75eb188a9f3ce13587c0057dae4af4a5fa8cd80b..cc1e6d791a3e2e8bfc2ea25ed3bdb91cba36e22b 100644 (file)
@@ -1211,15 +1211,23 @@ public:
     // if the overloads above were used.
     //
     // And then we also have to provide the overloads for wxCStrData, as usual.
-    wxAnyStrPtr ParseRfc822Date(const wxCStrData& date)
-        { return ParseRfc822Date(wxString(date)); }
+    // Unfortunately those ones can't return anything as we don't have any
+    // sufficiently long-lived wxAnyStrPtr to return from them: any temporary
+    // strings it would point to would be destroyed when this function returns
+    // making it impossible to dereference the return value. So we just don't
+    // return anything from here which at least allows to keep compatibility
+    // with the code not testing the return value. Other uses of this method
+    // need to be converted to use one of the new bool-returning overloads
+    // above.
+    void ParseRfc822Date(const wxCStrData& date)
+        { ParseRfc822Date(wxString(date)); }
     const char* ParseRfc822Date(const char* date);
     const wchar_t* ParseRfc822Date(const wchar_t* date);
 
-    wxAnyStrPtr ParseFormat(const wxCStrData& date,
-                            const wxString& format = wxDefaultDateTimeFormat,
-                            const wxDateTime& dateDef = wxDefaultDateTime)
-        { return ParseFormat(wxString(date), format, dateDef); }
+    void ParseFormat(const wxCStrData& date,
+                     const wxString& format = wxDefaultDateTimeFormat,
+                     const wxDateTime& dateDef = wxDefaultDateTime)
+        { ParseFormat(wxString(date), format, dateDef); }
     const char* ParseFormat(const char* date,
                             const wxString& format = wxDefaultDateTimeFormat,
                             const wxDateTime& dateDef = wxDefaultDateTime);
@@ -1227,18 +1235,18 @@ public:
                                const wxString& format = wxDefaultDateTimeFormat,
                                const wxDateTime& dateDef = wxDefaultDateTime);
 
-    wxAnyStrPtr ParseDateTime(const wxCStrData& datetime)
-        { return ParseDateTime(wxString(datetime)); }
+    void ParseDateTime(const wxCStrData& datetime)
+        { ParseDateTime(wxString(datetime)); }
     const char* ParseDateTime(const char* datetime);
     const wchar_t* ParseDateTime(const wchar_t* datetime);
 
-    wxAnyStrPtr ParseDate(const wxCStrData& date)
-        { return ParseDate(wxString(date)); }
+    void ParseDate(const wxCStrData& date)
+        { ParseDate(wxString(date)); }
     const char* ParseDate(const char* date);
     const wchar_t* ParseDate(const wchar_t* date);
 
-    wxAnyStrPtr ParseTime(const wxCStrData& time)
-        { return ParseTime(wxString(time)); }
+    void ParseTime(const wxCStrData& time)
+        { ParseTime(wxString(time)); }
     const char* ParseTime(const char* time);
     const wchar_t* ParseTime(const wchar_t* time);