From db91d29f7cd86849aa2df963f67d8b7202924b0d Mon Sep 17 00:00:00 2001 From: suke Date: Tue, 29 Jul 2014 13:25:02 +0000 Subject: * ext/win32ole/win32ole.c (hash2olerec): ignore WIN32OLE_RECORD instance variable if the variable is nil. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46998 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/win32ole/win32ole.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'ext') diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c index 9f1ae2ea33..7f1a7a5cff 100644 --- a/ext/win32ole/win32ole.c +++ b/ext/win32ole/win32ole.c @@ -143,7 +143,7 @@ const IID IID_IMultiLanguage2 = {0xDCCFC164, 0x2B38, 0x11d2, {0xB7, 0xEC, 0x00, #define WC2VSTR(x) ole_wc2vstr((x), TRUE) -#define WIN32OLE_VERSION "1.6.5" +#define WIN32OLE_VERSION "1.6.6" typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); @@ -1677,17 +1677,18 @@ hash2olerec(VALUE key, VALUE val, VALUE rec) IRecordInfo *pri; HRESULT hr; - Data_Get_Struct(rec, struct olerecorddata, prec); - pri = prec->pri; - - VariantInit(&var); - ole_val2variant(val, &var); - pbuf = ole_vstr2wc(key); - hr = pri->lpVtbl->PutField(pri, INVOKE_PROPERTYPUT, prec->pdata, pbuf, &var); - SysFreeString(pbuf); - VariantClear(&var); - if (FAILED(hr)) { - ole_raise(hr, eWIN32OLERuntimeError, "failed to putfield of `%s`", StringValuePtr(key)); + if (val != Qnil) { + Data_Get_Struct(rec, struct olerecorddata, prec); + pri = prec->pri; + VariantInit(&var); + ole_val2variant(val, &var); + pbuf = ole_vstr2wc(key); + hr = pri->lpVtbl->PutField(pri, INVOKE_PROPERTYPUT, prec->pdata, pbuf, &var); + SysFreeString(pbuf); + VariantClear(&var); + if (FAILED(hr)) { + ole_raise(hr, eWIN32OLERuntimeError, "failed to putfield of `%s`", StringValuePtr(key)); + } } return ST_CONTINUE; } -- cgit v1.2.3