diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-04-03 01:06:56 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-04-03 01:16:57 +0900 |
commit | 2a4049b23c081eb5509490bac0414ac40e83c5c4 (patch) | |
tree | 48f2bfdd9590d8c6bb8611528dddc1b08ce7ac0e | |
parent | 2544bf9452b5208a450509aa219bc33aeffbd292 (diff) |
Bail out before pushing unexpected object
-rw-r--r-- | gc.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -4629,6 +4629,18 @@ free_stack_chunks(mark_stack_t *stack) static void push_mark_stack(mark_stack_t *stack, VALUE data) { + VALUE obj = data; + switch (BUILTIN_TYPE(obj)) { + case T_NIL: + case T_FIXNUM: + rb_bug("push_mark_stack() called for broken object"); + break; + + case T_NODE: + UNEXPECTED_NODE(push_mark_stack); + break; + } + if (stack->index == stack->limit) { push_mark_stack_chunk(stack); } |