Skip to content

Commit 5563173

Browse files
committed
win32ole.c: inadvertent symbol creation
* ext/win32ole/win32ole.c (GetIDsOfNames, fole_missing): avoid inadvertent symbol creation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 288fa8d commit 5563173

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

ext/win32ole/win32ole.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ static HRESULT ( STDMETHODCALLTYPE GetIDsOfNames )(
349349
Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;
350350
*/
351351
char* psz = ole_wc2mb(*rgszNames); // support only one method
352-
ID nameid = rb_intern(psz);
352+
ID nameid = rb_check_id_cstr(psz, (long)strlen(psz), cWIN32OLE_enc);
353353
free(psz);
354354
if ((ID)(DISPID)nameid != nameid) return E_NOINTERFACE;
355355
*rgDispId = (DISPID)nameid;
@@ -3277,29 +3277,31 @@ fole_each(VALUE self)
32773277
static VALUE
32783278
fole_missing(int argc, VALUE *argv, VALUE self)
32793279
{
3280-
ID id;
3280+
VALUE mid, sym;
32813281
const char* mname;
3282-
size_t n;
3282+
long n;
32833283
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
3284-
id = rb_to_id(argv[0]);
3285-
mname = rb_id2name(id);
3284+
mid = argv[0];
3285+
sym = rb_check_symbol(&mid);
3286+
if (sym) mid = rb_sym2str(sym);
3287+
mname = StringValueCStr(mid);
32863288
if(!mname) {
32873289
rb_raise(rb_eRuntimeError, "fail: unknown method or property");
32883290
}
3289-
n = strlen(mname);
3291+
n = RSTRING_LEN(mid);
32903292
#if SIZEOF_SIZE_T > SIZEOF_LONG
32913293
if (n >= LONG_MAX) {
32923294
rb_raise(rb_eRuntimeError, "too long method or property name");
32933295
}
32943296
#endif
32953297
if(mname[n-1] == '=') {
32963298
rb_check_arity(argc, 2, 2);
3297-
argv[0] = rb_enc_str_new(mname, (long)(n-1), cWIN32OLE_enc);
3299+
argv[0] = rb_enc_str_new(mname, (n-1), cWIN32OLE_enc);
32983300

32993301
return ole_propertyput(self, argv[0], argv[1]);
33003302
}
33013303
else {
3302-
argv[0] = rb_enc_str_new(mname, (long)n, cWIN32OLE_enc);
3304+
argv[0] = rb_enc_str_new(mname, n, cWIN32OLE_enc);
33033305
return ole_invoke(argc, argv, self, DISPATCH_METHOD|DISPATCH_PROPERTYGET, FALSE);
33043306
}
33053307
}

0 commit comments

Comments
 (0)