Top Level Namespace

Defined Under Namespace

Classes: EvalError, SafeRuby

Constant Summary collapse

MAKE_SAFE_CODE =
"def keep_singleton_methods(klass, singleton_methods)\n  klass = Object.const_get(klass)\n  singleton_methods = singleton_methods.map(&:to_sym)\n  undef_methods = (klass.singleton_methods - singleton_methods)\n\n  undef_methods.each do |method|\n    klass.singleton_class.send(:undef_method, method)\n  end\n\nend\n\ndef keep_methods(klass, methods)\n  klass = Object.const_get(klass)\n  methods = methods.map(&:to_sym)\n  undef_methods = (klass.methods(false) - methods)\n  undef_methods.each do |method|\n    klass.send(:undef_method, method)\n  end\nend\n\ndef clean_constants\n  (Object.constants - \#{ALLOWED_CONSTANTS}).each do |const|\n    Object.send(:remove_const, const) if defined?(const)\n  end\nend\n\nkeep_singleton_methods(:Kernel, \#{KERNEL_S_METHODS})\nkeep_singleton_methods(:Symbol, \#{SYMBOL_S_METHODS})\nkeep_singleton_methods(:String, \#{STRING_S_METHODS})\nkeep_singleton_methods(:IO, \#{IO_S_METHODS})\n\nkeep_methods(:Kernel, \#{KERNEL_METHODS})\nkeep_methods(:NilClass, \#{NILCLASS_METHODS})\nkeep_methods(:TrueClass, \#{TRUECLASS_METHODS})\nkeep_methods(:FalseClass, \#{FALSECLASS_METHODS})\nkeep_methods(:Enumerable, \#{ENUMERABLE_METHODS})\nkeep_methods(:String, \#{STRING_METHODS})\nKernel.class_eval do\n def `(*args)\n   raise NoMethodError, \"` is unavailable\"\n end\n\n def system(*args)\n   raise NoMethodError, \"system is unavailable\"\n end\nend\n\nclean_constants\n\n"
IO_S_METHODS =
%w[
  new
  foreach
  open
]
KERNEL_S_METHODS =
%w[
Array
binding
block_given?
catch
chomp
chomp!
chop
chop!
eval
fail
Float
format
global_variables
gsub
gsub!
Integer
iterator?
lambda
local_variables
loop
method_missing
proc
raise
scan
split
sprintf
String
sub
sub!
throw
].freeze
SYMBOL_S_METHODS =
%w[
all_symbols
].freeze
STRING_S_METHODS =
%w[
new
].freeze
KERNEL_METHODS =
%w[
==

ray
nding
ock_given?
tch
omp
omp!
op
op!
ass
clone
dup
eql?
equal?
eval
fail
Float
format
freeze
frozen?
global_variables
gsub
gsub!
hash
id
initialize_copy
inspect
instance_eval
instance_of?
instance_variables
instance_variable_get
instance_variable_set
instance_variable_defined?
Integer
is_a?
iterator?
kind_of?
lambda
local_variables
loop
methods
method_missing
nil?
private_methods
print
proc
protected_methods
public_methods
raise
remove_instance_variable
respond_to?
respond_to_missing?
scan
send
singleton_methods
singleton_method_added
singleton_method_removed
singleton_method_undefined
split
sprintf
String
sub
sub!
taint
tainted?
throw
to_a
to_s
type
untaint
__send__
].freeze
NILCLASS_METHODS =
%w[
&
inspect
nil?
to_a
to_f
to_i
to_s
^
|
].freeze
SYMBOL_METHODS =
%w[
===
id2name
inspect
to_i
to_int
to_s
to_sym
].freeze
TRUECLASS_METHODS =
%w[
&
to_s
^
|
].freeze
FALSECLASS_METHODS =
%w[
&
to_s
^
|
].freeze
ENUMERABLE_METHODS =
%w[
all?
any?
collect
detect
each_with_index
entries
find
find_all
grep
include?
inject
map
max
member?
min
partition
reject
select
sort
sort_by
to_a
zip
].freeze
STRING_METHODS =
%w[
%
*
+
<<
<=>
==
=~
capitalize
capitalize!
casecmp
center
chomp
chomp!
chop
chop!
concat
count
crypt
delete
delete!
downcase
downcase!
dump
each
each_byte
each_line
empty?
eql?
gsub
gsub!
hash
hex
include?
index
initialize
initialize_copy
insert
inspect
intern
length
ljust
lines
lstrip
lstrip!
match
next
next!
oct
replace
reverse
reverse!
rindex
rjust
rstrip
rstrip!
scan
size
slice
slice!
split
squeeze
squeeze!
strip
strip!
start_with?
sub
sub!
succ
succ!
sum
swapcase
swapcase!
to_f
to_i
to_s
to_str
to_sym
tr
tr!
tr_s
tr_s!
upcase
upcase!
upto
[]
[]=
].freeze
ALLOWED_CONSTANTS =
[
  :Object, :Module, :Class, :BasicObject, :Kernel, :NilClass, :NIL, :Data, :TrueClass, :TRUE, :FalseClass, :FALSE, :Encoding, 
  :Comparable, :Enumerable, :String, :Symbol, :Exception, :SystemExit, :SignalException, :Interrupt, :StandardError, :TypeError,
  :ArgumentError, :IndexError, :KeyError, :RangeError, :ScriptError, :SyntaxError, :LoadError, :NotImplementedError, :NameError,
  :NoMethodError, :RuntimeError, :SecurityError, :NoMemoryError, :EncodingError, :SystemCallError, :Errno, :ZeroDivisionError,
  :FloatDomainError, :Numeric, :Integer, :Fixnum, :Float, :Bignum, :Array, :Hash,  :Struct, :RegexpError, :Regexp,
  :MatchData, :Marshal, :Range, :IOError, :EOFError, :IO, :STDIN, :STDOUT, :STDERR, :Time, :Random,
  :Signal, :Proc, :LocalJumpError, :SystemStackError, :Method, :UnboundMethod, :Binding, :Math, :Enumerator,
  :StopIteration, :RubyVM, :Thread, :TOPLEVEL_BINDING, :ThreadGroup, :Mutex, :ThreadError, :Fiber, :FiberError, :Rational, :Complex,
  :RUBY_VERSION, :RUBY_RELEASE_DATE, :RUBY_PLATFORM, :RUBY_PATCHLEVEL, :RUBY_REVISION, :RUBY_DESCRIPTION, :RUBY_COPYRIGHT, :RUBY_ENGINE,
  :TracePoint, :ARGV, :Gem, :RbConfig, :Config, :CROSS_COMPILING, :Date, :ConditionVariable, :Queue, :SizedQueue, :MonitorMixin, :Monitor,
  :Exception2MessageMapper, :IRB, :RubyToken, :RubyLex, :Readline, :RUBYGEMS_ACTIVATION_MONITOR
]