Index: /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 29541)
+++ /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 29542)
@@ -107,6 +107,9 @@
         com::SafeArray <BYTE> aShape(ComSafeArrayInArg (pShape));
         size_t cbShapeSize = aShape.size();
-        shape.resize(cbShapeSize);
-        ::memcpy(shape.raw(), aShape.raw(), cbShapeSize);
+        if (cbShapeSize > 0)
+        {
+            shape.resize(cbShapeSize);
+            ::memcpy(shape.raw(), aShape.raw(), cbShapeSize);
+        }
     }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp	(revision 29541)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp	(revision 29542)
@@ -216,6 +216,9 @@
         com::SafeArray <BYTE> aShape(ComSafeArrayInArg (pShape));
         size_t cbShapeSize = aShape.size();
-        shape.resize(cbShapeSize);
-        ::memcpy(shape.raw(), aShape.raw(), cbShapeSize);
+        if (cbShapeSize > 0)
+        {
+            shape.resize(cbShapeSize);
+            ::memcpy(shape.raw(), aShape.raw(), cbShapeSize);
+        }
     }
     ~MousePointerChangeEvent()
@@ -228,5 +231,5 @@
     uint width() const { return w; }
     uint height() const { return h; }
-    const uchar *shapeData() const { return shape.raw(); }
+    const uchar *shapeData() const { return shape.size() > 0 ? shape.raw() : NULL; }
 private:
     bool vis, alph;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 29541)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 29542)
@@ -60,7 +60,10 @@
     {
         com::SafeArray <BYTE> aShape(ComSafeArrayInArg (pShape));
-        size_t cbShapeSize = aShape.size();
-        m_shape.resize(cbShapeSize);
-        ::memcpy(m_shape.raw(), aShape.raw(), cbShapeSize);
+        size_t cbShapeSize = aShape.size();        
+        if (cbShapeSize > 0)
+        {
+            m_shape.resize(cbShapeSize);
+            ::memcpy(m_shape.raw(), aShape.raw(), cbShapeSize);
+        }
     }
 
@@ -75,5 +78,5 @@
     uint width() const { return m_uWidth; }
     uint height() const { return m_uHeight; }
-    const uchar *shapeData() const { return m_shape.raw(); }
+    const uchar *shapeData() const { return m_shape.size() > 0 ? m_shape.raw() : NULL; }
 
 private:
Index: /trunk/src/VBox/Main/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/DisplayImpl.cpp	(revision 29541)
+++ /trunk/src/VBox/Main/DisplayImpl.cpp	(revision 29542)
@@ -3829,8 +3829,15 @@
     Display *pThis = pDrv->pDisplay;
 
-    size_t cbShapeSize = (cx + 7) / 8 * cy; /* size of the AND mask */
-    cbShapeSize = ((cbShapeSize + 3) & ~3) + cx * 4 * cy; /* + gap + size of the XOR mask */
+    size_t cbShapeSize = 0;
+
+    if (pvShape)
+    {
+        cbShapeSize = (cx + 7) / 8 * cy; /* size of the AND mask */
+        cbShapeSize = ((cbShapeSize + 3) & ~3) + cx * 4 * cy; /* + gap + size of the XOR mask */
+    }
     com::SafeArray<BYTE> shapeData(cbShapeSize);
-    ::memcpy(shapeData.raw(), pvShape, cbShapeSize);
+
+    if (pvShape)
+        ::memcpy(shapeData.raw(), pvShape, cbShapeSize);
 
     /* Tell the console about it */
Index: /trunk/src/VBox/Main/VMMDevInterface.cpp
===================================================================
--- /trunk/src/VBox/Main/VMMDevInterface.cpp	(revision 29541)
+++ /trunk/src/VBox/Main/VMMDevInterface.cpp	(revision 29542)
@@ -284,8 +284,14 @@
 
     /* tell the console about it */
-    size_t cbShapeSize = (width + 7) / 8 * height; /* size of the AND mask */
-    cbShapeSize = ((cbShapeSize + 3) & ~3) + width * 4 * height; /* + gap + size of the XOR mask */
+    size_t cbShapeSize = 0;
+
+    if (pShape)
+    {
+        cbShapeSize = (width + 7) / 8 * height; /* size of the AND mask */
+        cbShapeSize = ((cbShapeSize + 3) & ~3) + width * 4 * height; /* + gap + size of the XOR mask */
+    }
     com::SafeArray<BYTE> shapeData(cbShapeSize);
-    ::memcpy(shapeData.raw(), pShape, cbShapeSize);
+    if (pShape)
+        ::memcpy(shapeData.raw(), pShape, cbShapeSize);
     pDrv->pVMMDev->getParent()->onMousePointerShapeChange(fVisible, fAlpha,
                                                           xHot, yHot, width, height, ComSafeArrayAsInParam(shapeData));
