qingdoa daoo wrote:

Hi,

This patch should fix Bug 4141

Changelog:
Copying a NULL BSTR should result in an empty BSTR in VariantCopy

------------------------------------------------------------------------

--- dlls/oleaut32/variant.c.cvs 2006-07-05 17:23:04.000000000 +0800
+++ dlls/oleaut32/variant.c     2006-07-05 17:31:53.000000000 +0800
@@ -719,13 +719,16 @@ HRESULT WINAPI VariantCopy(VARIANTARG* p
      else if (V_VT(pvargSrc) == VT_BSTR)
      {
        if (V_BSTR(pvargSrc))
-        {
          V_BSTR(pvargDest) = SysAllocStringByteLen((char*)V_BSTR(pvargSrc), 
SysStringByteLen(V_BSTR(pvargSrc)));
-          if (!V_BSTR(pvargDest))
-         {
-           TRACE("!V_BSTR(pvargDest), SysAllocStringByteLen() failed to allocate %d 
bytes\n", SysStringByteLen(V_BSTR(pvargSrc)));
-            hres = E_OUTOFMEMORY;
-         }
+        else
+        {
+          OLECHAR c = 0;
+          V_BSTR(pvargDest) = SysAllocString(&c);
+        }
+        if (!V_BSTR(pvargDest))
+        {
+          TRACE("Allocation failed for destination BSTR\n");
+          hres = E_OUTOFMEMORY;
        }
      }
      else if (V_VT(pvargSrc) == VT_RECORD)

I think you could get the same result by just removing the "if (V_BSTR(pvargSrc)" check. This should result in simpler code.

--
Rob Shearman



Reply via email to