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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy