Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 105874)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp	(revision 105875)
@@ -1068,26 +1068,28 @@
         {
             pDir->pszPathAbs = RTStrDup(szPath);
-            if (!pDir->pszPathAbs)
+            if (pDir->pszPathAbs)
+            {
+                /* Save reading parameters for subsequent directory entry read calls later. */
+                pDir->fRead          = fReadFlags;
+                pDir->enmReadAttrAdd = enmAttrAdd;
+
+                pDir->cbDirEntryEx = GSTCTL_DIRENTRY_MAX_SIZE;
+                pDir->pDirEntryEx  = (PRTDIRENTRYEX)RTMemAlloc(pDir->cbDirEntryEx);
+                if (pDir->pDirEntryEx)
+                {
+                    rc = RTDirOpenFiltered(&pDir->hDir, pDir->pszPathAbs, (RTDIRFILTER)enmFilter, fFlags);
+                    if (RT_SUCCESS(rc))
+                    {
+                        uHandle = VBOX_GUESTCTRL_CONTEXTID_GET_OBJECT(pHostCtx->uContextID);
+                        pDir->uHandle = uHandle;
+                        RTListAppend(&pSession->lstDirs, &pDir->Node);
+                        VGSvcVerbose(2, "[Dir %s] Opened (ID=%RU32)\n", pDir->pszPathAbs, pDir->uHandle);
+                    }
+                }
+                else
+                    rc = VERR_NO_MEMORY;
+            }
+            else
                 rc = VERR_NO_MEMORY;
-
-            /* Save reading parameters for subsequent directory entry read calls later. */
-            pDir->fRead          = fReadFlags;
-            pDir->enmReadAttrAdd = enmAttrAdd;
-
-            pDir->cbDirEntryEx = GSTCTL_DIRENTRY_MAX_SIZE;
-            pDir->pDirEntryEx  = (PRTDIRENTRYEX)RTMemAlloc(pDir->cbDirEntryEx);
-            AssertPtrReturn(pDir->pDirEntryEx, VERR_NO_MEMORY);
-
-            if (RT_SUCCESS(rc))
-            {
-                rc = RTDirOpenFiltered(&pDir->hDir, pDir->pszPathAbs, (RTDIRFILTER)enmFilter, fFlags);
-                if (RT_SUCCESS(rc))
-                {
-                    uHandle = VBOX_GUESTCTRL_CONTEXTID_GET_OBJECT(pHostCtx->uContextID);
-                    pDir->uHandle = uHandle;
-                    RTListAppend(&pSession->lstDirs, &pDir->Node);
-                    VGSvcVerbose(2, "[Dir %s] Opened (ID=%RU32)\n", pDir->pszPathAbs, pDir->uHandle);
-                }
-            }
         }
         else
@@ -1101,7 +1103,9 @@
         {
             RTStrFree(pDir->pszPathAbs);
+            pDir->pszPathAbs = NULL;
             if (pDir->hDir != NIL_RTDIR)
                 RTDirClose(pDir->hDir);
             RTMemFree(pDir);
+            pDir = NULL;
         }
 
