]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fileconf.cpp
fix memory leak in wxScreenDC, fixes #13249
[wxWidgets.git] / src / common / fileconf.cpp
index 42c8b950ed6f2497976914092d1840cadf93da89..33b83d88e74252b1be1613806033271e2d3bb78c 100644 (file)
@@ -146,7 +146,7 @@ private:
 
   wxString      m_strName,      // entry name
                 m_strValue;     //       value
-  bool          m_bImmutable:1, // can be overriden locally?
+  bool          m_bImmutable:1, // can be overridden locally?
                 m_bHasValue:1;  // set after first call to SetValue()
 
   int           m_nLine;        // used if m_pLine == NULL only
@@ -469,32 +469,35 @@ wxFileConfig::wxFileConfig(wxInputStream &inStream, const wxMBConv& conv)
     cbuf = wxCharBuffer::CreateNonOwned((char *)buf.GetData(), buf.GetDataLen());
 #endif // wxUSE_UNICODE/!wxUSE_UNICODE
 
-
-    // now break it into lines
-    wxMemoryText memText;
-    for ( const wxChar *s = cbuf; ; ++s )
+    // parse the input contents if there is anything to parse
+    if ( cbuf )
     {
-        const wxChar *e = s;
-        while ( *e != '\0' && *e != '\n' && *e != '\r' )
-            ++e;
+        // now break it into lines
+        wxMemoryText memText;
+        for ( const wxChar *s = cbuf; ; ++s )
+        {
+            const wxChar *e = s;
+            while ( *e != '\0' && *e != '\n' && *e != '\r' )
+                ++e;
 
-        // notice that we throw away the original EOL kind here, maybe we
-        // should preserve it?
-        if ( e != s )
-            memText.AddLine(wxString(s, e));
+            // notice that we throw away the original EOL kind here, maybe we
+            // should preserve it?
+            if ( e != s )
+                memText.AddLine(wxString(s, e));
 
-        if ( *e == '\0' )
-            break;
+            if ( *e == '\0' )
+                break;
 
-        // skip the second EOL byte if it's a DOS one
-        if ( *e == '\r' && e[1] == '\n' )
-            ++e;
+            // skip the second EOL byte if it's a DOS one
+            if ( *e == '\r' && e[1] == '\n' )
+                ++e;
 
-        s = e;
-    }
+            s = e;
+        }
 
-    // Finally we can parse it all.
-    Parse(memText, true /* local */);
+        // Finally we can parse it all.
+        Parse(memText, true /* local */);
+    }
 
     SetRootPath();
     ResetDirty();
@@ -658,7 +661,7 @@ void wxFileConfig::Parse(const wxTextBuffer& buffer, bool bLocal)
           // which is exactly what we want.
           else if ( !bLocal || pEntry->IsLocal() ) {
             wxLogWarning(_("file '%s', line %d: key '%s' was first found at line %d."),
-                         buffer.GetName(), n + 1, strKey.c_str(), pEntry->Line());
+                         buffer.GetName(), (int)n + 1, strKey.c_str(), pEntry->Line());
 
           }
         }