oj 3.14.0 → 3.14.1

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: 5864f273679d1441d9731976eb4f4c3cdcccaa86c877fae2aeb719cd03f45167
4
- data.tar.gz: 815abc1a8572ce907b280ca632fd010c766ad55e581c3a59d76c0f94ede24234
3
+ metadata.gz: 85912fe57610093a2cd9a8aeed44ac537bfe329c17988ea56624ec55f11fb9f5
4
+ data.tar.gz: f44e342c4381b4487e32ef82ec686ac47115061480c74c835d93bdb12e4c8b7b
5
5
  SHA512:
6
- metadata.gz: 3318017139004f712665ff2fda5dcfc761b33079bb96dd1d8f5baf59d146a45956e3c58f1e700044a714ca2643d5a54196e3b306566130c9bda7242d8c688b91
7
- data.tar.gz: f8f6f637c883ca2b4fa8c76f349940f6be3c1af524d43f3cc0ed4df27a21896f480da520b2897e191d38e50ef939139bdd242c3e3f33aa0c0e3aa8bd3a008a6b
6
+ metadata.gz: a2cfa1959b394dd3a3313fd23756b98efb8a32232d4204892e9c29843e61f05d3cd9288337609fc6e67275a2c383cd2f835e028d66084e873b737f0cd4bb9211
7
+ data.tar.gz: 9364d9503225952d51a9e9fb8ff8b6a6fb74424b7a2adad2d5d1b0f11ebf06c02230553ff8f8c3f0f991fe315e1a6c1904e9e420b56a2832b0c5e48cfe3dd6e3
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 3.14.0 - 2022-01-30
3
+ ## 3.14.1 - 2023-02-01
4
+
5
+ - Fixed issue with uninitialized handler for Oj::Parser::Saj.
6
+
7
+ - Fixed hang on unterminated string with a \0 byte in parse.c.
8
+
9
+ ## 3.14.0 - 2023-01-30
4
10
 
5
11
  - Tracing is now a compile time option giving a 15 to 20% performance boost.
6
12
 
data/ext/oj/object.c CHANGED
@@ -308,7 +308,7 @@ static int hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, vol
308
308
  oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "Invalid struct data");
309
309
  return 1;
310
310
  }
311
- e1 = *RARRAY_PTR(value);
311
+ e1 = *RARRAY_CONST_PTR(value);
312
312
  // check for anonymous Struct
313
313
  if (T_ARRAY == rb_type(e1)) {
314
314
  VALUE args[1024];
@@ -322,10 +322,10 @@ static int hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, vol
322
322
  sc = rb_funcall2(rb_cStruct, oj_new_id, cnt, args);
323
323
  } else {
324
324
  // If struct is not defined then we let this fail and raise an exception.
325
- sc = oj_name2struct(pi, *RARRAY_PTR(value), rb_eArgError);
325
+ sc = oj_name2struct(pi, *RARRAY_CONST_PTR(value), rb_eArgError);
326
326
  }
327
327
  if (sc == rb_cRange) {
328
- parent->val = rb_class_new_instance(len - 1, RARRAY_PTR(value) + 1, rb_cRange);
328
+ parent->val = rb_class_new_instance(len - 1, RARRAY_CONST_PTR(value) + 1, rb_cRange);
329
329
  } else {
330
330
  // Create a properly initialized struct instance without calling the initialize method.
331
331
  parent->val = rb_obj_alloc(sc);
@@ -346,7 +346,7 @@ static int hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, vol
346
346
  int i;
347
347
 
348
348
  for (i = 0; i < len - 1; i++) {
349
- rb_struct_aset(parent->val, INT2FIX(i), RARRAY_PTR(value)[i + 1]);
349
+ rb_struct_aset(parent->val, INT2FIX(i), RARRAY_CONST_PTR(value)[i + 1]);
350
350
  }
351
351
  }
352
352
  }
@@ -359,7 +359,7 @@ static int hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, vol
359
359
  return 1;
360
360
  }
361
361
  parent->val = rb_hash_new();
362
- a = RARRAY_PTR(value);
362
+ a = RARRAY_CONST_PTR(value);
363
363
  rb_hash_aset(parent->val, *a, a[1]);
364
364
 
365
365
  return 1;
@@ -546,7 +546,7 @@ WHICH_TYPE:
546
546
  } else {
547
547
  if (3 <= klen && '^' == *key && '#' == key[1] && T_ARRAY == rb_type(value)) {
548
548
  long len = RARRAY_LEN(value);
549
- volatile VALUE *a = RARRAY_PTR(value);
549
+ volatile VALUE *a = RARRAY_CONST_PTR(value);
550
550
 
551
551
  if (2 != len) {
552
552
  oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "invalid hash pair");
data/ext/oj/parse.c CHANGED
@@ -236,7 +236,7 @@ static void read_escaped_str(ParseInfo pi, const char *start) {
236
236
 
237
237
  for (s = pi->cur; '"' != *s;) {
238
238
  const char *scanned = scan_func(s, pi->end);
239
- if (scanned >= pi->end) {
239
+ if (scanned >= pi->end || '\0' == *s) {
240
240
  oj_set_error_at(pi,
241
241
  oj_parse_error_class,
242
242
  __FILE__,
@@ -245,7 +245,6 @@ static void read_escaped_str(ParseInfo pi, const char *start) {
245
245
  buf_cleanup(&buf);
246
246
  return;
247
247
  }
248
-
249
248
  buf_append_string(&buf, s, (size_t)(scanned - s));
250
249
  s = scanned;
251
250
 
data/ext/oj/saj2.c CHANGED
@@ -578,7 +578,11 @@ void oj_init_saj(ojParser p, Saj d) {
578
578
  d->klen = 256;
579
579
  d->keys = ALLOC_N(VALUE, d->klen);
580
580
  d->tail = d->keys;
581
+ d->handler = Qnil;
581
582
  d->str_cache = cache_create(0, form_str, true, false);
583
+ d->cache_str = 16;
584
+ d->cache_keys = true;
585
+ d->thread_safe = false;
582
586
 
583
587
  p->ctx = (void *)d;
584
588
  reset(p);
data/lib/oj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.14.0'
4
+ VERSION = '3.14.1'
5
5
  end
data/test/foo.rb CHANGED
@@ -7,23 +7,7 @@ $: << File.join(File.dirname(__FILE__), "../ext")
7
7
  require "oj"
8
8
 
9
9
 
10
- p = Oj::Parser.new(:saj)
10
+ s = "{\"f1\":\"data\\nW\x0\"}\r\n"
11
+ #s = "{\"f1\":\"data\\nW\"}\r\n"
11
12
 
12
- json = %|{
13
- "array": [
14
- {
15
- "num" : 3,
16
- "string": "message",
17
- "hash" : {
18
- "h2" : {
19
- "a" : [ 1, 2, 3 ]
20
- }
21
- }
22
- }
23
- ],
24
- "boolean" : true
25
- }|
26
-
27
- 1_000_000.times do
28
- e = Oj.load(json)
29
- end
13
+ j = Oj.load(s)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.0
4
+ version: 3.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-30 00:00:00.000000000 Z
11
+ date: 2023-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler