From 979dd02e2f0a70f3f30d47c6115780d8fac6147e Mon Sep 17 00:00:00 2001 From: yui-knk Date: Mon, 26 Dec 2022 17:45:44 +0900 Subject: [PATCH] Check if the argument is Thread::Backtrace::Location object [Bug #19262] --- ast.c | 5 +++++ test/ruby/test_ast.rb | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/ast.c b/ast.c index bf3781d820..adb7287ed3 100644 --- a/ast.c +++ b/ast.c @@ -202,6 +202,11 @@ static VALUE node_id_for_backtrace_location(rb_execution_context_t *ec, VALUE module, VALUE location) { int node_id; + + if (!rb_frame_info_p(location)) { + rb_raise(rb_eTypeError, "Thread::Backtrace::Location object expected"); + } + node_id = rb_get_node_id_from_frame_info(location); if (node_id == -1) { return Qnil; diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index 8acf4fe254..e43dac28b3 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -227,6 +227,12 @@ class TestAst < Test::Unit::TestCase assert_equal node.node_id, node_id end + def test_node_id_for_backtrace_location_raises_argument_error + bug19262 = '[ruby-core:111435]' + + assert_raise(TypeError, bug19262) { RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(1) } + end + def test_of_proc_and_method proc = Proc.new { 1 + 2 } method = self.method(__method__)