rufus-treechecker 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.txt CHANGED
@@ -2,6 +2,11 @@
2
2
  = rufus-treechecker CHANGELOG.txt
3
3
 
4
4
 
5
+ == rufus-treechecker - 1.0.7 released 2011/07/31
6
+
7
+ - "rescue => e" not triggering "global vars forbidden" anymore
8
+
9
+
5
10
  == rufus-treechecker - 1.0.6 released 2011/05/10
6
11
 
7
12
  - clone then add_rules issue, the real fix
@@ -122,7 +122,7 @@ module Rufus
122
122
  #
123
123
  class TreeChecker
124
124
 
125
- VERSION = '1.0.6'
125
+ VERSION = '1.0.7'
126
126
 
127
127
  # pretty-prints the sexp tree of the given rubycode
128
128
  #
@@ -242,16 +242,17 @@ module Rufus
242
242
  # accepted patterns are evaluated before excluded patterns
243
243
  # if one is found the excluded patterns are skipped
244
244
 
245
- pats = @accepted_patterns[sexp.first]
246
- pats.each { |pat| return if check_pattern(sexp, pat) } if pats
245
+ pats = @accepted_patterns[sexp.first] || []
246
+ return false if pats.find { |pat| check_pattern(sexp, pat) }
247
247
 
248
- pats = @excluded_patterns[sexp.first]
249
- return unless pats
248
+ pats = @excluded_patterns[sexp.first] || []
250
249
 
251
250
  pats.each do |pat, msg|
252
251
  raise SecurityError.new(msg) if check_pattern(sexp, pat)
253
252
  end
254
253
  end
254
+
255
+ true
255
256
  end
256
257
 
257
258
  def freeze
@@ -303,11 +304,14 @@ module Rufus
303
304
 
304
305
  return false if sexp.length < pat.length
305
306
 
306
- (1..pat.length-1).each do |i|
307
+ (1..pat.length - 1).each do |i|
308
+ #puts '.'
309
+ #p (pat[i], sexp[i])
310
+ #p (pat[i] != :any and pat[i] != sexp[i])
307
311
  return false if (pat[i] != :any and pat[i] != sexp[i])
308
312
  end
309
313
 
310
- return true # we have a match
314
+ true # we have a match
311
315
  end
312
316
  end
313
317
 
@@ -432,7 +436,7 @@ module Rufus
432
436
  @current_set.exclude_symbol(:defn, 'method definitions are forbidden')
433
437
  end
434
438
 
435
- # Bans the defintion and the [re]openening of classes
439
+ # Bans the definition and the [re]opening of classes
436
440
  #
437
441
  # a list of exceptions (classes) can be passed. Subclassing those
438
442
  # exceptions is permitted.
@@ -466,6 +470,9 @@ module Rufus
466
470
  #
467
471
  def exclude_global_vars
468
472
 
473
+ @current_set.accept_pattern([ :gvar, :$! ])
474
+ # "rescue => e" is accepted
475
+
469
476
  @current_set.exclude_symbol(:gvar, 'global vars are forbidden')
470
477
  @current_set.exclude_symbol(:gasgn, 'global vars are forbidden')
471
478
  end
@@ -516,10 +523,15 @@ module Rufus
516
523
  #
517
524
  def do_check(sexp)
518
525
 
519
- @set.check(sexp)
526
+ continue = @set.check(sexp)
520
527
 
521
- return unless sexp.is_a?(Array) # check over, seems fine...
528
+ return unless continue
529
+ # found an accepted pattern, no need to dive into it
522
530
 
531
+ return unless sexp.is_a?(Array)
532
+ # check over, seems fine...
533
+
534
+ #
523
535
  # check children
524
536
 
525
537
  sexp.each { |c| do_check(c) }
data/spec/high_spec.rb CHANGED
@@ -19,9 +19,19 @@ describe Rufus::TreeChecker do
19
19
  end
20
20
 
21
21
  it 'does not block "1 + 1"' do
22
+
22
23
  lambda { tc.check("1 + 1") }.should_not raise_error
23
24
  end
24
25
 
26
+ it 'does not block begin/rescue/end' do
27
+
28
+ tc.check(%{
29
+ begin
30
+ rescue => e
31
+ end
32
+ })
33
+ end
34
+
25
35
  [
26
36
 
27
37
  "$ENV",
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufus-treechecker
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease:
5
- version: 1.0.6
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 7
10
+ version: 1.0.7
6
11
  platform: ruby
7
12
  authors:
8
13
  - John Mettraux
@@ -10,7 +15,7 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-05-10 00:00:00 +09:00
18
+ date: 2011-07-31 00:00:00 +09:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
@@ -21,6 +26,11 @@ dependencies:
21
26
  requirements:
22
27
  - - ">="
23
28
  - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 5
24
34
  version: 2.0.5
25
35
  type: :runtime
26
36
  version_requirements: *id001
@@ -32,6 +42,9 @@ dependencies:
32
42
  requirements:
33
43
  - - ">="
34
44
  - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
35
48
  version: "0"
36
49
  type: :development
37
50
  version_requirements: *id002
@@ -43,6 +56,10 @@ dependencies:
43
56
  requirements:
44
57
  - - ">="
45
58
  - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 2
62
+ - 0
46
63
  version: "2.0"
47
64
  type: :development
48
65
  version_requirements: *id003
@@ -86,12 +103,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
103
  requirements:
87
104
  - - ">="
88
105
  - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
89
109
  version: "0"
90
110
  required_rubygems_version: !ruby/object:Gem::Requirement
91
111
  none: false
92
112
  requirements:
93
113
  - - ">="
94
114
  - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
95
118
  version: "0"
96
119
  requirements: []
97
120