shikashi 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/AUTHORS +1 -0
  2. data/README +10 -0
  3. data/Rakefile +4 -13
  4. data/lib/shikashi/sandbox.rb +23 -2
  5. metadata +44 -72
data/AUTHORS CHANGED
@@ -3,5 +3,6 @@ shikashi de tario <rseminara@hotmail.com>
3
3
 
4
4
  Thanks to:
5
5
  - Stellard for the contribution with the backstick and percent security bypass test ( test/security/test_system_calls.rb )
6
+ - Mark Pentland for the performance feedback
6
7
 
7
8
 
data/README CHANGED
@@ -24,6 +24,16 @@ OR
24
24
 
25
25
  sudo gem install shikashi-X.X.X.gem.
26
26
 
27
+ === Troubleshooting
28
+
29
+ ERROR: While executing gem ... (Gem::DependencyError)
30
+ Unable to resolve dependencies: ruby2ruby requires sexp_processor (~> 3.0); ruby_parser requires sexp_processor (~> 3.0)
31
+
32
+ The version of ruby2ruby and ruby_parser required depends on sexp_processor 3.X but for some reason this version of the gem
33
+ is not automatically installed by gem, you can workaround this issue by installing it before using:
34
+
35
+ gem install sexp_processor --version '~> 3.2'
36
+
27
37
  == Documentation
28
38
 
29
39
  Full API documentation can be found on:
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
+ require 'rdoc/task'
4
+ require 'rubygems/package_task'
3
5
  require 'rake/testtask'
4
- require 'rake/rdoctask'
5
- require 'rake/gempackagetask'
6
6
 
7
7
  spec = Gem::Specification.new do |s|
8
8
  s.name = 'shikashi'
9
- s.version = '0.5.0'
9
+ s.version = '0.5.1'
10
10
  s.author = 'Dario Seminara'
11
11
  s.email = 'robertodarioseminara@gmail.com'
12
12
  s.platform = Gem::Platform::RUBY
@@ -21,15 +21,6 @@ spec = Gem::Specification.new do |s|
21
21
  [ 'LICENSE', 'AUTHORS', 'CHANGELOG', 'README', 'Rakefile', 'TODO' ]
22
22
  end
23
23
 
24
- desc 'Run tests'
25
- task :default => [ :test ]
26
-
27
- Rake::TestTask.new('test') do |t|
28
- t.libs << 'test'
29
- t.pattern = '{test}/**/test_*.rb'
30
- t.verbose = true
31
- end
32
-
33
24
  desc 'Generate RDoc'
34
25
  Rake::RDocTask.new :rdoc do |rd|
35
26
  rd.rdoc_dir = 'doc'
@@ -38,7 +29,7 @@ Rake::RDocTask.new :rdoc do |rd|
38
29
  end
39
30
 
40
31
  desc 'Build Gem'
41
- Rake::GemPackageTask.new spec do |pkg|
32
+ Gem::PackageTask.new spec do |pkg|
42
33
  pkg.need_tar = true
43
34
  end
44
35
 
@@ -281,7 +281,8 @@ module Shikashi
281
281
  # :base_namespace Alternate module to contain all classes and constants defined by the unprivileged code
282
282
  # if not specified, by default, the base_namespace is created with the sandbox itself
283
283
  # :no_base_namespace Specify to do not use a base_namespace (default false, not recommended to change)
284
- #
284
+ # :encoding Specify the encoding of source (example: "utf-8"), the encoding also can be
285
+ # specified on header like a ruby normal source file
285
286
  #
286
287
  #The arguments can be passed in any order and using hash notation or not, examples:
287
288
  #
@@ -343,6 +344,8 @@ module Shikashi
343
344
  # :base_namespace Alternate module to contain all classes and constants defined by the unprivileged code
344
345
  # if not specified, by default, the base_namespace is created with the sandbox itself
345
346
  # :no_base_namespace Specify to do not use a base_namespace (default false, not recommended to change)
347
+ # :encoding Specify the encoding of source (example: "utf-8"), the encoding also can be
348
+ # specified on header like a ruby normal source file
346
349
  #
347
350
  # NOTE: arguments are the same as for Sandbox#run method, except for timeout and binding which can be
348
351
  # used when calling Shikashi::Sandbox::Packet#run
@@ -367,6 +370,7 @@ module Shikashi
367
370
  base_namespace = args.pick(:base_namespace) do nil end
368
371
  no_base_namespace = args.pick(:no_base_namespace) do @no_base_namespace end
369
372
  privileges_ = args.pick(Privileges,:privileges) do Privileges.new end
373
+ encoding = get_source_encoding(code) || args.pick(:encoding) do nil end
370
374
 
371
375
  hook_handler = nil
372
376
 
@@ -392,6 +396,10 @@ module Shikashi
392
396
  end
393
397
  end
394
398
 
399
+ if encoding
400
+ code = "# encoding: #{encoding}\n" + code
401
+ end
402
+
395
403
  evalhook_packet = @hook_handler.packet(code)
396
404
  Shikashi::Sandbox::Packet.new(evalhook_packet, privileges_, source)
397
405
  end
@@ -438,6 +446,7 @@ private
438
446
  source = args.pick(:source) do generate_id end
439
447
  base_namespace = args.pick(:base_namespace) do nil end
440
448
  no_base_namespace = args.pick(:no_base_namespace) do @no_base_namespace end
449
+ encoding = get_source_encoding(code) || args.pick(:encoding) do nil end
441
450
 
442
451
  hook_handler = nil
443
452
 
@@ -461,6 +470,10 @@ private
461
470
  end
462
471
  end
463
472
 
473
+ if encoding
474
+ # preend encoding
475
+ code = "# encoding: #{encoding}\n" + code
476
+ end
464
477
  hook_handler.evalhook(code, binding_, source)
465
478
  end
466
479
  rescue ::Timeout::Error
@@ -471,7 +484,15 @@ private
471
484
 
472
485
  end
473
486
 
474
-
487
+ def get_source_encoding(code)
488
+ first_line = code.to_s.lines.first.to_s
489
+ m = first_line.match(/encoding:(.*)$/)
490
+ if m
491
+ m[1]
492
+ else
493
+ nil
494
+ end
495
+ end
475
496
  end
476
497
 
477
498
  Shikashi.global_binding = binding()
metadata CHANGED
@@ -1,82 +1,63 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shikashi
3
- version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 5
9
- - 0
10
- version: 0.5.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Dario Seminara
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-20 00:00:00 -03:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-06-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: evalhook
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &82511730 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 11
30
- segments:
31
- - 0
32
- - 5
33
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
34
21
  version: 0.5.0
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: getsource
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *82511730
25
+ - !ruby/object:Gem::Dependency
26
+ name: getsource
27
+ requirement: &82511270 !ruby/object:Gem::Requirement
41
28
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 27
46
- segments:
47
- - 0
48
- - 1
49
- - 0
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
50
32
  version: 0.1.0
51
33
  type: :runtime
52
- version_requirements: *id002
34
+ prerelease: false
35
+ version_requirements: *82511270
53
36
  description:
54
37
  email: robertodarioseminara@gmail.com
55
38
  executables: []
56
-
57
39
  extensions: []
58
-
59
- extra_rdoc_files:
40
+ extra_rdoc_files:
60
41
  - README
61
- files:
62
- - examples/benchmark/bm1.rb
63
- - examples/benchmark/bm2.rb
64
- - examples/basic/example1.rb
42
+ files:
43
+ - examples/basic/example2.rb
65
44
  - examples/basic/example3.rb
66
45
  - examples/basic/example5.rb
67
- - examples/basic/example4.rb
68
46
  - examples/basic/example8.rb
47
+ - examples/basic/example4.rb
48
+ - examples/basic/example1.rb
69
49
  - examples/basic/example6.rb
70
50
  - examples/basic/example.rb
71
51
  - examples/basic/example7.rb
72
- - examples/basic/example2.rb
52
+ - examples/benchmark/bm2.rb
53
+ - examples/benchmark/bm1.rb
73
54
  - examples/timeout/example1.rb
74
55
  - lib/shikashi.rb
75
56
  - lib/shikashi/pick_argument.rb
76
57
  - lib/shikashi/sandbox.rb
77
- - lib/shikashi/privileges/exceptions.rb
78
58
  - lib/shikashi/privileges/singleton_methods.rb
79
59
  - lib/shikashi/privileges/classes.rb
60
+ - lib/shikashi/privileges/exceptions.rb
80
61
  - lib/shikashi/privileges.rb
81
62
  - LICENSE
82
63
  - AUTHORS
@@ -84,39 +65,30 @@ files:
84
65
  - README
85
66
  - Rakefile
86
67
  - TODO
87
- has_rdoc: true
88
68
  homepage: http://github.com/tario/shikashi
89
69
  licenses: []
90
-
91
70
  post_install_message:
92
71
  rdoc_options: []
93
-
94
- require_paths:
72
+ require_paths:
95
73
  - lib
96
- required_ruby_version: !ruby/object:Gem::Requirement
74
+ required_ruby_version: !ruby/object:Gem::Requirement
97
75
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
- required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
81
  none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
112
- - 0
113
- version: "0"
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
114
86
  requirements: []
115
-
116
87
  rubyforge_project:
117
- rubygems_version: 1.3.7
88
+ rubygems_version: 1.8.10
118
89
  signing_key:
119
90
  specification_version: 3
120
- summary: shikashi is a ruby sandbox that permits the execution of "unprivileged" scripts by defining the permitted methods and constants the scripts can invoke with a white list logic
91
+ summary: shikashi is a ruby sandbox that permits the execution of "unprivileged" scripts
92
+ by defining the permitted methods and constants the scripts can invoke with a white
93
+ list logic
121
94
  test_files: []
122
-