safe_yaml 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0e318fdb562f8333d33d6d693e838d454a9753a
4
- data.tar.gz: 4cae1fb4f5f15d42ae0762c35ae9aa543ddf3dc6
3
+ metadata.gz: d56ceb5aefcdb8415178936b17589f26139ec062
4
+ data.tar.gz: cd7b6f5d702b6680eb17116a832f0e651737d599
5
5
  SHA512:
6
- metadata.gz: 4c61eacf1e4e4f2f6d28d64e88ff7b504150e5516ea01a594d9efef2e50abeb2f9623e2c2a2f58a67ad8297aa8bcc9ddaf70c6e3d0c7de248a630d2b1873bb36
7
- data.tar.gz: 8f61f556e31238feeefba576f2503b0369a3591219f2daa9fb81dae80747050f1b80cea51979c7b44cb43f168b993942c31723682d0291d3751393276fda63df
6
+ metadata.gz: 4c4686cc5c8a087bbebdc706862223a3d9df7e28b559d32ff6c9ea1bf8db02d273b5b8cc425f903b8ed20e31915381149e3f330b8815ef20bc6de9f428963dff
7
+ data.tar.gz: ded13cfdc5044e90220bc24d058a79c89c7a319cbe3b120a09ca1e73d78d6dc2d2a32b90f358c06dd2d3f9585e3836246a6df855dcd5cdcc6a4cd38bc9df6b29
data/CHANGES.md CHANGED
@@ -1,3 +1,9 @@
1
+ 0.9.7
2
+ -----
3
+
4
+ - made handling of document frontmatter more robust
5
+ - added more descriptive message to the warning for omitting the :safe option
6
+
1
7
  0.9.6
2
8
  -----
3
9
 
@@ -165,11 +165,12 @@ module YAML
165
165
  # If the user hasn't whitelisted any tags, we can go with this implementation which is
166
166
  # significantly faster.
167
167
  if (options && options[:whitelisted_tags] || SafeYAML::OPTIONS[:whitelisted_tags]).empty?
168
- safe_handler = SafeYAML::PsychHandler.new(options)
168
+ safe_handler = SafeYAML::PsychHandler.new(options) do |result|
169
+ return result
170
+ end
169
171
  arguments_for_parse = [yaml]
170
172
  arguments_for_parse << filename if SafeYAML::MULTI_ARGUMENT_YAML_LOAD
171
173
  Psych::Parser.new(safe_handler).parse(*arguments_for_parse)
172
- return safe_handler.result
173
174
 
174
175
  else
175
176
  safe_resolver = SafeYAML::PsychResolver.new(options)
@@ -236,10 +237,17 @@ module YAML
236
237
  def safe_mode_from_options(method, options={})
237
238
  if options[:safe].nil?
238
239
  safe_mode = SafeYAML::OPTIONS[:default_mode] || :safe
240
+
239
241
  if SafeYAML::OPTIONS[:default_mode].nil? && !SafeYAML::OPTIONS[:suppress_warnings]
240
- Kernel.warn "Called '#{method}' without the :safe option -- defaulting to #{safe_mode} mode."
242
+
243
+ Kernel.warn <<-EOWARNING.gsub(/^\s+/, '')
244
+ Called '#{method}' without the :safe option -- defaulting to #{safe_mode} mode.
245
+ You can avoid this warning in the future by setting the SafeYAML::OPTIONS[:default_mode] option (to :safe or :unsafe).
246
+ EOWARNING
247
+
241
248
  SafeYAML::OPTIONS[:suppress_warnings] = true
242
249
  end
250
+
243
251
  return safe_mode
244
252
  end
245
253
 
@@ -3,8 +3,9 @@ require "base64"
3
3
 
4
4
  module SafeYAML
5
5
  class PsychHandler < Psych::Handler
6
- def initialize(options)
6
+ def initialize(options, &block)
7
7
  @options = SafeYAML::OPTIONS.merge(options || {})
8
+ @block = block
8
9
  @initializers = @options[:custom_initializers] || {}
9
10
  @anchors = {}
10
11
  @stack = []
@@ -44,16 +45,6 @@ module SafeYAML
44
45
  @current_key = nil
45
46
  end
46
47
 
47
- elsif @current_structure.nil?
48
- # It appears that a YAML document may containing trailing text that should not be considered
49
- # part of the serialized data. See issue 48:
50
- #
51
- # https://github.com/dtao/safe_yaml/issues/48
52
- #
53
- # I need to investigate this a bit further; but for now just explicitly ignoring nil should
54
- # fix the issue (since in theory the only scenario where this would happen is after the
55
- # serialized structure has "closed").
56
-
57
48
  else
58
49
  raise "Don't know how to add to a #{@current_structure.class}!"
59
50
  end
@@ -65,7 +56,7 @@ module SafeYAML
65
56
  end
66
57
 
67
58
  def streaming?
68
- false
59
+ true
69
60
  end
70
61
 
71
62
  # event handlers
@@ -77,6 +68,10 @@ module SafeYAML
77
68
  add_to_current_structure(value, anchor, quoted, tag)
78
69
  end
79
70
 
71
+ def end_document(implicit)
72
+ @block.call(@result)
73
+ end
74
+
80
75
  def start_mapping(anchor, tag, implicit, style)
81
76
  map = @initializers.include?(tag) ? @initializers[tag].call : {}
82
77
  self.add_to_current_structure(map, anchor)
@@ -1,3 +1,3 @@
1
1
  module SafeYAML
2
- VERSION = "0.9.6"
2
+ VERSION = "0.9.7"
3
3
  end
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: Blah
3
+ key: value
4
+ ---
5
+
6
+ I'm going to inject a bunch of YAML-looking stuff below and it should all just get ignored.
7
+
8
+ foo: bar
9
+
10
+ - foo
11
+ - bar
12
+
13
+ :foo
14
+ 42
15
+ ~
16
+
17
+ ---
18
+ text: |
19
+ Look, I'm another YAML document!
20
+ ---
@@ -649,14 +649,14 @@ describe YAML do
649
649
  end
650
650
 
651
651
  it "handles files starting with --- (see issue #48)" do
652
- YAML.load_file("spec/issue48.yml", :safe => true).should == {
652
+ YAML.load_file("spec/issue48.txt", :safe => true).should == {
653
653
  "title" => "Blah",
654
654
  "key" => "value"
655
655
  }
656
656
  end
657
657
 
658
658
  it "handles content starting with --- (see issue #48)" do
659
- yaml = File.read("spec/issue48.yml")
659
+ yaml = File.read("spec/issue48.txt")
660
660
  YAML.load(yaml, :safe => true).should == {
661
661
  "title" => "Blah",
662
662
  "key" => "value"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safe_yaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Tao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-16 00:00:00.000000000 Z
11
+ date: 2013-09-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Parse YAML safely, without that pesky arbitrary object deserialization
14
14
  vulnerability
@@ -49,7 +49,7 @@ files:
49
49
  - safe_yaml.gemspec
50
50
  - spec/exploit.1.9.2.yaml
51
51
  - spec/exploit.1.9.3.yaml
52
- - spec/issue48.yml
52
+ - spec/issue48.txt
53
53
  - spec/psych_resolver_spec.rb
54
54
  - spec/resolver_specs.rb
55
55
  - spec/safe_yaml_spec.rb
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  requirements: []
83
83
  rubyforge_project:
84
- rubygems_version: 2.0.0.rc.2
84
+ rubygems_version: 2.0.6
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: SameYAML provides an alternative implementation of YAML.load suitable for
@@ -89,7 +89,7 @@ summary: SameYAML provides an alternative implementation of YAML.load suitable f
89
89
  test_files:
90
90
  - spec/exploit.1.9.2.yaml
91
91
  - spec/exploit.1.9.3.yaml
92
- - spec/issue48.yml
92
+ - spec/issue48.txt
93
93
  - spec/psych_resolver_spec.rb
94
94
  - spec/resolver_specs.rb
95
95
  - spec/safe_yaml_spec.rb
@@ -1,6 +0,0 @@
1
- ---
2
- title: Blah
3
- key: value
4
- ---
5
-
6
- Hey, here are some words!