summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-06-14 16:50:46 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-06-14 16:50:46 -0700
commit8f640b6d665926c6687d6138c8f6485b43c3a857 (patch)
tree1d5046f068b8bcbb19b839b61ba5d3b357302e5a /lib
parent4d056c20768cb8e5a8169ee5d6bf46fc82e19f19 (diff)
downloadffi-yajl-8f640b6d665926c6687d6138c8f6485b43c3a857.tar.gz
support yajl parser options
Diffstat (limited to 'lib')
-rw-r--r--lib/ffi_yajl/ffi/parser.rb12
-rw-r--r--lib/ffi_yajl/parser.rb13
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/ffi_yajl/ffi/parser.rb b/lib/ffi_yajl/ffi/parser.rb
index cc454f0..7c1dbbc 100644
--- a/lib/ffi_yajl/ffi/parser.rb
+++ b/lib/ffi_yajl/ffi/parser.rb
@@ -115,6 +115,18 @@ module FFI_Yajl
if yajl_opts[:yajl_allow_comments]
::FFI_Yajl.yajl_config(yajl_handle, :yajl_allow_comments, :int, 1)
end
+ if yajl_opts[:yajl_dont_validate_strings]
+ ::FFI_Yajl.yajl_config(yajl_handle, :yajl_dont_validate_strings, :int, 1)
+ end
+ if yajl_opts[:yajl_allow_trailing_garbage]
+ ::FFI_Yajl.yajl_config(yajl_handle, :yajl_allow_trailing_garbage, :int, 1)
+ end
+ if yajl_opts[:yajl_allow_multiple_values]
+ ::FFI_Yajl.yajl_config(yajl_handle, :yajl_allow_multiple_values, :int, 1)
+ end
+ if yajl_opts[:yajl_allow_partial_values]
+ ::FFI_Yajl.yajl_config(yajl_handle, :yajl_allow_partial_values, :int, 1)
+ end
if ( stat = ::FFI_Yajl.yajl_parse(yajl_handle, str, str.bytesize) != :yajl_status_ok )
# FIXME: dup the error and call yajl_free_error?
diff --git a/lib/ffi_yajl/parser.rb b/lib/ffi_yajl/parser.rb
index f1b9625..0f44477 100644
--- a/lib/ffi_yajl/parser.rb
+++ b/lib/ffi_yajl/parser.rb
@@ -34,7 +34,18 @@ module FFI_Yajl
# initialization that we can do in pure ruby
yajl_opts = {}
- yajl_opts[:yajl_allow_comments] = @opts[:allow_comments]
+ if @opts[:check_utf8] == false && @opts[:dont_validate_strings] == false
+ raise ArgumentError, "options check_utf8 and dont_validate_strings are both false which conflict"
+ end
+ if @opts[:check_utf8] == true && @opts[:dont_validate_strings] == true
+ raise ArgumentError, "options check_utf8 and dont_validate_strings are both true which conflict"
+ end
+
+ yajl_opts[:yajl_allow_comments] = @opts[:allow_comments]
+ yajl_opts[:yajl_dont_validate_strings] = (@opts[:check_utf8] == false || @opts[:dont_validate_strings])
+ yajl_opts[:yajl_allow_trailing_garbage] = @opts[:allow_trailing_garbage]
+ yajl_opts[:yajl_allow_multiple_values] = @opts[:allow_multiple_values]
+ yajl_opts[:yajl_allow_partial_values] = @opts[:allow_partial_values]
# XXX: bug-compat with ruby-yajl
return nil if str == ""