diff options
author | suke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-27 00:48:20 +0000 |
---|---|---|
committer | suke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-12-27 00:48:20 +0000 |
commit | 2a16594d29eca7b7b92763c1aa9bbf0f8b63a82c (patch) | |
tree | 159093551aa95fa03953c88dea641d5ccd5c97fc /ext/win32ole | |
parent | 0a787b9d0e49f226fdf3d8acfa62b6ce0db8259e (diff) | |
download | ruby-2a16594d29eca7b7b92763c1aa9bbf0f8b63a82c.tar.gz |
* ext/win32ole/win32ole.c (ole_vstr2wc, ole_variant2val): fix blank
string conversion.
[Bug #11880]
Thanks Akio Tajima for the patch!
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53322 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/win32ole')
-rw-r--r-- | ext/win32ole/win32ole.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c index 02ad82b4d4..ac3c2a6a73 100644 --- a/ext/win32ole/win32ole.c +++ b/ext/win32ole/win32ole.c @@ -864,6 +864,9 @@ ole_vstr2wc(VALUE vstr) /* do not type-conversion here to prevent from other arguments * changing (if exist) */ Check_Type(vstr, T_STRING); + if (RSTRING_LEN(vstr) == 0) { + return NULL; + } enc = rb_enc_get(vstr); @@ -1571,10 +1574,16 @@ ole_variant2val(VARIANT *pvar) case VT_BSTR: { - if(V_ISBYREF(pvar)) - obj = ole_wc2vstr(*V_BSTRREF(pvar), FALSE); - else - obj = ole_wc2vstr(V_BSTR(pvar), FALSE); + if(V_ISBYREF(pvar)) { + obj = (SysStringLen(*V_BSTRREF(pvar)) == 0) + ? rb_str_new2("") + : ole_wc2vstr(*V_BSTRREF(pvar), FALSE); + } + else { + obj = (SysStringLen(V_BSTR(pvar)) == 0) + ? rb_str_new2("") + : ole_wc2vstr(V_BSTR(pvar), FALSE); + } break; } |