Index: /trunk/src/VBox/Main/ConsoleImpl-LiveMigration.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl-LiveMigration.cpp	(revision 23720)
+++ /trunk/src/VBox/Main/ConsoleImpl-LiveMigration.cpp	(revision 23721)
@@ -166,6 +166,7 @@
 
     AssertReturn(cchBuf > 1, VERR_INTERNAL_ERROR);
-
-    /* dead simple (stupid) approach. */
+    *pszBuf = '\0';
+
+    /* dead simple approach. */
     for (;;)
     {
@@ -174,5 +175,4 @@
         if (RT_FAILURE(rc))
         {
-            *pszBuf = '\0';
             LogRel(("Migration: RTTcpRead -> %Rrc while reading string ('%s')\n", rc, pszStart));
             return rc;
@@ -180,15 +180,12 @@
         if (    ch == '\n'
             ||  ch == '\0')
-        {
-            *pszBuf = '\0';
             return VINF_SUCCESS;
-        }
         if (cchBuf <= 1)
         {
-            *pszBuf = '\0';
             LogRel(("Migration: String buffer overflow: '%s'\n", pszStart));
             return VERR_BUFFER_OVERFLOW;
         }
         *pszBuf++ = ch;
+        *pszBuf = '\0';
         cchBuf--;
     }
@@ -953,4 +950,15 @@
             }
 
+            /* The EOS might not have been read, make sure it is. */
+            pState->mfStopReading = false;
+            size_t cbRead;
+            vrc = migrationTcpOpRead(pvUser, pState->moffStream, szCmd, 1, &cbRead);
+            if (vrc != VERR_EOF)
+            {
+                LogRel(("Migration: Draining migrationTcpOpRead -> %Rrc\n", vrc));
+                migrationTcpWriteNACK(pState, vrc);
+                break;
+            }
+
             vrc = migrationTcpWriteACK(pState);
             if (RT_FAILURE(vrc))
