From 34e61ca92bcf34121e439e880a8a5cd4b667da14 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 19 Jul 2015 00:25:45 +0000 Subject: [PATCH] eval.c: check tag value * eval.c (rb_jump_tag): paranoiac check of tag value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 3 +++ eval_error.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/eval.c b/eval.c index 8c8ac947f6..69a15d9985 100644 --- a/eval.c +++ b/eval.c @@ -755,6 +755,9 @@ rb_raise_jump(VALUE mesg, VALUE cause) void rb_jump_tag(int tag) { + if (UNLIKELY(tag < TAG_RETURN || tag > TAG_FATAL)) { + unknown_longjmp_status(tag); + } JUMP_TAG(tag); } diff --git a/eval_error.c b/eval_error.c index 0f2f165cc8..e907d7ee88 100644 --- a/eval_error.c +++ b/eval_error.c @@ -258,6 +258,9 @@ sysexit_status(VALUE err) return NUM2INT(st); } +#define unknown_longjmp_status(status) \ + rb_bug("Unknown longjmp status %d", status) + static int error_handle(int ex) { @@ -314,7 +317,7 @@ error_handle(int ex) error_print(); break; default: - rb_bug("Unknown longjmp status %d", ex); + unknown_longjmp_status(ex); break; } rb_threadptr_reset_raised(th);