oj-safe 0.2.0 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5db75d52595ff977025eb4746986c3e640f865fb0e022dc979cad6a1ebbf4c59
4
- data.tar.gz: fffe75b048a7b2f9a583517b038c3d4f14d592f8d860a880f851a7c3cc352f30
3
+ metadata.gz: 262a285be89f6f4758bba4caad7c99eda8eac378bd4b0eb4fb68a8c77737f26a
4
+ data.tar.gz: f74a8afb6c8272ebe279db56229a9be6e453a192d73bff71403cd14f678288e0
5
5
  SHA512:
6
- metadata.gz: 989dae91a64a063661d2a761b72bd5f0e7b593a157123131ab06ead18092098801b21b22031cc3f8a483206d06edeb530d1d28892df31562d12f8b791be3e4eb
7
- data.tar.gz: 9d9b2c822fbce6dad86f969f653217462af714f79e1a757cbde2fb14cfb062977b436ff844ea81cf31b50ba66a1c90e43795a16878a4d59cc9941d8c2ce3c5d1
6
+ metadata.gz: ccd553b596fa4a7da41881a5ca1e8c1d2bedff4fc58fbc917a8e0e005a53a5a4025d61fb8e29397a366fe86c02aec73f7c3f4c5aacd4f3ac1b9df1fed7fb5bc5
7
+ data.tar.gz: a86b9023619c3585b8056872fc378aff581302d4da577640da4f30145c3be1505237006a95ef8fd56e8589e537b4276361fcb85acff5da6c652a023545e5f68d
data/README.md CHANGED
@@ -28,7 +28,7 @@ Maximum number of key/value pairs allowed in a JSON object.
28
28
  parser = Oj::Safe.new(max_hash_size: 2)
29
29
 
30
30
  parser.parse('{ "foo": 1, "bar": 2 }') # => { "foo" => 1, "bar" => 2 }
31
- parser.parse('{ "foo": 1, "bar": 2, "baz": 3 }') # => Raises `Oj::Safe::ValidationError`.
31
+ parser.parse('{ "foo": 1, "bar": 2, "baz": 3 }') # => Raises `Oj::Safe::HashSizeError`.
32
32
  ```
33
33
 
34
34
  ##### `max_array_size`
@@ -39,7 +39,7 @@ Maximum number of items allowed in a JSON array.
39
39
  parser = Oj::Safe.new(max_array_size: 2)
40
40
 
41
41
  parser.parse('[1, 2]') # => [1, 2]
42
- parser.parse('[1, 2, 3]') # => Raises `Oj::Safe::ValidationError`.
42
+ parser.parse('[1, 2, 3]') # => Raises `Oj::Safe::ArraySizeError`.
43
43
  ```
44
44
 
45
45
  ##### `max_depth`
@@ -50,7 +50,7 @@ Maximum nesting depth allowed.
50
50
  parser = Oj::Safe.new(max_depth: 2)
51
51
 
52
52
  parser.parse('[[]]') # => [[]]
53
- parser.parse('[[[]]]]') # => Raises `Oj::Safe::ValidationError`.
53
+ parser.parse('[[[]]]]') # => Raises `Oj::Safe::DepthError`.
54
54
  ```
55
55
 
56
56
  ##### `max_total_elements`
@@ -61,7 +61,7 @@ Maximum total number of parsed elements.
61
61
  parser = Oj::Safe.new(max_total_elements: 2)
62
62
 
63
63
  parser.parse('[true]') # => [true]
64
- parser.parse('[true, false]') # => Raises `Oj::Safe::ValidationError`.
64
+ parser.parse('[true, false]') # => Raises `Oj::Safe::TotalElementsError`.
65
65
  ```
66
66
 
67
67
  ##### `max_json_size_bytes`
@@ -72,7 +72,7 @@ Maximum size of the input JSON string in bytes.
72
72
  parser = Oj::Safe.new(max_json_size_bytes: 2)
73
73
 
74
74
  parser.parse('12') # => 12
75
- parser.parse('123') # => Raises `Oj::Safe::ValidationError`.
75
+ parser.parse('123') # => Raises `Oj::Safe::PayloadSizeError`.
76
76
  ```
77
77
 
78
78
  ## Development
data/ext/oj-safe/oj.sym CHANGED
@@ -1,3 +1,2 @@
1
1
  _oj_init_usual
2
2
  _oj_parser_new
3
- _oj_parser_set_option
data/ext/oj-safe/safe.c CHANGED
@@ -19,7 +19,11 @@ static VALUE max_hash_size_sym,
19
19
  max_depth_sym,
20
20
  max_total_elements_sym,
21
21
  max_json_size_bytes_sym,
22
- validation_error_class;
22
+ max_hash_size_error_class,
23
+ max_array_size_error_class,
24
+ max_depth_error_class,
25
+ max_total_elements_error_class,
26
+ max_json_size_error_class;
23
27
 
24
28
  static ID parser_ivar_id,
25
29
  parse_id,
@@ -74,7 +78,7 @@ static void check_object_size(safe_T safe) {
74
78
 
75
79
  if(safe->max_hash_size > number_of_items_in_hash) return;
76
80
 
77
- rb_raise(validation_error_class, "Too many object items!");
81
+ rb_raise(max_hash_size_error_class, "Too many object items!");
78
82
  }
79
83
 
80
84
  static void check_array_size(safe_T safe) {
@@ -88,13 +92,13 @@ static void check_array_size(safe_T safe) {
88
92
 
89
93
  if(safe->max_array_size > number_of_items_in_array) return;
90
94
 
91
- rb_raise(validation_error_class, "Too many array items!");
95
+ rb_raise(max_array_size_error_class, "Too many array items!");
92
96
  }
93
97
 
94
98
  static void check_max_depth(safe_T safe, ojParser p) {
95
99
  if(safe->max_depth == 0 || safe->max_depth >= (p->depth + 1)) return;
96
100
 
97
- rb_raise(validation_error_class, "JSON is too deep!");
101
+ rb_raise(max_depth_error_class, "JSON is too deep!");
98
102
  }
99
103
 
100
104
  static void check_max_total_elements(safe_T safe) {
@@ -106,7 +110,7 @@ static void check_max_total_elements(safe_T safe) {
106
110
  */
107
111
  if(safe->max_total_elements == 0 || safe->max_total_elements > safe->current_elements_count) return;
108
112
 
109
- rb_raise(validation_error_class, "Too many elements!");
113
+ rb_raise(max_total_elements_error_class, "Too many elements!");
110
114
  }
111
115
 
112
116
  static void check_json_size(VALUE parser, VALUE json) {
@@ -119,7 +123,7 @@ static void check_json_size(VALUE parser, VALUE json) {
119
123
 
120
124
  if(safe->max_json_size_bytes == 0 || safe->max_json_size_bytes >= json_byte_size) return;
121
125
 
122
- rb_raise(validation_error_class, "JSON payload is too big!");
126
+ rb_raise(max_json_size_error_class, "JSON payload is too big!");
123
127
  }
124
128
 
125
129
  static void safe_start(ojParser p) {
@@ -440,8 +444,19 @@ static VALUE rb_safe_parse(VALUE self, VALUE json) {
440
444
  void Init_safe_ext(void) {
441
445
  VALUE oj_module = rb_const_get(rb_cObject, rb_intern("Oj"));
442
446
  VALUE safe_parser_class = rb_define_class_under(oj_module, "Safe", rb_cObject);
443
- validation_error_class = rb_define_class_under(safe_parser_class, "ValidationError", rb_eRuntimeError);
444
- rb_gc_register_address(&validation_error_class);
447
+ VALUE validation_error_class = rb_define_class_under(safe_parser_class, "ValidationError", rb_eRuntimeError);
448
+
449
+ max_hash_size_error_class = rb_define_class_under(safe_parser_class, "HashSizeError", validation_error_class);
450
+ max_array_size_error_class = rb_define_class_under(safe_parser_class, "ArraySizeError", validation_error_class);
451
+ max_depth_error_class = rb_define_class_under(safe_parser_class, "DepthError", validation_error_class);
452
+ max_total_elements_error_class = rb_define_class_under(safe_parser_class, "TotalElementsError", validation_error_class);
453
+ max_json_size_error_class = rb_define_class_under(safe_parser_class, "PayloadSizeError", validation_error_class);
454
+
455
+ rb_gc_register_address(&max_hash_size_error_class);
456
+ rb_gc_register_address(&max_array_size_error_class);
457
+ rb_gc_register_address(&max_depth_error_class);
458
+ rb_gc_register_address(&max_total_elements_error_class);
459
+ rb_gc_register_address(&max_json_size_error_class);
445
460
 
446
461
  max_hash_size_sym = ID2SYM(rb_intern("max_hash_size"));
447
462
  max_array_size_sym = ID2SYM(rb_intern("max_array_size"));
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Oj
4
4
  class Safe
5
- VERSION = "0.2.0"
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj-safe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Emin INAC
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 3.16.10
18
+ version: 3.16.16
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 3.16.10
25
+ version: 3.16.16
26
26
  description: A JSON parser that enforces configurable limits on input size and structure
27
27
  to prevent excessive resource usage.
28
28
  email:
@@ -62,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  requirements: []
65
- rubygems_version: 4.0.7
65
+ rubygems_version: 4.0.8
66
66
  specification_version: 4
67
67
  summary: Safe JSON parser with configurable limits.
68
68
  test_files: []