@@ -349,7 +349,7 @@ static HRESULT ( STDMETHODCALLTYPE GetIDsOfNames )(
349
349
Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;
350
350
*/
351
351
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 );
353
353
free (psz );
354
354
if ((ID )(DISPID )nameid != nameid ) return E_NOINTERFACE ;
355
355
* rgDispId = (DISPID )nameid ;
@@ -3277,29 +3277,31 @@ fole_each(VALUE self)
3277
3277
static VALUE
3278
3278
fole_missing (int argc , VALUE * argv , VALUE self )
3279
3279
{
3280
- ID id ;
3280
+ VALUE mid , sym ;
3281
3281
const char * mname ;
3282
- size_t n ;
3282
+ long n ;
3283
3283
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 );
3286
3288
if (!mname ) {
3287
3289
rb_raise (rb_eRuntimeError , "fail: unknown method or property" );
3288
3290
}
3289
- n = strlen ( mname );
3291
+ n = RSTRING_LEN ( mid );
3290
3292
#if SIZEOF_SIZE_T > SIZEOF_LONG
3291
3293
if (n >= LONG_MAX ) {
3292
3294
rb_raise (rb_eRuntimeError , "too long method or property name" );
3293
3295
}
3294
3296
#endif
3295
3297
if (mname [n - 1 ] == '=' ) {
3296
3298
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 );
3298
3300
3299
3301
return ole_propertyput (self , argv [0 ], argv [1 ]);
3300
3302
}
3301
3303
else {
3302
- argv [0 ] = rb_enc_str_new (mname , ( long ) n , cWIN32OLE_enc );
3304
+ argv [0 ] = rb_enc_str_new (mname , n , cWIN32OLE_enc );
3303
3305
return ole_invoke (argc , argv , self , DISPATCH_METHOD |DISPATCH_PROPERTYGET , FALSE);
3304
3306
}
3305
3307
}
0 commit comments