oj 2.13.0 → 2.13.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 +4 -4
- data/README.md +4 -0
- data/ext/oj/dump.c +5 -2
- data/ext/oj/parse.c +7 -19
- data/ext/oj/parse.h +1 -1
- data/ext/oj/sparse.c +7 -19
- data/lib/oj/version.rb +1 -1
- data/test/test_various.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 342383c1d1c0650dc81ad7a0f533e21b7ae67fa0
|
4
|
+
data.tar.gz: 7ba24a6ed5411eaef0c539076f0396cbed856489
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a80309e5fc8cd37f2d76f99567012697f5776f212bac9ffe38ee4bf4740853f19653cd49b4d0b7238688e89a857d28f7010a3ac5eaee576638175f63c8a3507
|
7
|
+
data.tar.gz: 4a191f0f8294dde6558d24445b5f01eacf5276a68a823467caf32599ef6691c1523ed5253686372cee3e322dfdc845d2f88ccac471f9990605afa81a3f6edad7
|
data/README.md
CHANGED
@@ -26,6 +26,10 @@ Follow [@peterohler on Twitter](http://twitter.com/#!/peterohler) for announceme
|
|
26
26
|
|
27
27
|
[](http://travis-ci.org/ohler55/oj)
|
28
28
|
|
29
|
+
## Release 2.13.1
|
30
|
+
|
31
|
+
- Thanks to Comboy for the fix to a large number rounding bug.
|
32
|
+
|
29
33
|
## Release 2.13.0
|
30
34
|
|
31
35
|
- Oj no longer raises an exception if the to_hash method of an object does not
|
data/ext/oj/dump.c
CHANGED
@@ -1786,9 +1786,12 @@ dump_struct_obj(VALUE obj, int depth, Out out) {
|
|
1786
1786
|
size = d3 * out->indent + 2;
|
1787
1787
|
#ifdef RSTRUCT_LEN
|
1788
1788
|
{
|
1789
|
-
VALUE *vp;
|
1789
|
+
const VALUE *vp;
|
1790
1790
|
|
1791
|
-
|
1791
|
+
#ifndef RSTRUCT_CONST_PTR
|
1792
|
+
# define RSTRUCT_CONST_PTR(st) (const VALUE *)RSTRUCT_PTR(st)
|
1793
|
+
#endif
|
1794
|
+
for (i = (int)RSTRUCT_LEN(obj), vp = RSTRUCT_CONST_PTR(obj); 0 < i; i--, vp++) {
|
1792
1795
|
if (out->end - out->cur <= (long)size) {
|
1793
1796
|
grow(out, size);
|
1794
1797
|
}
|
data/ext/oj/parse.c
CHANGED
@@ -389,7 +389,6 @@ static void
|
|
389
389
|
read_num(ParseInfo pi) {
|
390
390
|
struct _NumInfo ni;
|
391
391
|
Val parent = stack_peek(&pi->stack);
|
392
|
-
int zero_cnt = 0;
|
393
392
|
|
394
393
|
ni.str = pi->cur;
|
395
394
|
ni.i = 0;
|
@@ -398,7 +397,6 @@ read_num(ParseInfo pi) {
|
|
398
397
|
ni.di = 0;
|
399
398
|
ni.len = 0;
|
400
399
|
ni.exp = 0;
|
401
|
-
ni.dec_cnt = 0;
|
402
400
|
ni.big = 0;
|
403
401
|
ni.infinity = 0;
|
404
402
|
ni.nan = 0;
|
@@ -427,41 +425,32 @@ read_num(ParseInfo pi) {
|
|
427
425
|
pi->cur += 3;
|
428
426
|
ni.nan = 1;
|
429
427
|
} else {
|
428
|
+
int dec_cnt = 0;
|
429
|
+
|
430
430
|
for (; '0' <= *pi->cur && *pi->cur <= '9'; pi->cur++) {
|
431
|
-
|
431
|
+
dec_cnt++;
|
432
432
|
if (ni.big) {
|
433
433
|
ni.big++;
|
434
434
|
} else {
|
435
435
|
int d = (*pi->cur - '0');
|
436
436
|
|
437
|
-
if (0 == d) {
|
438
|
-
zero_cnt++;
|
439
|
-
} else {
|
440
|
-
zero_cnt = 0;
|
441
|
-
}
|
442
|
-
// TBD move size check here
|
443
437
|
ni.i = ni.i * 10 + d;
|
444
|
-
if (LONG_MAX <= ni.i || DEC_MAX <
|
438
|
+
if (LONG_MAX <= ni.i || DEC_MAX < dec_cnt) {
|
445
439
|
ni.big = 1;
|
446
440
|
}
|
447
441
|
}
|
448
442
|
}
|
449
443
|
if ('.' == *pi->cur) {
|
444
|
+
dec_cnt = 0;
|
450
445
|
pi->cur++;
|
451
446
|
for (; '0' <= *pi->cur && *pi->cur <= '9'; pi->cur++) {
|
452
447
|
int d = (*pi->cur - '0');
|
453
448
|
|
454
|
-
|
455
|
-
zero_cnt++;
|
456
|
-
} else {
|
457
|
-
zero_cnt = 0;
|
458
|
-
}
|
459
|
-
ni.dec_cnt++;
|
460
|
-
// TBD move size check here
|
449
|
+
dec_cnt++;
|
461
450
|
ni.num = ni.num * 10 + d;
|
462
451
|
ni.div *= 10;
|
463
452
|
ni.di++;
|
464
|
-
if (LONG_MAX <= ni.div || DEC_MAX <
|
453
|
+
if (LONG_MAX <= ni.div || DEC_MAX < dec_cnt) {
|
465
454
|
ni.big = 1;
|
466
455
|
}
|
467
456
|
}
|
@@ -487,7 +476,6 @@ read_num(ParseInfo pi) {
|
|
487
476
|
ni.exp = -ni.exp;
|
488
477
|
}
|
489
478
|
}
|
490
|
-
ni.dec_cnt -= zero_cnt;
|
491
479
|
ni.len = pi->cur - ni.str;
|
492
480
|
}
|
493
481
|
if (BigDec == pi->options.bigdec_load) {
|
data/ext/oj/parse.h
CHANGED
data/ext/oj/sparse.c
CHANGED
@@ -399,7 +399,6 @@ read_str(ParseInfo pi) {
|
|
399
399
|
static void
|
400
400
|
read_num(ParseInfo pi) {
|
401
401
|
struct _NumInfo ni;
|
402
|
-
int zero_cnt = 0;
|
403
402
|
char c;
|
404
403
|
|
405
404
|
reader_protect(&pi->rd);
|
@@ -409,7 +408,6 @@ read_num(ParseInfo pi) {
|
|
409
408
|
ni.di = 0;
|
410
409
|
ni.len = 0;
|
411
410
|
ni.exp = 0;
|
412
|
-
ni.dec_cnt = 0;
|
413
411
|
ni.big = 0;
|
414
412
|
ni.infinity = 0;
|
415
413
|
ni.nan = 0;
|
@@ -430,39 +428,32 @@ read_num(ParseInfo pi) {
|
|
430
428
|
}
|
431
429
|
ni.infinity = 1;
|
432
430
|
} else {
|
431
|
+
int dec_cnt = 0;
|
432
|
+
|
433
433
|
for (; '0' <= c && c <= '9'; c = reader_get(&pi->rd)) {
|
434
|
-
|
434
|
+
dec_cnt++;
|
435
435
|
if (ni.big) {
|
436
436
|
ni.big++;
|
437
437
|
} else {
|
438
438
|
int d = (c - '0');
|
439
439
|
|
440
|
-
if (0 == d) {
|
441
|
-
zero_cnt++;
|
442
|
-
} else {
|
443
|
-
zero_cnt = 0;
|
444
|
-
}
|
445
440
|
ni.i = ni.i * 10 + d;
|
446
|
-
if (LONG_MAX <= ni.i || DEC_MAX <
|
441
|
+
if (LONG_MAX <= ni.i || DEC_MAX < dec_cnt) {
|
447
442
|
ni.big = 1;
|
448
443
|
}
|
449
444
|
}
|
450
445
|
}
|
451
446
|
if ('.' == c) {
|
447
|
+
dec_cnt = 0;
|
452
448
|
c = reader_get(&pi->rd);
|
453
449
|
for (; '0' <= c && c <= '9'; c = reader_get(&pi->rd)) {
|
454
450
|
int d = (c - '0');
|
455
451
|
|
456
|
-
|
457
|
-
zero_cnt++;
|
458
|
-
} else {
|
459
|
-
zero_cnt = 0;
|
460
|
-
}
|
461
|
-
ni.dec_cnt++;
|
452
|
+
dec_cnt++;
|
462
453
|
ni.num = ni.num * 10 + d;
|
463
454
|
ni.div *= 10;
|
464
455
|
ni.di++;
|
465
|
-
if (LONG_MAX <= ni.div || DEC_MAX <
|
456
|
+
if (LONG_MAX <= ni.div || DEC_MAX < dec_cnt) {
|
466
457
|
ni.big = 1;
|
467
458
|
}
|
468
459
|
}
|
@@ -488,7 +479,6 @@ read_num(ParseInfo pi) {
|
|
488
479
|
ni.exp = -ni.exp;
|
489
480
|
}
|
490
481
|
}
|
491
|
-
ni.dec_cnt -= zero_cnt;
|
492
482
|
ni.len = pi->rd.tail - pi->rd.str;
|
493
483
|
if (0 != c) {
|
494
484
|
reader_backup(&pi->rd);
|
@@ -515,7 +505,6 @@ read_nan(ParseInfo pi) {
|
|
515
505
|
ni.di = 0;
|
516
506
|
ni.len = 0;
|
517
507
|
ni.exp = 0;
|
518
|
-
ni.dec_cnt = 0;
|
519
508
|
ni.big = 0;
|
520
509
|
ni.infinity = 0;
|
521
510
|
ni.nan = 1;
|
@@ -685,7 +674,6 @@ oj_sparse2(ParseInfo pi) {
|
|
685
674
|
ni.di = 0;
|
686
675
|
ni.len = 0;
|
687
676
|
ni.exp = 0;
|
688
|
-
ni.dec_cnt = 0;
|
689
677
|
ni.big = 0;
|
690
678
|
ni.infinity = 0;
|
691
679
|
ni.nan = 1;
|
data/lib/oj/version.rb
CHANGED
data/test/test_various.rb
CHANGED
@@ -109,12 +109,11 @@ class Juice < Minitest::Test
|
|
109
109
|
:float_precision=>15,
|
110
110
|
:mode=>:object,
|
111
111
|
:escape_mode=>:json,
|
112
|
-
:time_format=>:
|
112
|
+
:time_format=>:unix_zone,
|
113
113
|
:bigdecimal_load=>:auto,
|
114
114
|
:create_id=>'json_class'}, opts)
|
115
115
|
end
|
116
116
|
=end
|
117
|
-
|
118
117
|
def test_set_options
|
119
118
|
orig ={
|
120
119
|
:indent=>0,
|
@@ -901,8 +900,10 @@ class Juice < Minitest::Test
|
|
901
900
|
b = Oj.load(json, :mode => :strict)
|
902
901
|
assert_equal(30226801971775055948247051683954096612865741943, b)
|
903
902
|
end
|
903
|
+
|
904
904
|
def test_bignum_object
|
905
905
|
dump_and_load(7 ** 55, false)
|
906
|
+
dump_and_load(10 ** 19, false)
|
906
907
|
end
|
907
908
|
|
908
909
|
# BigDecimal
|
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: 2.13.
|
4
|
+
version: 2.13.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: 2015-
|
11
|
+
date: 2015-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|