summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2015-04-20 13:37:52 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2015-04-20 13:37:52 -0700
commita1d4ff3ab371aecc92182f3fc9ff5a966a2df8bc (patch)
treeeaf61da3581bcbb0102a39d62b2d312f7040cb41 /lib
parent5f9b3bd8e896cdba674d16dff83d4c9463d752d7 (diff)
parent329352cda438729a240ff450338f514938d74ba6 (diff)
downloadffi-yajl-a1d4ff3ab371aecc92182f3fc9ff5a966a2df8bc.tar.gz
Merge pull request #55 from chef/lcg/unique_key_checking
add :unique_key_checking flag to parser
Diffstat (limited to 'lib')
-rw-r--r--lib/ffi_yajl/ffi/parser.rb3
-rw-r--r--lib/ffi_yajl/parser.rb2
2 files changed, 5 insertions, 0 deletions
diff --git a/lib/ffi_yajl/ffi/parser.rb b/lib/ffi_yajl/ffi/parser.rb
index b97b2de..8e4dc07 100644
--- a/lib/ffi_yajl/ffi/parser.rb
+++ b/lib/ffi_yajl/ffi/parser.rb
@@ -30,6 +30,9 @@ module FFI_Yajl
case stack.last
when Hash
raise FFI_Yajl::ParseError.new("internal error: missing key in parse") if key.nil?
+ if @opts[:unique_key_checking] && stack.last.has_key?(key)
+ raise FFI_Yajl::ParseError.new("repeated key: #{key}")
+ end
stack.last[key] = val
when Array
stack.last.push(val)
diff --git a/lib/ffi_yajl/parser.rb b/lib/ffi_yajl/parser.rb
index d8389d7..5b9a0c9 100644
--- a/lib/ffi_yajl/parser.rb
+++ b/lib/ffi_yajl/parser.rb
@@ -75,6 +75,8 @@ module FFI_Yajl
yajl_opts[:yajl_allow_multiple_values] = @opts[:allow_multiple_values]
yajl_opts[:yajl_allow_partial_values] = @opts[:allow_partial_values]
+ yajl_opts[:unique_key_checking] = @opts[:unique_key_checking]
+
# XXX: bug-compat with ruby-yajl
return nil if str == ""