From be870b780d802001b399a2cc2f143df69529dcc8 Mon Sep 17 00:00:00 2001 From: Kyrylo Silin Date: Tue, 17 Mar 2020 18:02:58 +0800 Subject: exceptions: check if $SAFE is supported by Ruby Fixes #2099 ($SAFE will become a normal global variable in Ruby 3.0) MRI < 2.7 supports `$SAFE` variable, which is associated with taint/untaint methods. All of that is deprecated in 2.7 with a lot of warning messages generated, and no other effect. None of this is supported on other Ruby platforms. Related Ruby ticket: https://bugs.ruby-lang.org/issues/8468 --- lib/pry/exceptions.rb | 6 +++++- lib/pry/pry_class.rb | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/pry/exceptions.rb b/lib/pry/exceptions.rb index eac1c009..ee31e6c4 100644 --- a/lib/pry/exceptions.rb +++ b/lib/pry/exceptions.rb @@ -27,7 +27,11 @@ class Pry # Catches SecurityErrors if $SAFE is set module TooSafeException def self.===(exception) - $SAFE > 0 && exception.is_a?(SecurityError) + if Pry::HAS_SAFE_LEVEL + $SAFE > 0 && exception.is_a?(SecurityError) + else + exception.is_a?(SecurityError) + end end end diff --git a/lib/pry/pry_class.rb b/lib/pry/pry_class.rb index 414c6a5a..80dda807 100644 --- a/lib/pry/pry_class.rb +++ b/lib/pry/pry_class.rb @@ -6,6 +6,13 @@ require 'pathname' class Pry LOCAL_RC_FILE = "./.pryrc".freeze + # @return [Boolean] true if this Ruby supports safe levels and tainting, + # to guard against using deprecated or unsupported features + HAS_SAFE_LEVEL = ( + RUBY_ENGINE == 'ruby' && + Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7') + ) + class << self extend Pry::Forwardable attr_accessor :custom_completions -- cgit v1.2.1