ruby-changes:63263
From: Nobuyoshi <ko1@a...>
Date: Sat, 3 Oct 2020 10:48:03 +0900 (JST)
Subject: [ruby-changes:63263] 5a665f6ce7 (master): Check builtin inline function index overflow
https://git.ruby-lang.org/ruby.git/commit/?id=5a665f6ce7 From 5a665f6ce796730b9b81a27e418fdba49b5f83b7 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Sat, 3 Oct 2020 00:11:03 +0900 Subject: Check builtin inline function index overflow diff --git a/compile.c b/compile.c index 7053837..c378c17 100644 --- a/compile.c +++ b/compile.c @@ -7294,7 +7294,7 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, co https://github.com/ruby/ruby/blob/trunk/compile.c#L7294 return COMPILE_NG; } else { - char inline_func[0x20]; + char inline_func[DECIMAL_SIZE_OF_BITS(sizeof(int) * CHAR_BIT) + 1]; bool cconst = false; retry:; const struct rb_builtin_function *bf = iseq_builtin_function_lookup(iseq, builtin_func); @@ -7325,8 +7325,11 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, co https://github.com/ruby/ruby/blob/trunk/compile.c#L7325 return COMPILE_NG; } + if (GET_VM()->builtin_inline_index == INT_MAX) { + rb_bug("builtin inline function index overflow:%s", builtin_func); + } int inline_index = GET_VM()->builtin_inline_index++; - snprintf(inline_func, 0x20, "_bi%d", inline_index); + snprintf(inline_func, sizeof(inline_func), "_bi%d", inline_index); builtin_func = inline_func; args_node = NULL; goto retry; -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/