mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
encoding.c: defer finding encoding
* encoding.c (enc_m_loader): defer finding encoding object not to be infected by marshal source. [ruby-core:71793] [Bug #11760] * marshal.c (r_object0): enable compatible loader on USERDEF class. the loader function is called with the class itself, instead of an allocated object, and the loaded data. * marshal.c (compat_allocator_table): intialize compat_allocator_tbl on demand. * object.c (rb_undefined_alloc): extract from rb_obj_alloc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a497ed3733
commit
2a66cc554d
6 changed files with 59 additions and 5 deletions
19
encoding.c
19
encoding.c
|
@ -1264,6 +1264,14 @@ enc_compatible_p(VALUE klass, VALUE str1, VALUE str2)
|
|||
return rb_enc_from_encoding(enc);
|
||||
}
|
||||
|
||||
/* :nodoc: */
|
||||
static VALUE
|
||||
enc_s_alloc(VALUE klass)
|
||||
{
|
||||
rb_undefined_alloc(klass);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
/* :nodoc: */
|
||||
static VALUE
|
||||
enc_dump(int argc, VALUE *argv, VALUE self)
|
||||
|
@ -1275,6 +1283,13 @@ enc_dump(int argc, VALUE *argv, VALUE self)
|
|||
/* :nodoc: */
|
||||
static VALUE
|
||||
enc_load(VALUE klass, VALUE str)
|
||||
{
|
||||
return str;
|
||||
}
|
||||
|
||||
/* :nodoc: */
|
||||
static VALUE
|
||||
enc_m_loader(VALUE klass, VALUE str)
|
||||
{
|
||||
return enc_find(klass, str);
|
||||
}
|
||||
|
@ -1902,7 +1917,7 @@ Init_Encoding(void)
|
|||
int i;
|
||||
|
||||
rb_cEncoding = rb_define_class("Encoding", rb_cObject);
|
||||
rb_undef_alloc_func(rb_cEncoding);
|
||||
rb_define_alloc_func(rb_cEncoding, enc_s_alloc);
|
||||
rb_undef_method(CLASS_OF(rb_cEncoding), "new");
|
||||
rb_define_method(rb_cEncoding, "to_s", enc_name, 0);
|
||||
rb_define_method(rb_cEncoding, "inspect", enc_inspect, 0);
|
||||
|
@ -1934,6 +1949,8 @@ Init_Encoding(void)
|
|||
for (i = 0; i < enc_table.count; ++i) {
|
||||
rb_ary_push(list, enc_new(enc_table.list[i].enc));
|
||||
}
|
||||
|
||||
rb_marshal_define_compat(rb_cEncoding, Qnil, NULL, enc_m_loader);
|
||||
}
|
||||
|
||||
/* locale insensitive ctype functions */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue