aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-09-10 05:37:39 +0000
committersorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-09-10 05:37:39 +0000
commit5b46f6c602c24c9cdf995914fc6998981f1e53ec (patch)
tree70e7a6abf8489def3ada6065e90f8ef784dd011c
parent9c060a59b42f038e55e8b3662ae6a8db99fae67d (diff)
downloadruby-5b46f6c602c24c9cdf995914fc6998981f1e53ec.tar.gz
* vm_backtrace.c (vm_backtrace_to_ary): Ignore the second argument if
it is nil. [Bug #8884] [ruby-core:57094] * test/ruby/test_backtrace.rb (test_caller_with_nil_length): Test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--test/ruby/test_backtrace.rb4
-rw-r--r--vm_backtrace.c2
3 files changed, 14 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index fb99342af0..50f022c12e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Sep 10 14:37:01 2013 Shota Fukumori <sorah@tubusu.net>
+
+ * vm_backtrace.c (vm_backtrace_to_ary): Ignore the second argument if
+ it is nil. [Bug #8884] [ruby-core:57094]
+
+ * test/ruby/test_backtrace.rb (test_caller_with_nil_length):
+ Test for above.
+
Tue Sep 10 12:39:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* class.c (method_entry_i): should exclude refined methods from
diff --git a/test/ruby/test_backtrace.rb b/test/ruby/test_backtrace.rb
index 6ab9032855..91dec4a943 100644
--- a/test/ruby/test_backtrace.rb
+++ b/test/ruby/test_backtrace.rb
@@ -85,6 +85,10 @@ class TestBacktrace < Test::Unit::TestCase
rec[m]
end
+ def test_caller_with_nil_length
+ assert_equal caller(0), caller(0, nil)
+ end
+
def test_caller_locations
cs = caller(0); locs = caller_locations(0).map{|loc|
loc.to_s
diff --git a/vm_backtrace.c b/vm_backtrace.c
index 3287c1f950..3945993e42 100644
--- a/vm_backtrace.c
+++ b/vm_backtrace.c
@@ -787,6 +787,8 @@ vm_backtrace_to_ary(rb_thread_t *th, int argc, VALUE *argv, int lev_default, int
rb_scan_args(argc, argv, "02", &level, &vn);
+ if (argc == 2 && NIL_P(vn)) argc--;
+
switch (argc) {
case 0:
lev = lev_default + lev_plus;