json 2.5.1 → 2.6.2
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/CHANGES.md +16 -5
- data/README.md +3 -3
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +1 -11
- data/ext/json/ext/parser/extconf.rb +1 -0
- data/ext/json/ext/parser/parser.c +2981 -1813
- data/ext/json/ext/parser/parser.h +5 -1
- data/ext/json/ext/parser/parser.rl +75 -28
- data/json.gemspec +2 -8
- data/lib/json/pure/parser.rb +1 -1
- data/lib/json/version.rb +1 -1
- data/lib/json.rb +1 -1
- metadata +6 -87
- data/Gemfile +0 -14
- data/lib/json/ext/.keep +0 -0
- data/tests/fixtures/fail10.json +0 -1
- data/tests/fixtures/fail11.json +0 -1
- data/tests/fixtures/fail12.json +0 -1
- data/tests/fixtures/fail13.json +0 -1
- data/tests/fixtures/fail14.json +0 -1
- data/tests/fixtures/fail18.json +0 -1
- data/tests/fixtures/fail19.json +0 -1
- data/tests/fixtures/fail2.json +0 -1
- data/tests/fixtures/fail20.json +0 -1
- data/tests/fixtures/fail21.json +0 -1
- data/tests/fixtures/fail22.json +0 -1
- data/tests/fixtures/fail23.json +0 -1
- data/tests/fixtures/fail24.json +0 -1
- data/tests/fixtures/fail25.json +0 -1
- data/tests/fixtures/fail27.json +0 -2
- data/tests/fixtures/fail28.json +0 -2
- data/tests/fixtures/fail29.json +0 -1
- data/tests/fixtures/fail3.json +0 -1
- data/tests/fixtures/fail30.json +0 -1
- data/tests/fixtures/fail31.json +0 -1
- data/tests/fixtures/fail32.json +0 -1
- data/tests/fixtures/fail4.json +0 -1
- data/tests/fixtures/fail5.json +0 -1
- data/tests/fixtures/fail6.json +0 -1
- data/tests/fixtures/fail7.json +0 -1
- data/tests/fixtures/fail8.json +0 -1
- data/tests/fixtures/fail9.json +0 -1
- data/tests/fixtures/obsolete_fail1.json +0 -1
- data/tests/fixtures/pass1.json +0 -56
- data/tests/fixtures/pass15.json +0 -1
- data/tests/fixtures/pass16.json +0 -1
- data/tests/fixtures/pass17.json +0 -1
- data/tests/fixtures/pass2.json +0 -1
- data/tests/fixtures/pass26.json +0 -1
- data/tests/fixtures/pass3.json +0 -6
- data/tests/json_addition_test.rb +0 -199
- data/tests/json_common_interface_test.rb +0 -169
- data/tests/json_encoding_test.rb +0 -107
- data/tests/json_ext_parser_test.rb +0 -15
- data/tests/json_fixtures_test.rb +0 -40
- data/tests/json_generator_test.rb +0 -399
- data/tests/json_generic_object_test.rb +0 -82
- data/tests/json_parser_test.rb +0 -497
- data/tests/json_string_matching_test.rb +0 -38
- data/tests/lib/core_assertions.rb +0 -763
- data/tests/lib/envutil.rb +0 -365
- data/tests/lib/find_executable.rb +0 -22
- data/tests/lib/helper.rb +0 -4
- data/tests/ractor_test.rb +0 -30
- data/tests/test_helper.rb +0 -17
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
#include "st.h"
|
|
14
14
|
#endif
|
|
15
15
|
|
|
16
|
+
#ifndef MAYBE_UNUSED
|
|
17
|
+
# define MAYBE_UNUSED(x) x
|
|
18
|
+
#endif
|
|
19
|
+
|
|
16
20
|
#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
|
|
17
21
|
|
|
18
22
|
/* unicode */
|
|
@@ -63,7 +67,7 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
63
67
|
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
64
68
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
65
69
|
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
|
66
|
-
static VALUE json_string_unescape(
|
|
70
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize);
|
|
67
71
|
static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
68
72
|
static VALUE convert_encoding(VALUE source);
|
|
69
73
|
static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
|
|
@@ -452,17 +452,37 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
454
|
|
|
455
|
-
static
|
|
455
|
+
static const size_t MAX_STACK_BUFFER_SIZE = 128;
|
|
456
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize)
|
|
456
457
|
{
|
|
457
|
-
|
|
458
|
+
VALUE result = Qnil;
|
|
459
|
+
size_t bufferSize = stringEnd - string;
|
|
460
|
+
char *p = string, *pe = string, *unescape, *bufferStart, *buffer;
|
|
458
461
|
int unescape_len;
|
|
459
462
|
char buf[4];
|
|
460
463
|
|
|
464
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
465
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
466
|
+
bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1);
|
|
467
|
+
# else
|
|
468
|
+
bufferStart = buffer = ALLOC_N(char, bufferSize);
|
|
469
|
+
# endif
|
|
470
|
+
} else {
|
|
471
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
472
|
+
bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1);
|
|
473
|
+
# else
|
|
474
|
+
bufferStart = buffer = ALLOCA_N(char, bufferSize);
|
|
475
|
+
# endif
|
|
476
|
+
}
|
|
477
|
+
|
|
461
478
|
while (pe < stringEnd) {
|
|
462
479
|
if (*pe == '\\') {
|
|
463
480
|
unescape = (char *) "?";
|
|
464
481
|
unescape_len = 1;
|
|
465
|
-
if (pe > p)
|
|
482
|
+
if (pe > p) {
|
|
483
|
+
MEMCPY(buffer, p, char, pe - p);
|
|
484
|
+
buffer += pe - p;
|
|
485
|
+
}
|
|
466
486
|
switch (*++pe) {
|
|
467
487
|
case 'n':
|
|
468
488
|
unescape = (char *) "\n";
|
|
@@ -487,6 +507,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
487
507
|
break;
|
|
488
508
|
case 'u':
|
|
489
509
|
if (pe > stringEnd - 4) {
|
|
510
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
511
|
+
free(bufferStart);
|
|
512
|
+
}
|
|
490
513
|
rb_enc_raise(
|
|
491
514
|
EXC_ENCODING eParserError,
|
|
492
515
|
"%u: incomplete unicode character escape sequence at '%s'", __LINE__, p
|
|
@@ -497,6 +520,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
497
520
|
if (UNI_SUR_HIGH_START == (ch & 0xFC00)) {
|
|
498
521
|
pe++;
|
|
499
522
|
if (pe > stringEnd - 6) {
|
|
523
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
524
|
+
free(bufferStart);
|
|
525
|
+
}
|
|
500
526
|
rb_enc_raise(
|
|
501
527
|
EXC_ENCODING eParserError,
|
|
502
528
|
"%u: incomplete surrogate pair at '%s'", __LINE__, p
|
|
@@ -520,13 +546,55 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
520
546
|
p = pe;
|
|
521
547
|
continue;
|
|
522
548
|
}
|
|
523
|
-
|
|
549
|
+
MEMCPY(buffer, unescape, char, unescape_len);
|
|
550
|
+
buffer += unescape_len;
|
|
524
551
|
p = ++pe;
|
|
525
552
|
} else {
|
|
526
553
|
pe++;
|
|
527
554
|
}
|
|
528
555
|
}
|
|
529
|
-
|
|
556
|
+
|
|
557
|
+
if (pe > p) {
|
|
558
|
+
MEMCPY(buffer, p, char, pe - p);
|
|
559
|
+
buffer += pe - p;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
563
|
+
if (intern) {
|
|
564
|
+
result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding());
|
|
565
|
+
} else {
|
|
566
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
|
567
|
+
}
|
|
568
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
569
|
+
free(bufferStart);
|
|
570
|
+
}
|
|
571
|
+
# else
|
|
572
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
|
573
|
+
|
|
574
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
575
|
+
free(bufferStart);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
if (intern) {
|
|
579
|
+
# if STR_UMINUS_DEDUPE_FROZEN
|
|
580
|
+
// Starting from MRI 2.8 it is preferable to freeze the string
|
|
581
|
+
// before deduplication so that it can be interned directly
|
|
582
|
+
// otherwise it would be duplicated first which is wasteful.
|
|
583
|
+
result = rb_funcall(rb_str_freeze(result), i_uminus, 0);
|
|
584
|
+
# elif STR_UMINUS_DEDUPE
|
|
585
|
+
// MRI 2.5 and older do not deduplicate strings that are already
|
|
586
|
+
// frozen.
|
|
587
|
+
result = rb_funcall(result, i_uminus, 0);
|
|
588
|
+
# else
|
|
589
|
+
result = rb_str_freeze(result);
|
|
590
|
+
# endif
|
|
591
|
+
}
|
|
592
|
+
# endif
|
|
593
|
+
|
|
594
|
+
if (symbolize) {
|
|
595
|
+
result = rb_str_intern(result);
|
|
596
|
+
}
|
|
597
|
+
|
|
530
598
|
return result;
|
|
531
599
|
}
|
|
532
600
|
|
|
@@ -537,12 +605,11 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
537
605
|
write data;
|
|
538
606
|
|
|
539
607
|
action parse_string {
|
|
540
|
-
*result = json_string_unescape(
|
|
608
|
+
*result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
|
541
609
|
if (NIL_P(*result)) {
|
|
542
610
|
fhold;
|
|
543
611
|
fbreak;
|
|
544
612
|
} else {
|
|
545
|
-
FORCE_UTF8(*result);
|
|
546
613
|
fexec p + 1;
|
|
547
614
|
}
|
|
548
615
|
}
|
|
@@ -569,7 +636,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
|
569
636
|
int cs = EVIL;
|
|
570
637
|
VALUE match_string;
|
|
571
638
|
|
|
572
|
-
*result = rb_str_buf_new(0);
|
|
573
639
|
%% write init;
|
|
574
640
|
json->memo = p;
|
|
575
641
|
%% write exec;
|
|
@@ -585,26 +651,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
|
585
651
|
}
|
|
586
652
|
}
|
|
587
653
|
|
|
588
|
-
if (json->symbolize_names && json->parsing_name) {
|
|
589
|
-
*result = rb_str_intern(*result);
|
|
590
|
-
} else if (RB_TYPE_P(*result, T_STRING)) {
|
|
591
|
-
# if STR_UMINUS_DEDUPE_FROZEN
|
|
592
|
-
if (json->freeze) {
|
|
593
|
-
// Starting from MRI 2.8 it is preferable to freeze the string
|
|
594
|
-
// before deduplication so that it can be interned directly
|
|
595
|
-
// otherwise it would be duplicated first which is wasteful.
|
|
596
|
-
*result = rb_funcall(rb_str_freeze(*result), i_uminus, 0);
|
|
597
|
-
}
|
|
598
|
-
# elif STR_UMINUS_DEDUPE
|
|
599
|
-
if (json->freeze) {
|
|
600
|
-
// MRI 2.5 and older do not deduplicate strings that are already
|
|
601
|
-
// frozen.
|
|
602
|
-
*result = rb_funcall(*result, i_uminus, 0);
|
|
603
|
-
}
|
|
604
|
-
# else
|
|
605
|
-
rb_str_resize(*result, RSTRING_LEN(*result));
|
|
606
|
-
# endif
|
|
607
|
-
}
|
|
608
654
|
if (cs >= JSON_string_first_final) {
|
|
609
655
|
return p + 1;
|
|
610
656
|
} else {
|
|
@@ -801,6 +847,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
801
847
|
*
|
|
802
848
|
* Parses the current JSON text _source_ and returns the complete data
|
|
803
849
|
* structure as a result.
|
|
850
|
+
* It raises JSON::ParseError if fail to parse.
|
|
804
851
|
*/
|
|
805
852
|
static VALUE cParser_parse(VALUE self)
|
|
806
853
|
{
|
data/json.gemspec
CHANGED
|
@@ -15,7 +15,6 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"]
|
|
16
16
|
s.files = [
|
|
17
17
|
"CHANGES.md",
|
|
18
|
-
"Gemfile",
|
|
19
18
|
"LICENSE",
|
|
20
19
|
"README.md",
|
|
21
20
|
"VERSION",
|
|
@@ -48,13 +47,12 @@ Gem::Specification.new do |s|
|
|
|
48
47
|
"lib/json/add/time.rb",
|
|
49
48
|
"lib/json/common.rb",
|
|
50
49
|
"lib/json/ext.rb",
|
|
51
|
-
"lib/json/ext/.keep",
|
|
52
50
|
"lib/json/generic_object.rb",
|
|
53
51
|
"lib/json/pure.rb",
|
|
54
52
|
"lib/json/pure/generator.rb",
|
|
55
53
|
"lib/json/pure/parser.rb",
|
|
56
54
|
"lib/json/version.rb",
|
|
57
|
-
]
|
|
55
|
+
]
|
|
58
56
|
s.homepage = "http://flori.github.com/json"
|
|
59
57
|
s.metadata = {
|
|
60
58
|
'bug_tracker_uri' => 'https://github.com/flori/json/issues',
|
|
@@ -65,9 +63,5 @@ Gem::Specification.new do |s|
|
|
|
65
63
|
'wiki_uri' => 'https://github.com/flori/json/wiki'
|
|
66
64
|
}
|
|
67
65
|
|
|
68
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.
|
|
69
|
-
s.test_files = ["tests/test_helper.rb"]
|
|
70
|
-
|
|
71
|
-
s.add_development_dependency "rake"
|
|
72
|
-
s.add_development_dependency "test-unit"
|
|
66
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
|
73
67
|
end
|
data/lib/json/pure/parser.rb
CHANGED
data/lib/json/version.rb
CHANGED
data/lib/json.rb
CHANGED
|
@@ -493,7 +493,7 @@ require 'json/common'
|
|
|
493
493
|
# json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]}
|
|
494
494
|
# ruby1 = JSON.parse(json, create_additions: true) # #<struct Customer name="Dave", address="123 Main">
|
|
495
495
|
# ruby1.class # Customer
|
|
496
|
-
|
|
496
|
+
#
|
|
497
497
|
# \Symbol:
|
|
498
498
|
# require 'json/add/symbol'
|
|
499
499
|
# ruby0 = :foo # foo
|
metadata
CHANGED
|
@@ -1,43 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: json
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Frank
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
-
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: rake
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: test-unit
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
11
|
+
date: 2022-05-16 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
41
13
|
description: This is a JSON implementation as a Ruby extension in C.
|
|
42
14
|
email: flori@ping.de
|
|
43
15
|
executables: []
|
|
@@ -49,7 +21,6 @@ extra_rdoc_files:
|
|
|
49
21
|
- README.md
|
|
50
22
|
files:
|
|
51
23
|
- CHANGES.md
|
|
52
|
-
- Gemfile
|
|
53
24
|
- LICENSE
|
|
54
25
|
- README.md
|
|
55
26
|
- VERSION
|
|
@@ -82,62 +53,11 @@ files:
|
|
|
82
53
|
- lib/json/add/time.rb
|
|
83
54
|
- lib/json/common.rb
|
|
84
55
|
- lib/json/ext.rb
|
|
85
|
-
- lib/json/ext/.keep
|
|
86
56
|
- lib/json/generic_object.rb
|
|
87
57
|
- lib/json/pure.rb
|
|
88
58
|
- lib/json/pure/generator.rb
|
|
89
59
|
- lib/json/pure/parser.rb
|
|
90
60
|
- lib/json/version.rb
|
|
91
|
-
- tests/fixtures/fail10.json
|
|
92
|
-
- tests/fixtures/fail11.json
|
|
93
|
-
- tests/fixtures/fail12.json
|
|
94
|
-
- tests/fixtures/fail13.json
|
|
95
|
-
- tests/fixtures/fail14.json
|
|
96
|
-
- tests/fixtures/fail18.json
|
|
97
|
-
- tests/fixtures/fail19.json
|
|
98
|
-
- tests/fixtures/fail2.json
|
|
99
|
-
- tests/fixtures/fail20.json
|
|
100
|
-
- tests/fixtures/fail21.json
|
|
101
|
-
- tests/fixtures/fail22.json
|
|
102
|
-
- tests/fixtures/fail23.json
|
|
103
|
-
- tests/fixtures/fail24.json
|
|
104
|
-
- tests/fixtures/fail25.json
|
|
105
|
-
- tests/fixtures/fail27.json
|
|
106
|
-
- tests/fixtures/fail28.json
|
|
107
|
-
- tests/fixtures/fail29.json
|
|
108
|
-
- tests/fixtures/fail3.json
|
|
109
|
-
- tests/fixtures/fail30.json
|
|
110
|
-
- tests/fixtures/fail31.json
|
|
111
|
-
- tests/fixtures/fail32.json
|
|
112
|
-
- tests/fixtures/fail4.json
|
|
113
|
-
- tests/fixtures/fail5.json
|
|
114
|
-
- tests/fixtures/fail6.json
|
|
115
|
-
- tests/fixtures/fail7.json
|
|
116
|
-
- tests/fixtures/fail8.json
|
|
117
|
-
- tests/fixtures/fail9.json
|
|
118
|
-
- tests/fixtures/obsolete_fail1.json
|
|
119
|
-
- tests/fixtures/pass1.json
|
|
120
|
-
- tests/fixtures/pass15.json
|
|
121
|
-
- tests/fixtures/pass16.json
|
|
122
|
-
- tests/fixtures/pass17.json
|
|
123
|
-
- tests/fixtures/pass2.json
|
|
124
|
-
- tests/fixtures/pass26.json
|
|
125
|
-
- tests/fixtures/pass3.json
|
|
126
|
-
- tests/json_addition_test.rb
|
|
127
|
-
- tests/json_common_interface_test.rb
|
|
128
|
-
- tests/json_encoding_test.rb
|
|
129
|
-
- tests/json_ext_parser_test.rb
|
|
130
|
-
- tests/json_fixtures_test.rb
|
|
131
|
-
- tests/json_generator_test.rb
|
|
132
|
-
- tests/json_generic_object_test.rb
|
|
133
|
-
- tests/json_parser_test.rb
|
|
134
|
-
- tests/json_string_matching_test.rb
|
|
135
|
-
- tests/lib/core_assertions.rb
|
|
136
|
-
- tests/lib/envutil.rb
|
|
137
|
-
- tests/lib/find_executable.rb
|
|
138
|
-
- tests/lib/helper.rb
|
|
139
|
-
- tests/ractor_test.rb
|
|
140
|
-
- tests/test_helper.rb
|
|
141
61
|
homepage: http://flori.github.com/json
|
|
142
62
|
licenses:
|
|
143
63
|
- Ruby
|
|
@@ -160,16 +80,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
160
80
|
requirements:
|
|
161
81
|
- - ">="
|
|
162
82
|
- !ruby/object:Gem::Version
|
|
163
|
-
version: '2.
|
|
83
|
+
version: '2.3'
|
|
164
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
85
|
requirements:
|
|
166
86
|
- - ">="
|
|
167
87
|
- !ruby/object:Gem::Version
|
|
168
88
|
version: '0'
|
|
169
89
|
requirements: []
|
|
170
|
-
rubygems_version: 3.
|
|
90
|
+
rubygems_version: 3.3.13
|
|
171
91
|
signing_key:
|
|
172
92
|
specification_version: 4
|
|
173
93
|
summary: JSON Implementation for Ruby
|
|
174
|
-
test_files:
|
|
175
|
-
- tests/test_helper.rb
|
|
94
|
+
test_files: []
|
data/Gemfile
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# vim: set ft=ruby:
|
|
2
|
-
|
|
3
|
-
source 'https://rubygems.org'
|
|
4
|
-
|
|
5
|
-
case ENV['JSON']
|
|
6
|
-
when 'ext', nil
|
|
7
|
-
if ENV['RUBY_ENGINE'] == 'jruby'
|
|
8
|
-
gemspec :name => 'json-java'
|
|
9
|
-
else
|
|
10
|
-
gemspec :name => 'json'
|
|
11
|
-
end
|
|
12
|
-
when 'pure'
|
|
13
|
-
gemspec :name => 'json_pure'
|
|
14
|
-
end
|
data/lib/json/ext/.keep
DELETED
|
File without changes
|
data/tests/fixtures/fail10.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Extra value after close": true} "misplaced quoted value"
|
data/tests/fixtures/fail11.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Illegal expression": 1 + 2}
|
data/tests/fixtures/fail12.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Illegal invocation": alert()}
|
data/tests/fixtures/fail13.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Numbers cannot have leading zeroes": 013}
|
data/tests/fixtures/fail14.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Numbers cannot be hex": 0x14}
|
data/tests/fixtures/fail18.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
|
data/tests/fixtures/fail19.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Missing colon" null}
|
data/tests/fixtures/fail2.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Unclosed array"
|
data/tests/fixtures/fail20.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Double colon":: null}
|
data/tests/fixtures/fail21.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Comma instead of colon", null}
|
data/tests/fixtures/fail22.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Colon instead of comma": false]
|
data/tests/fixtures/fail23.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Bad value", truth]
|
data/tests/fixtures/fail24.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
['single quote']
|
data/tests/fixtures/fail25.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["tab character in string "]
|
data/tests/fixtures/fail27.json
DELETED
data/tests/fixtures/fail28.json
DELETED
data/tests/fixtures/fail29.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{
|
data/tests/fixtures/fail3.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{unquoted_key: "keys must be quoted"}
|
data/tests/fixtures/fail30.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[
|
data/tests/fixtures/fail31.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[1, 2, 3,
|
data/tests/fixtures/fail32.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"foo": "bar"
|
data/tests/fixtures/fail4.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["extra comma",]
|
data/tests/fixtures/fail5.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["double extra comma",,]
|
data/tests/fixtures/fail6.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[ , "<-- missing value"]
|
data/tests/fixtures/fail7.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Comma after the close"],
|
data/tests/fixtures/fail8.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Extra close"]]
|
data/tests/fixtures/fail9.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"Extra comma": true,}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"A JSON payload should be an object or array, not a string."
|
data/tests/fixtures/pass1.json
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
"JSON Test Pattern pass1",
|
|
3
|
-
{"object with 1 member":["array with 1 element"]},
|
|
4
|
-
{},
|
|
5
|
-
[],
|
|
6
|
-
-42,
|
|
7
|
-
true,
|
|
8
|
-
false,
|
|
9
|
-
null,
|
|
10
|
-
{
|
|
11
|
-
"integer": 1234567890,
|
|
12
|
-
"real": -9876.543210,
|
|
13
|
-
"e": 0.123456789e-12,
|
|
14
|
-
"E": 1.234567890E+34,
|
|
15
|
-
"": 23456789012E666,
|
|
16
|
-
"zero": 0,
|
|
17
|
-
"one": 1,
|
|
18
|
-
"space": " ",
|
|
19
|
-
"quote": "\"",
|
|
20
|
-
"backslash": "\\",
|
|
21
|
-
"controls": "\b\f\n\r\t",
|
|
22
|
-
"slash": "/ & \/",
|
|
23
|
-
"alpha": "abcdefghijklmnopqrstuvwyz",
|
|
24
|
-
"ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
|
|
25
|
-
"digit": "0123456789",
|
|
26
|
-
"special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
|
|
27
|
-
"hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
|
|
28
|
-
"true": true,
|
|
29
|
-
"false": false,
|
|
30
|
-
"null": null,
|
|
31
|
-
"array":[ ],
|
|
32
|
-
"object":{ },
|
|
33
|
-
"address": "50 St. James Street",
|
|
34
|
-
"url": "http://www.JSON.org/",
|
|
35
|
-
"comment": "// /* <!-- --",
|
|
36
|
-
"# -- --> */": " ",
|
|
37
|
-
" s p a c e d " :[1,2 , 3
|
|
38
|
-
|
|
39
|
-
,
|
|
40
|
-
|
|
41
|
-
4 , 5 , 6 ,7 ],
|
|
42
|
-
"compact": [1,2,3,4,5,6,7],
|
|
43
|
-
"jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
|
|
44
|
-
"quotes": "" \u0022 %22 0x22 034 "",
|
|
45
|
-
"\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
|
|
46
|
-
: "A key can be any string"
|
|
47
|
-
},
|
|
48
|
-
0.5 ,98.6
|
|
49
|
-
,
|
|
50
|
-
99.44
|
|
51
|
-
,
|
|
52
|
-
|
|
53
|
-
1066
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
,"rosebud"]
|
data/tests/fixtures/pass15.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Illegal backslash escape: \x15"]
|
data/tests/fixtures/pass16.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Illegal backslash escape: \'"]
|
data/tests/fixtures/pass17.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["Illegal backslash escape: \017"]
|
data/tests/fixtures/pass2.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
|
data/tests/fixtures/pass26.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
["tab\ character\ in\ string\ "]
|