зеркало из https://github.com/github/ruby.git
Guard for T_OBJECT at compile time (#53)
Previously this could crash on Nokogiri when JITing the getivar instruction because we would attempt to treat Nokogiri::XML::Document's T_DATA as a T_OBJECT in calling rb_iv_index_tbl_lookup. This commit also checks for T_OBJECT at compile time and emits the rb_ivar_get fallback in that case. Co-authored-by: HParker <HParker@github.com> Co-authored-by: Dinah Shi <dinahshi@github.com> Co-authored-by: HParker <HParker@github.com> Co-authored-by: Dinah Shi <dinahshi@github.com>
This commit is contained in:
Родитель
9283fc1bb5
Коммит
546ca8167d
|
@ -1014,7 +1014,8 @@ gen_get_ivar(jitstate_t *jit, ctx_t *ctx, const int max_chain_depth, VALUE compt
|
|||
// NOTE: This assumes nobody changes the allocator of the class after allocation.
|
||||
// Eventually, we can encode whether an object is T_OBJECT or not
|
||||
// inside object shapes.
|
||||
if (rb_get_alloc_func(comptime_val_klass) != rb_class_allocate_instance) {
|
||||
if (!RB_TYPE_P(comptime_receiver, T_OBJECT) ||
|
||||
rb_get_alloc_func(comptime_val_klass) != rb_class_allocate_instance) {
|
||||
// General case. Call rb_ivar_get(). No need to reconstruct interpreter
|
||||
// state since the routine never raises exceptions or allocate objects
|
||||
// visibile to Ruby.
|
||||
|
|
Загрузка…
Ссылка в новой задаче