rufus-treechecker 1.0.3 → 1.0.4
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.
- data/CHANGELOG.txt +29 -0
- data/CREDITS.txt +6 -0
- data/LICENSE.txt +21 -0
- data/README.txt +25 -25
- data/Rakefile +83 -0
- data/lib/rufus/tree_checker.rb +3 -0
- data/lib/rufus/treechecker.rb +52 -72
- data/lib/rufus-tree_checker.rb +3 -0
- data/rufus-treechecker.gemspec +31 -0
- data/spec/high_spec.rb +303 -0
- data/spec/low_spec.rb +199 -0
- data/spec/misc_spec.rb +44 -0
- data/spec/ruleset_spec.rb +94 -0
- data/spec/spec_base.rb +17 -0
- metadata +70 -25
- data/test/ft_0_basic.rb +0 -253
- data/test/ft_1_old_treechecker.rb +0 -72
- data/test/ft_2_clone.rb +0 -32
- data/test/test.rb +0 -5
- data/test/testmixin.rb +0 -31
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufus-treechecker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 1.0.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- John Mettraux
|
@@ -9,40 +14,78 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-12-22 00:00:00 +09:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: ruby_parser
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 0
|
30
|
+
- 5
|
31
|
+
version: 2.0.5
|
17
32
|
type: :runtime
|
18
|
-
|
19
|
-
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
20
38
|
requirements:
|
21
39
|
- - ">="
|
22
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
23
43
|
version: "0"
|
24
|
-
|
25
|
-
|
26
|
-
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 0
|
56
|
+
version: "2.0"
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id003
|
59
|
+
description: "\n tests strings of Ruby code for unauthorized patterns (exit, eval, ...)\n "
|
60
|
+
email:
|
61
|
+
- jmettraux@gmail.com
|
27
62
|
executables: []
|
28
63
|
|
29
64
|
extensions: []
|
30
65
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
66
|
+
extra_rdoc_files: []
|
67
|
+
|
33
68
|
files:
|
34
|
-
-
|
69
|
+
- Rakefile
|
70
|
+
- lib/rufus/tree_checker.rb
|
35
71
|
- lib/rufus/treechecker.rb
|
72
|
+
- lib/rufus-tree_checker.rb
|
36
73
|
- lib/rufus-treechecker.rb
|
74
|
+
- spec/high_spec.rb
|
75
|
+
- spec/low_spec.rb
|
76
|
+
- spec/misc_spec.rb
|
77
|
+
- spec/ruleset_spec.rb
|
78
|
+
- spec/spec_base.rb
|
37
79
|
- test/bm.rb
|
38
|
-
-
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
- test/testmixin.rb
|
80
|
+
- rufus-treechecker.gemspec
|
81
|
+
- CHANGELOG.txt
|
82
|
+
- CREDITS.txt
|
83
|
+
- LICENSE.txt
|
43
84
|
- README.txt
|
44
85
|
has_rdoc: true
|
45
|
-
homepage: http://rufus.rubyforge.org
|
86
|
+
homepage: http://rufus.rubyforge.org
|
87
|
+
licenses: []
|
88
|
+
|
46
89
|
post_install_message:
|
47
90
|
rdoc_options: []
|
48
91
|
|
@@ -52,20 +95,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
52
95
|
requirements:
|
53
96
|
- - ">="
|
54
97
|
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
55
100
|
version: "0"
|
56
|
-
version:
|
57
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
102
|
requirements:
|
59
103
|
- - ">="
|
60
104
|
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
61
107
|
version: "0"
|
62
|
-
|
63
|
-
|
64
|
-
- ruby_parser
|
108
|
+
requirements: []
|
109
|
+
|
65
110
|
rubyforge_project: rufus
|
66
|
-
rubygems_version: 1.
|
111
|
+
rubygems_version: 1.3.6
|
67
112
|
signing_key:
|
68
|
-
specification_version:
|
69
|
-
summary:
|
70
|
-
test_files:
|
71
|
-
|
113
|
+
specification_version: 3
|
114
|
+
summary: tests strings of Ruby code for unauthorized patterns (exit, eval, ...)
|
115
|
+
test_files: []
|
116
|
+
|
data/test/ft_0_basic.rb
DELETED
@@ -1,253 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Testing rufus-treechecker
|
4
|
-
#
|
5
|
-
# jmettraux at gmail.org
|
6
|
-
#
|
7
|
-
# Fri Aug 29 10:13:33 JST 2008
|
8
|
-
#
|
9
|
-
|
10
|
-
require 'testmixin'
|
11
|
-
|
12
|
-
|
13
|
-
class BasicTest < Test::Unit::TestCase
|
14
|
-
include TestMixin
|
15
|
-
|
16
|
-
|
17
|
-
def test_0
|
18
|
-
|
19
|
-
tc = Rufus::TreeChecker.new do
|
20
|
-
exclude_vcall :abort
|
21
|
-
exclude_fcall :abort
|
22
|
-
exclude_call_to :abort
|
23
|
-
exclude_fvcall :exit, :exit!
|
24
|
-
exclude_call_to :exit
|
25
|
-
exclude_call_to :exit!
|
26
|
-
end
|
27
|
-
|
28
|
-
assert_nok(tc, 'exit')
|
29
|
-
assert_nok(tc, 'exit()')
|
30
|
-
assert_nok(tc, 'exit!')
|
31
|
-
assert_nok(tc, 'abort')
|
32
|
-
assert_nok(tc, 'abort()')
|
33
|
-
assert_nok(tc, 'Kernel.exit')
|
34
|
-
assert_nok(tc, 'Kernel.exit()')
|
35
|
-
assert_nok(tc, 'Kernel::exit')
|
36
|
-
assert_nok(tc, 'Kernel::exit()')
|
37
|
-
assert_nok(tc, '::Kernel.exit')
|
38
|
-
|
39
|
-
assert_ok(tc, '1 + 1')
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_0b_vm_exiting
|
43
|
-
|
44
|
-
# TODO : implement me !
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_1_global_vars
|
48
|
-
|
49
|
-
tc = Rufus::TreeChecker.new do
|
50
|
-
exclude_global_vars
|
51
|
-
end
|
52
|
-
|
53
|
-
assert_nok(tc, '$ENV')
|
54
|
-
assert_nok(tc, '$ENV = {}')
|
55
|
-
assert_nok(tc, "$ENV['HOME'] = 'away'")
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_2_aliases
|
59
|
-
|
60
|
-
tc = Rufus::TreeChecker.new do
|
61
|
-
exclude_alias
|
62
|
-
end
|
63
|
-
|
64
|
-
assert_nok(tc, 'alias :a :b')
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_3_exclude_calls_on
|
68
|
-
|
69
|
-
tc = Rufus::TreeChecker.new do
|
70
|
-
exclude_call_on File, FileUtils
|
71
|
-
exclude_call_on IO
|
72
|
-
end
|
73
|
-
#puts tc.to_s
|
74
|
-
|
75
|
-
assert_nok(tc, 'data = File.read("surf.txt")')
|
76
|
-
assert_nok(tc, 'f = File.new("surf.txt")')
|
77
|
-
assert_nok(tc, 'FileUtils.rm_f("bondzoi.txt")')
|
78
|
-
assert_nok(tc, 'IO.foreach("testfile") {|x| print "GOT ", x }')
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_4_exclude_def
|
82
|
-
|
83
|
-
tc = Rufus::TreeChecker.new do
|
84
|
-
exclude_def
|
85
|
-
end
|
86
|
-
|
87
|
-
assert_nok(tc, 'def drink; "water"; end')
|
88
|
-
assert_nok(tc, 'class Toto; def drink; "water"; end; end')
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_5_exclude_class_tinkering
|
92
|
-
|
93
|
-
tc = Rufus::TreeChecker.new do
|
94
|
-
exclude_class_tinkering
|
95
|
-
end
|
96
|
-
|
97
|
-
assert_nok(tc, 'class << instance; def length; 3; end; end')
|
98
|
-
assert_nok(tc, 'class Toto; end')
|
99
|
-
assert_nok(tc, 'class Alpha::Toto; end')
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_5b_exclude_class_tinkering_with_exceptions
|
103
|
-
|
104
|
-
tc = Rufus::TreeChecker.new do
|
105
|
-
exclude_class_tinkering :except => [ String, Rufus::TreeChecker ]
|
106
|
-
end
|
107
|
-
#puts tc.to_s
|
108
|
-
|
109
|
-
assert_nok(tc, 'class String; def length; 3; end; end')
|
110
|
-
|
111
|
-
assert_ok(tc, 'class S2 < String; def length; 3; end; end')
|
112
|
-
assert_ok(tc, 'class Toto < Rufus::TreeChecker; def length; 3; end; end')
|
113
|
-
|
114
|
-
assert_nok(tc, 'class Toto; end')
|
115
|
-
assert_nok(tc, 'class Alpha::Toto; end')
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_6_exclude_module_tinkering
|
119
|
-
|
120
|
-
tc = Rufus::TreeChecker.new do
|
121
|
-
exclude_module_tinkering
|
122
|
-
end
|
123
|
-
|
124
|
-
assert_nok(tc, 'module Alpha; end')
|
125
|
-
assert_nok(tc, 'module Momo::Alpha; end')
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_7_exclude_eval
|
129
|
-
|
130
|
-
tc = Rufus::TreeChecker.new do
|
131
|
-
exclude_eval
|
132
|
-
end
|
133
|
-
|
134
|
-
assert_nok(tc, 'eval("code")')
|
135
|
-
assert_nok(tc, 'Kernel.eval("code")')
|
136
|
-
assert_nok(tc, 'toto.instance_eval("code")')
|
137
|
-
assert_nok(tc, 'Toto.module_eval("code")')
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_8_exclude_backquotes
|
141
|
-
|
142
|
-
tc = Rufus::TreeChecker.new do
|
143
|
-
exclude_backquotes
|
144
|
-
end
|
145
|
-
|
146
|
-
assert_nok(tc, '`kill -9 whatever`')
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_9_exclude_raise_and_throw
|
150
|
-
|
151
|
-
tc = Rufus::TreeChecker.new do
|
152
|
-
exclude_raise
|
153
|
-
end
|
154
|
-
|
155
|
-
assert_nok(tc, 'raise')
|
156
|
-
assert_nok(tc, 'raise "error"')
|
157
|
-
assert_nok(tc, 'Kernel.raise')
|
158
|
-
assert_nok(tc, 'Kernel.raise "error"')
|
159
|
-
assert_ok(tc, 'Kernel.puts "error"')
|
160
|
-
assert_nok(tc, 'throw')
|
161
|
-
assert_nok(tc, 'throw :halt')
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_10_exclude_public
|
165
|
-
|
166
|
-
tc = Rufus::TreeChecker.new do
|
167
|
-
exclude_fvccall :public
|
168
|
-
exclude_fvccall :protected
|
169
|
-
exclude_fvccall :private
|
170
|
-
end
|
171
|
-
|
172
|
-
assert_nok(tc, 'public')
|
173
|
-
assert_nok(tc, 'public :surf')
|
174
|
-
assert_nok(tc, 'class Toto; public :car; end')
|
175
|
-
assert_nok(tc, 'private')
|
176
|
-
assert_nok(tc, 'private :surf')
|
177
|
-
assert_nok(tc, 'class Toto; private :car; end')
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_11_is_not
|
181
|
-
|
182
|
-
tc = Rufus::TreeChecker.new do
|
183
|
-
exclude_head [ :block ]
|
184
|
-
exclude_head [ :lasgn ]
|
185
|
-
exclude_head [ :dasgn_curr ]
|
186
|
-
end
|
187
|
-
|
188
|
-
assert_nok(tc, 'a; b; c')
|
189
|
-
assert_nok(tc, 'lambda { a; b; c }')
|
190
|
-
|
191
|
-
assert_nok(tc, 'a = 2')
|
192
|
-
assert_nok(tc, 'lambda { a = 2 }')
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_12_at_root
|
196
|
-
|
197
|
-
tc = Rufus::TreeChecker.new do
|
198
|
-
at_root do
|
199
|
-
exclude_head [ :block ]
|
200
|
-
exclude_head [ :lasgn ]
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
assert_nok(tc, 'a; b; c')
|
205
|
-
assert_ok(tc, 'lambda { a; b; c }')
|
206
|
-
|
207
|
-
assert_nok(tc, 'a = 2')
|
208
|
-
assert_ok(tc, 'lambda { a = 2 }')
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_12_rebinding
|
212
|
-
|
213
|
-
tc = Rufus::TreeChecker.new do
|
214
|
-
exclude_call_to :class
|
215
|
-
exclude_rebinding Kernel, Rufus::TreeChecker
|
216
|
-
end
|
217
|
-
|
218
|
-
assert_nok(tc, 'k = Kernel')
|
219
|
-
assert_nok(tc, 'k = ::Kernel')
|
220
|
-
assert_nok(tc, 'c = Rufus::TreeChecker')
|
221
|
-
assert_nok(tc, 'c = ::Rufus::TreeChecker')
|
222
|
-
assert_nok(tc, 's = "".class')
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_13_access_to
|
226
|
-
|
227
|
-
tc = Rufus::TreeChecker.new do
|
228
|
-
exclude_access_to File
|
229
|
-
end
|
230
|
-
|
231
|
-
#puts tc.to_s
|
232
|
-
|
233
|
-
assert_nok(tc, 'f = File')
|
234
|
-
assert_nok(tc, 'f = ::File')
|
235
|
-
assert_nok(tc, 'File.read "hello.txt"')
|
236
|
-
assert_nok(tc, '::File.read "hello.txt"')
|
237
|
-
end
|
238
|
-
|
239
|
-
#def test_X
|
240
|
-
# tc = Rufus::TreeChecker.new do
|
241
|
-
# end
|
242
|
-
# #tc.ptree 'load "surf"'
|
243
|
-
# tc.ptree 'class Toto; load "nada"; end'
|
244
|
-
# tc.ptree 'class Toto; def m; load "nada"; end; end'
|
245
|
-
# tc.ptree 'class << toto; def m; load "nada"; end; end'
|
246
|
-
# #tc.ptree 'lambda { a; b; c }'
|
247
|
-
# #tc.ptree 'lambda { a = c }'
|
248
|
-
# #tc.ptree 'c = 0; a = c'
|
249
|
-
# #tc.ptree 'c = a = 0'
|
250
|
-
# tc.ptree 'a = 5 + 6; puts a'
|
251
|
-
#end
|
252
|
-
end
|
253
|
-
|
@@ -1,72 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Testing rufus-treechecker
|
4
|
-
#
|
5
|
-
# jmettraux at gmail.org
|
6
|
-
#
|
7
|
-
# Fri Aug 29 10:13:33 JST 2008
|
8
|
-
#
|
9
|
-
|
10
|
-
require 'testmixin'
|
11
|
-
|
12
|
-
module Testy
|
13
|
-
class Tasty
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class OldTreeCheckerTest < Test::Unit::TestCase
|
18
|
-
include TestMixin
|
19
|
-
|
20
|
-
|
21
|
-
def test_0
|
22
|
-
|
23
|
-
tc = Rufus::TreeChecker.new do
|
24
|
-
exclude_fvccall :abort
|
25
|
-
exclude_fvccall :exit, :exit!
|
26
|
-
exclude_fvccall :system
|
27
|
-
exclude_eval
|
28
|
-
exclude_alias
|
29
|
-
exclude_global_vars
|
30
|
-
exclude_call_on File, FileUtils
|
31
|
-
exclude_class_tinkering :except => Testy::Tasty
|
32
|
-
exclude_module_tinkering
|
33
|
-
|
34
|
-
exclude_fvcall :public
|
35
|
-
exclude_fvcall :protected
|
36
|
-
exclude_fvcall :private
|
37
|
-
exclude_fcall :load
|
38
|
-
exclude_fcall :require
|
39
|
-
end
|
40
|
-
|
41
|
-
assert_nocompile tc, "def surf }"
|
42
|
-
|
43
|
-
assert_ok tc, "puts 'toto'"
|
44
|
-
|
45
|
-
assert_nok tc, "exit"
|
46
|
-
assert_nok tc, "puts $BATEAU"
|
47
|
-
assert_nok tc, "abort"
|
48
|
-
assert_nok tc, "abort; puts 'ok'"
|
49
|
-
assert_nok tc, "puts 'ok'; abort"
|
50
|
-
|
51
|
-
assert_nok tc, "exit 0"
|
52
|
-
assert_nok tc, "system('whatever')"
|
53
|
-
|
54
|
-
assert_nok tc, "alias :a :b"
|
55
|
-
assert_nok tc, "alias_method :a, :b"
|
56
|
-
|
57
|
-
assert_nok tc, "File.open('x')"
|
58
|
-
assert_nok tc, "FileUtils.rm('x')"
|
59
|
-
|
60
|
-
assert_nok tc, "eval 'nada'"
|
61
|
-
assert_nok tc, "M.module_eval 'nada'"
|
62
|
-
assert_nok tc, "o.instance_eval 'nada'"
|
63
|
-
|
64
|
-
assert_ok tc, "puts 'toto'"
|
65
|
-
|
66
|
-
assert_ok tc, "class Toto < Testy::Tasty\nend"
|
67
|
-
assert_nok tc, "class String\nend"
|
68
|
-
assert_nok tc, "module Whatever\nend"
|
69
|
-
assert_nok tc, "class << e\nend"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
data/test/ft_2_clone.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Testing rufus-treechecker
|
4
|
-
#
|
5
|
-
# jmettraux at gmail.org
|
6
|
-
#
|
7
|
-
# Tue Sep 2 14:28:01 JST 2008
|
8
|
-
#
|
9
|
-
|
10
|
-
require 'testmixin'
|
11
|
-
|
12
|
-
class CloneTest < Test::Unit::TestCase
|
13
|
-
include TestMixin
|
14
|
-
|
15
|
-
|
16
|
-
def test_0
|
17
|
-
|
18
|
-
tc0 = Rufus::TreeChecker.new do
|
19
|
-
exclude_fvccall :abort
|
20
|
-
end
|
21
|
-
|
22
|
-
tc1 = tc0.clone
|
23
|
-
tc1.add_rules do
|
24
|
-
at_root do
|
25
|
-
exclude_head [ :block ]
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
assert_not_equal tc0.object_id, tc1.object_id
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
data/test/test.rb
DELETED
data/test/testmixin.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Testing rufus-treechecker
|
4
|
-
#
|
5
|
-
# jmettraux at gmail.org
|
6
|
-
#
|
7
|
-
# Fri Aug 29 18:30:03 JST 2008
|
8
|
-
#
|
9
|
-
|
10
|
-
require 'test/unit'
|
11
|
-
require 'rubygems'
|
12
|
-
require 'rufus/treechecker'
|
13
|
-
|
14
|
-
|
15
|
-
module TestMixin
|
16
|
-
|
17
|
-
def assert_ok (tc, rubycode)
|
18
|
-
tc.check(rubycode)
|
19
|
-
end
|
20
|
-
def assert_nok (tc, rubycode)
|
21
|
-
assert_raise Rufus::SecurityError, tc.stree(rubycode) do
|
22
|
-
tc.check(rubycode)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
def assert_nocompile (tc, rubycode)
|
26
|
-
assert_raise Racc::ParseError do
|
27
|
-
tc.check(rubycode)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|