fix potential crash in QProcessEnvironment::systemEnvironment() on windows
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Mon, 2 May 2011 13:37:33 +0000 (15:37 +0200)
committerOlivier Goffart <olivier.goffart@nokia.com>
Tue, 10 May 2011 10:54:54 +0000 (12:54 +0200)
GetEnvironmentStrings() can theoretically return null
(cherry picked from commit 443608952d7df9a5146317be992320ba232d2cf9)

src/corelib/io/qprocess_win.cpp

index 7739bbd..0c8becc 100644 (file)
@@ -283,18 +283,19 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment()
     QProcessEnvironment env;
     // Calls to setenv() affect the low-level environment as well.
     // This is not the case the other way round.
-    wchar_t *envStrings = GetEnvironmentStringsW();
-    for (const wchar_t *entry = envStrings; *entry; ) {
-        int entryLen = wcslen(entry);
-        if (const wchar_t *equal = wcschr(entry, L'=')) {
-            int nameLen = equal - entry;
-            QString name = QString::fromWCharArray(entry, nameLen);
-            QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1);
-            env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value);
+    if (wchar_t *envStrings = GetEnvironmentStringsW()) {
+        for (const wchar_t *entry = envStrings; *entry; ) {
+            int entryLen = wcslen(entry);
+            if (const wchar_t *equal = wcschr(entry, L'=')) {
+                int nameLen = equal - entry;
+                QString name = QString::fromWCharArray(entry, nameLen);
+                QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1);
+                env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value);
+            }
+            entry += entryLen + 1;
         }
-        entry += entryLen + 1;
+        FreeEnvironmentStrings(envStrings);
     }
-    FreeEnvironmentStrings(envStrings);
     return env;
 }