Fixed symbol misused as ID

`rb_funcallv_public` and `rb_respond_to` require an `ID`, not a
`Symbol`.  [Bug #16649]

(cherry picked from commit 8b6e2685a4)
This commit is contained in:
Nobuyoshi Nakada 2020-02-24 15:33:50 +09:00 committed by NARUSE, Yui
parent 3e7e1b965b
commit fa48a26d88
3 changed files with 13 additions and 4 deletions

View file

@ -13,6 +13,7 @@
#include "internal.h"
#include "transcode_data.h"
#include <ctype.h>
#include "id.h"
#define ENABLE_ECONV_NEWLINE_OPTION 1
@ -23,7 +24,7 @@ static VALUE rb_eConverterNotFoundError;
VALUE rb_cEncodingConverter;
static VALUE sym_invalid, sym_undef, sym_replace, sym_fallback, sym_aref;
static VALUE sym_invalid, sym_undef, sym_replace, sym_fallback;
static VALUE sym_xml, sym_text, sym_attr;
static VALUE sym_universal_newline;
static VALUE sym_crlf_newline;
@ -2241,7 +2242,7 @@ method_fallback(VALUE fallback, VALUE c)
static VALUE
aref_fallback(VALUE fallback, VALUE c)
{
return rb_funcall3(fallback, sym_aref, 1, &c);
return rb_funcallv_public(fallback, idAREF, 1, &c);
}
static void
@ -2535,7 +2536,7 @@ rb_econv_prepare_options(VALUE opthash, VALUE *opts, int ecflags)
if (!NIL_P(v)) {
VALUE h = rb_check_hash_type(v);
if (NIL_P(h)
? (rb_obj_is_proc(v) || rb_obj_is_method(v) || rb_respond_to(v, sym_aref))
? (rb_obj_is_proc(v) || rb_obj_is_method(v) || rb_respond_to(v, idAREF))
: (v = h, 1)) {
if (NIL_P(newhash))
newhash = rb_hash_new();
@ -4408,7 +4409,6 @@ Init_transcode(void)
sym_undef = ID2SYM(rb_intern("undef"));
sym_replace = ID2SYM(rb_intern("replace"));
sym_fallback = ID2SYM(rb_intern("fallback"));
sym_aref = ID2SYM(rb_intern("[]"));
sym_xml = ID2SYM(rb_intern("xml"));
sym_text = ID2SYM(rb_intern("text"));
sym_attr = ID2SYM(rb_intern("attr"));