]> git.saurik.com Git - wxWidgets.git/commitdiff
No changes, just silence some MSVC 11 static analyzer warnings.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Sep 2012 23:20:23 +0000 (23:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Sep 2012 23:20:23 +0000 (23:20 +0000)
This is an aborted attempt to make wxWidgets code compile without warnings
when using MSVC 11 /analyze option, as it was supposed to have become much
better. Unfortunately it still produces way too many false positives to be
really useful, in particular NULL pointer detection is completely broken as
even the code such as (from object.cpp):

        wxClassInfo *info = sm_first;
        while (info)
        {
            if ( info->m_next == this )
                ...
        }

provokes tons of warnings about "info" being NULL inside the loop which is
clearly impossible.

So this commit just fixes a few obvious warnings, mostly about variable
shadowing but also a couple about possibly passing NULL to memcpy().

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

include/wx/buffer.h
src/common/cmdline.cpp
src/common/datetimefmt.cpp
src/common/filefn.cpp
src/common/wxcrt.cpp
src/msw/mimetype.cpp
src/msw/utils.cpp
src/msw/utilsexc.cpp
src/msw/volume.cpp

index 6d98f6e286e52d86b7ee52c2e5aaf9c8c220731d..951777a13c47fd9fe74544ebf843056fde0c812c 100644 (file)
@@ -230,7 +230,8 @@ protected:
     static CharType *StrCopy(const CharType *src, size_t len)
     {
         CharType *dst = (CharType*)malloc(sizeof(CharType) * (len + 1));
-        memcpy(dst, src, sizeof(CharType) * (len + 1));
+        if ( dst )
+            memcpy(dst, src, sizeof(CharType) * (len + 1));
         return dst;
     }
 
index 2952c2d6aea3c037908d60cb367600bf3a952d22..bb5bd83b93010f335b97cb3417e78e84c8953865 100644 (file)
@@ -969,8 +969,8 @@ int wxCmdLineParser::Parse(bool showUsage)
                         case wxCMD_LINE_VAL_DATE:
                             {
                                 wxDateTime dt;
-                                wxString::const_iterator end;
-                                if ( !dt.ParseDate(value, &end) || end != value.end() )
+                                wxString::const_iterator endDate;
+                                if ( !dt.ParseDate(value, &endDate) || endDate != value.end() )
                                 {
                                     errorMsg << wxString::Format(_("Option '%s': '%s' cannot be converted to a date."),
                                                                  name.c_str(), value.c_str())
index 3e51672eee3e63c779dbe1013afa45b736d657e4..fda6c0ad52925ba98a1b0ef2264c3a0cbe8b1f53 100644 (file)
@@ -514,7 +514,7 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const
                         // (indirectly) set the year correctly
                         while ( (nLostWeekDays % 7) != 0 )
                         {
-                            nLostWeekDays += year++ % 4 ? 1 : 2;
+                            nLostWeekDays += (year++ % 4) ? 1 : 2;
                         }
 
                         // finally move the year below 2000 so that the 2-digit
@@ -1725,12 +1725,12 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end)
         if ( len > lenRest )
             continue;
 
-        const wxString::const_iterator pEnd = p + len;
-        if ( wxString(p, pEnd).CmpNoCase(dateStr) == 0 )
+        const wxString::const_iterator pEndStr = p + len;
+        if ( wxString(p, pEndStr).CmpNoCase(dateStr) == 0 )
         {
             // nothing can follow this, so stop here
 
-            p = pEnd;
+            p = pEndStr;
 
             int dayDiffFromToday = literalDates[n].dayDiffFromToday;
             *this = Today();
@@ -1739,7 +1739,7 @@ wxDateTime::ParseDate(const wxString& date, wxString::const_iterator *end)
                 *this += wxDateSpan::Days(dayDiffFromToday);
             }
 
-            *end = pEnd;
+            *end = pEndStr;
 
             return true;
         }
index a05b15e438e029042d3321702d111fe143e37b47..2e04e80098cb9d0233f83ef37ca598cf4315d576 100644 (file)
@@ -1574,8 +1574,12 @@ wxString wxGetOSDirectory()
 #ifdef __WXWINCE__
     return wxString(wxT("\\Windows"));
 #elif defined(__WINDOWS__) && !defined(__WXMICROWIN__)
-    wxChar buf[256];
-    GetWindowsDirectory(buf, 256);
+    wxChar buf[MAX_PATH];
+    if ( !GetWindowsDirectory(buf, MAX_PATH) )
+    {
+        wxLogLastError(wxS("GetWindowsDirectory"));
+    }
+
     return wxString(buf);
 #elif defined(__WXMAC__) && wxOSX_USE_CARBON
     return wxMacFindFolderNoSeparator(kOnSystemDisk, 'macs', false);
index f58ac30fd0dc79f597521d54e620f5095b044a5c..5e8304da52f22d0ba6e4fad984c31dda94e00d7c 100644 (file)
@@ -834,7 +834,8 @@ wxChar32* wxStrdup(const wxChar32* s)
 {
   size_t size = (wxStrlen(s) + 1) * sizeof(wxChar32);
   wxChar32 *ret = (wxChar32*) malloc(size);
-  memcpy(ret, s, size);
+  if ( ret )
+      memcpy(ret, s, size);
   return ret;
 }
 #endif
index 3fbbbe983e86c1e13d844eab50225f8686851c89..10ee1d09540a14ab0a1c4f07a4fbe26936b47278 100644 (file)
@@ -636,22 +636,23 @@ wxFileType *wxMimeTypesManagerImpl::Associate(const wxFileTypeInfo& ftInfo)
            extWithDot = wxT('.');
         extWithDot += ext;
 
-        wxRegKey key(wxRegKey::HKCR, extWithDot);
-        if ( !key.Exists() ) key.Create();
-        key.SetValue(wxEmptyString, filetype);
+        wxRegKey key2(wxRegKey::HKCR, extWithDot);
+        if ( !key2.Exists() )
+            key2.Create();
+        key2.SetValue(wxEmptyString, filetype);
 
         // now set any mimetypes we may have, but ignore it if none
-        const wxString& mimetype = ftInfo.GetMimeType();
-        if ( !mimetype.empty() )
+        const wxString& mimetype2 = ftInfo.GetMimeType();
+        if ( !mimetype2.empty() )
         {
             // set the MIME type
-            ok = key.SetValue(wxT("Content Type"), mimetype);
+            ok = key2.SetValue(wxT("Content Type"), mimetype2);
 
             if ( ok )
             {
                 // create the MIME key
                 wxString strKey = MIME_DATABASE_KEY;
-                strKey << mimetype;
+                strKey << mimetype2;
                 wxRegKey keyMIME(wxRegKey::HKCR, strKey);
                 ok = keyMIME.Create();
 
index b5e56d50f74cccc2d84c818c3ef797797cf917ca..ce4b688f887fea745258670615541f3d75d50718 100644 (file)
@@ -636,7 +636,8 @@ bool wxDoSetEnv(const wxString& var, const wxChar *value)
     envstr += '=';
     if ( value )
         envstr += value;
-    _tputenv(envstr.t_str());
+    if ( !_tputenv(envstr.t_str()) )
+        return false;
 #else // other compiler
     if ( !::SetEnvironmentVariable(var.t_str(), value) )
     {
index 416fe17562c293a26d5774b7b568db8fcfdf4f9e..cd3572e44d108d3be17a1ea90d9f019825130a47 100644 (file)
@@ -996,7 +996,7 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler,
     // just launched process
     if ( !ddeServer.empty() )
     {
-        bool ok;
+        bool ddeOK;
 
         // give the process the time to init itself
         //
@@ -1015,15 +1015,15 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler,
             case WAIT_TIMEOUT:
                 wxLogDebug(wxT("Timeout too small in WaitForInputIdle"));
 
-                ok = false;
+                ddeOK = false;
                 break;
 
             case 0:
                 // ok, process ready to accept DDE requests
-                ok = wxExecuteDDE(ddeServer, ddeTopic, ddeCommand);
+                ddeOK = wxExecuteDDE(ddeServer, ddeTopic, ddeCommand);
         }
 
-        if ( !ok )
+        if ( !ddeOK )
         {
             wxLogDebug(wxT("Failed to send DDE request to the process \"%s\"."),
                        cmd.c_str());
index 397eb7e2280399974498a0de757510b622695107..06c454ebc9677b964cb392e5460618afcf96fb5e 100644 (file)
@@ -506,12 +506,13 @@ bool wxFSVolumeBase::Create(const wxString& name)
     if (!rc)
     {
         wxLogError(_("Cannot read typename from '%s'!"), m_volName.c_str());
-        return m_isOk;
+        return false;
     }
     m_dispName = fi.szDisplayName;
 
     // all tests passed.
-    return m_isOk = true;
+    m_isOk = true;
+    return true;
 } // Create
 
 //=============================================================================