From 89c6f0e2aa813efbb8b96e09bb8da504c442a38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Ne=C4=8Das?= Date: Fri, 19 May 2017 10:50:38 +0200 Subject: [PATCH] Handle empty backtrace from external filter In the wild the backtrace_filter can be set by external filter (Rails do it for their silencer). This can lead to the case there the external backtrace_filer returns empty array. Other parts of minitest count on the fact that there will still be something in the backtrace to use, and can lead to issues such as "undefined method `split' for nil:NilClass" when producing deprecation warnings. Since we already had the logic to use all the backtrace when filtering too much, I've moved this logic to be used also for external filters. --- lib/minitest.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/minitest.rb b/lib/minitest.rb index 5525ade1..52fccceb 100644 --- a/lib/minitest.rb +++ b/lib/minitest.rb @@ -231,7 +231,9 @@ def self.process_args args = [] # :nodoc: end def self.filter_backtrace bt # :nodoc: - backtrace_filter.filter bt + new_bt = backtrace_filter.filter bt + new_bt = bt.dup if new_bt.empty? + new_bt end ## @@ -818,7 +820,6 @@ def filter bt new_bt = bt.take_while { |line| line !~ mt_re } new_bt = bt.select { |line| line !~ mt_re } if new_bt.empty? - new_bt = bt.dup if new_bt.empty? new_bt end