From 3d980e1643305ff2ef7492d5fe25d89f63b29268 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 12 Jun 2015 13:01:40 +0000 Subject: vm.c: break from orphan block * vm.c (rb_vm_search_cf_from_ep): break from orphan block is possible condition, but not [BUG]. [ruby-core:69548] [Bug #11254] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'vm.c') diff --git a/vm.c b/vm.c index fc135b00fa..408dc6dc13 100644 --- a/vm.c +++ b/vm.c @@ -44,7 +44,7 @@ rb_vm_search_cf_from_ep(const rb_thread_t * const th, rb_control_frame_t *cfp, c cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); } - rb_bug("rb_vm_search_cf_from_ep: no corresponding cfp"); + return NULL; } } @@ -1201,6 +1201,12 @@ vm_iter_break(rb_thread_t *th, VALUE val) VALUE *ep = VM_CF_PREV_EP(cfp); rb_control_frame_t *target_cfp = rb_vm_search_cf_from_ep(th, cfp, ep); +#if 0 /* raise LocalJumpError */ + if (!target_cfp) { + rb_vm_localjump_error("unexpected break", val, TAG_BREAK); + } +#endif + th->state = TAG_BREAK; th->errinfo = (VALUE)THROW_DATA_NEW(val, target_cfp, TAG_BREAK); TH_JUMP_TAG(th, TAG_BREAK); -- cgit v1.2.3