safemode 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31ed45049398953b35fafe5ff837df2332712caa9534c5278e971d9031a61836
4
- data.tar.gz: 49b507273a0ef6d03578be21a26f26388fb4cd54d253670a8932ae7891ae40f7
3
+ metadata.gz: 7362759a3432731cdb5b3f8177623fe699b6f78e52922813d0c6af3e280d1b92
4
+ data.tar.gz: 1f409d13eb5ca31211503168e667e38413cf5f473dece30d7463a099ad9ec751
5
5
  SHA512:
6
- metadata.gz: eefb3d5121ad93910e1468cd635a5d77320dfbd23c341469af7acc1d90c80947ab1f8ec058bf1775b9269566d2503cfec0118bb6143e9d35ee6ba5afbb055caa
7
- data.tar.gz: ab5f0385d055999f6a6463381d24494bab377fe12aebec639b3be5fc78faf4355c5485105ba6c73bbc0a0023c2db3dd063bc35abee19d4564748d15a925650d8
6
+ metadata.gz: 7adb149b67b9ddd344203a0360ff70e663effb7a0da5ce5506dbac023b12db34a347a59b976cab62c9cf01cdd8cefd28be02c1c3442df787e599eb82bcad0940
7
+ data.tar.gz: 33a099e1f86a7e9f9c0a14425126a36f332921503ee35bc47e686a7c1deeff301b4b40083c96050ab4d2afa0f354d71204b4429828390cffd75248631eee5d80
@@ -1,6 +1,6 @@
1
1
  module Safemode
2
2
  class Blankslate
3
- @@allow_instance_methods = ['class', 'methods', 'respond_to?', 'respond_to_missing?', 'to_s', 'instance_variable_get']
3
+ @@allow_instance_methods = ['class', 'methods', 'respond_to?', 'respond_to_missing?', 'to_s']
4
4
  @@allow_class_methods = ['singleton_class?', 'methods', 'new', 'name', '<', 'ancestors', '=='] # < needed in Rails Object#subclasses_of
5
5
  if defined?(JRUBY_VERSION)
6
6
  # JRuby seems to silently fail to remove method_missing
@@ -49,8 +49,10 @@ module Safemode
49
49
  end
50
50
  end
51
51
 
52
+ IVAR_GET = Object.instance_method(:instance_variable_get)
53
+
52
54
  def unjail(arg)
53
- arg.class.name.end_with?('::Jail') ? arg.instance_variable_get(:@source) : arg
55
+ arg.class.name.end_with?('::Jail') ? IVAR_GET.bind_call(arg, :@source) : arg
54
56
  end
55
57
 
56
58
  def unjail_args(args)
data/safemode.gemspec CHANGED
@@ -4,7 +4,7 @@ require 'date'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "safemode".freeze
7
- s.version = "2.0.0"
7
+ s.version = "2.0.2"
8
8
  s.date = Date.today
9
9
 
10
10
  s.summary = "A library for safe evaluation of Ruby code based on Prism and Ruby2Ruby"
data/test/test_jail.rb CHANGED
@@ -37,7 +37,7 @@ class TestJail < Test::Unit::TestCase
37
37
  end
38
38
 
39
39
  def test_jail_instances_should_have_limited_methods
40
- expected = ["class", "method_missing", "methods", "respond_to?", "to_jail", "to_s", "instance_variable_get"]
40
+ expected = ["class", "method_missing", "methods", "respond_to?", "to_jail", "to_s"]
41
41
  objects.each do |object|
42
42
  assert_equal expected.sort, reject_pretty_methods(object.to_jail.methods.map(&:to_s).sort)
43
43
  end
@@ -195,6 +195,12 @@ class TestSafemodeEval < Test::Unit::TestCase
195
195
  assert_equal "new_value", article.status
196
196
  end
197
197
 
198
+ def test_instance_variable_get_blocked_on_jail
199
+ assert_raise(Safemode::NoMethodError) do
200
+ @box.eval('@article.instance_variable_get(:@source)', @assigns)
201
+ end
202
+ end
203
+
198
204
  def test_lambda_is_blocked
199
205
  assert_raise(Safemode::SecurityError) { @box.eval('-> { 1 }') }
200
206
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safemode
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sven Fuchs
@@ -12,7 +12,7 @@ authors:
12
12
  - Dmitri Dolguikh
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2026-05-21 00:00:00.000000000 Z
15
+ date: 2026-10-01 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: ruby2ruby
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  requirements: []
168
- rubygems_version: 4.0.10
168
+ rubygems_version: 4.0.20
169
169
  specification_version: 4
170
170
  summary: A library for safe evaluation of Ruby code based on Prism and Ruby2Ruby
171
171
  test_files: []