Index: /trunk/src/VBox/Main/include/MachineDebuggerImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 56566)
+++ /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 56567)
@@ -138,5 +138,5 @@
     /** Function pointer.  */
     typedef FNLOGGETSTR *PFNLOGGETSTR;
-    HRESULT i_logStringProps(PRTLOGGER pLogger, PFNLOGGETSTR pfnLogGetStr, const char *pszLogGetStr, Utf8Str aSettings);
+    HRESULT i_logStringProps(PRTLOGGER pLogger, PFNLOGGETSTR pfnLogGetStr, const char *pszLogGetStr, Utf8Str *pstrSettings);
 
     Console * const mParent;
Index: /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp	(revision 56566)
+++ /trunk/src/VBox/Main/src-client/MachineDebuggerImpl.cpp	(revision 56567)
@@ -455,9 +455,6 @@
 
 HRESULT MachineDebugger::i_logStringProps(PRTLOGGER pLogger, PFNLOGGETSTR pfnLogGetStr,
-                                          const char *pszLogGetStr, Utf8Str astrSettings)
-{
-    BSTR *a_pbstrSettings = new BSTR;
-    astrSettings.cloneTo(a_pbstrSettings);
-
+                                          const char *pszLogGetStr, Utf8Str *pstrSettings)
+{
     /* Make sure the VM is powered up. */
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
@@ -470,6 +467,5 @@
     if (!pLogger)
     {
-        Bstr bstrEmpty;
-        bstrEmpty.cloneTo(a_pbstrSettings);
+        *pstrSettings = "";
         return S_OK;
     }
@@ -481,23 +477,18 @@
         char *pszBuf = (char *)RTMemTmpAlloc(cbBuf);
         AssertReturn(pszBuf, E_OUTOFMEMORY);
-
-        int rc = pfnLogGetStr(pLogger, pszBuf, cbBuf);
-        if (RT_SUCCESS(rc))
-        {
-            try
-            {
-                Bstr bstrRet(pszBuf);
-                bstrRet.detachTo(a_pbstrSettings);
-                hrc = S_OK;
-            }
-            catch (std::bad_alloc)
-            {
-                hrc = E_OUTOFMEMORY;
-            }
-            RTMemTmpFree(pszBuf);
-            return hrc;
-        }
-        RTMemTmpFree(pszBuf);
-        AssertReturn(rc == VERR_BUFFER_OVERFLOW, setError(VBOX_E_IPRT_ERROR, tr("%s returned %Rrc"), pszLogGetStr, rc));
+        int vrc = pstrSettings->reserveNoThrow(cbBuf);
+        if (RT_SUCCESS(vrc))
+        {
+            vrc = pfnLogGetStr(pLogger, pstrSettings->mutableRaw(), cbBuf);
+            if (RT_SUCCESS(vrc))
+            {
+                pstrSettings->jolt();
+                return S_OK;
+            }
+            *pstrSettings = "";
+            AssertReturn(vrc == VERR_BUFFER_OVERFLOW, setError(VBOX_E_IPRT_ERROR, tr("%s returned %Rrc"), pszLogGetStr, vrc));
+        }
+        else
+            return E_OUTOFMEMORY;
 
         /* try again with a bigger buffer. */
@@ -509,38 +500,30 @@
 HRESULT MachineDebugger::getLogDbgFlags(com::Utf8Str &aLogDbgFlags)
 {
-    HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetFlags, "RTGetFlags", aLogDbgFlags);
-
-    return hrc;
+    return i_logStringProps(RTLogGetDefaultInstance(), RTLogGetFlags, "RTGetFlags", &aLogDbgFlags);
 }
 
 HRESULT MachineDebugger::getLogDbgGroups(com::Utf8Str &aLogDbgGroups)
 {
-    HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", aLogDbgGroups);
-
-    return hrc;
+    return i_logStringProps(RTLogGetDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", &aLogDbgGroups);
 }
 
 HRESULT MachineDebugger::getLogDbgDestinations(com::Utf8Str &aLogDbgDestinations)
 {
-    HRESULT hrc = i_logStringProps(RTLogGetDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", aLogDbgDestinations);
-    return hrc;
+    return i_logStringProps(RTLogGetDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", &aLogDbgDestinations);
 }
 
 HRESULT MachineDebugger::getLogRelFlags(com::Utf8Str &aLogRelFlags)
 {
-    HRESULT hrc = i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetFlags, "RTGetFlags", aLogRelFlags);
-    return hrc;
+    return i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetFlags, "RTGetFlags", &aLogRelFlags);
 }
 
 HRESULT MachineDebugger::getLogRelGroups(com::Utf8Str &aLogRelGroups)
 {
-    HRESULT hrc = i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", aLogRelGroups);
-    return hrc;
+    return i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetGroupSettings, "RTLogGetGroupSettings", &aLogRelGroups);
 }
 
 HRESULT MachineDebugger::getLogRelDestinations(com::Utf8Str &aLogRelDestinations)
 {
-    HRESULT hrc = i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", aLogRelDestinations);
-    return hrc;
+    return i_logStringProps(RTLogRelGetDefaultInstance(), RTLogGetDestinations, "RTLogGetDestinations", &aLogRelDestinations);
 }
 
