json_pure 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{CHANGES → CHANGES.md} +154 -90
- data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +1 -0
- data/ext/json/ext/parser/parser.c +61 -66
- data/ext/json/ext/parser/parser.h +3 -4
- data/ext/json/ext/parser/parser.rl +12 -17
- data/json.gemspec +0 -0
- data/json_pure.gemspec +3 -3
- data/lib/json/common.rb +1 -1
- data/lib/json/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9b7036e8d4f8ea403d0debb813fa4e61d6d67ed
|
4
|
+
data.tar.gz: 0d211eec8241b54738a9a42e3cd598e4980fead3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db64207f4ca9fe39bf818832bb8884a2feff2f321f2334a5ad0f4bf0c7b9e87805c2c98fe43f257840841b720dedfc0786ebb8cf9610c3c1dd70daa0ec6c1d16
|
7
|
+
data.tar.gz: 793ed905cb3143430683f0d65ba2e58dbcef2b04e06e49511c6b994bb61a34343c7d72da273ce4f4116f6a4a961208048665000e6153ac89475519b9aabfa0e6
|
data/{CHANGES → CHANGES.md}
RENAMED
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
# Changes
|
2
|
+
|
3
|
+
## 2016-07-01 (2.0.1)
|
4
|
+
* Fix problem when requiring json\_pure and Parser constant was defiend top
|
5
|
+
level.
|
6
|
+
* Add `RB_GC_GUARD` to avoid possible GC problem via Pete Johns.
|
7
|
+
* Store `current_nesting` on stack by Aaron Patterson.
|
8
|
+
|
9
|
+
## 2015-09-11 (2.0.0)
|
2
10
|
* Now complies to newest JSON RFC 7159.
|
3
11
|
* Implements compatibiliy to ruby 2.4 integer unification.
|
4
12
|
* Drops support for old rubies whose life has ended, that is rubies < 2.0.
|
@@ -10,97 +18,119 @@
|
|
10
18
|
however a GPL compatible license according to the Free Software Foundation.
|
11
19
|
I changed these mentions to be consistent with the Ruby license setting in
|
12
20
|
the gemspec files which were already correct now.
|
13
|
-
|
21
|
+
|
22
|
+
## 2015-06-01 (1.8.3)
|
14
23
|
* Fix potential memory leak, thx to nobu.
|
15
|
-
|
24
|
+
|
25
|
+
## 2015-01-08 (1.8.2)
|
16
26
|
* Some performance improvements by Vipul A M <vipulnsward@gmail.com>.
|
17
27
|
* Fix by Jason R. Clark <jclark@newrelic.com> to avoid mutation of
|
18
|
-
JSON.dump_default_options
|
28
|
+
`JSON.dump_default_options`.
|
19
29
|
* More tests by Michael Mac-Vicar <mmacvicar@gmail.com> and fixing
|
20
|
-
space_before accessor in generator.
|
30
|
+
`space_before` accessor in generator.
|
21
31
|
* Performance on Jruby improvemed by Ben Browning <bbrownin@redhat.com>.
|
22
32
|
* Some fixes to be compatible with the new Ruby 2.2 by Zachary Scott <e@zzak.io>
|
23
33
|
and SHIBATA Hiroshi <hsbt@ruby-lang.org>.
|
24
|
-
|
34
|
+
|
35
|
+
## 2013-05-13 (1.8.1)
|
25
36
|
* Remove Rubinius exception since transcoding should be working now.
|
26
|
-
|
37
|
+
|
38
|
+
## 2013-05-13 (1.8.0)
|
27
39
|
* Fix https://github.com/flori/json/issues/162 reported by Marc-Andre
|
28
40
|
Lafortune <github_rocks@marc-andre.ca>. Thanks!
|
29
41
|
* Applied patches by Yui NARUSE <naruse@airemix.jp> to suppress warning with
|
30
42
|
-Wchar-subscripts and better validate UTF-8 strings.
|
31
43
|
* Applied patch by ginriki@github to remove unnecessary if.
|
32
|
-
* Add load/dump interface to JSON::GenericObject to make
|
33
|
-
serialize :some_attribute, JSON::GenericObject
|
34
|
-
work in Rails active models for convenient SomeModel#some_attribute.foo.bar
|
44
|
+
* Add load/dump interface to `JSON::GenericObject` to make
|
45
|
+
serialize :some_attribute, `JSON::GenericObject`
|
46
|
+
work in Rails active models for convenient `SomeModel#some_attribute.foo.bar`
|
35
47
|
access to serialised JSON data.
|
36
|
-
|
48
|
+
|
49
|
+
## 2013-02-04 (1.7.7)
|
37
50
|
* Security fix for JSON create_additions default value and
|
38
|
-
JSON::GenericObject
|
51
|
+
`JSON::GenericObject`. It should not be possible to create additions unless
|
39
52
|
explicitely requested by setting the create_additions argument to true or
|
40
|
-
using the JSON.load/dump interface. If JSON::GenericObject is supposed to
|
53
|
+
using the JSON.load/dump interface. If `JSON::GenericObject` is supposed to
|
41
54
|
be automatically deserialised, this has to be explicitely enabled by
|
42
55
|
setting
|
43
|
-
|
56
|
+
JSON::GenericObject.json_creatable = true
|
44
57
|
as well.
|
45
58
|
* Remove useless assert in fbuffer implementation.
|
46
59
|
* Apply patch attached to https://github.com/flori/json/issues#issue/155
|
47
60
|
provided by John Shahid <jvshahid@gmail.com>, Thx!
|
48
61
|
* Add license information to rubygems spec data, reported by Jordi Massaguer Pla <jmassaguerpla@suse.de>.
|
49
62
|
* Improve documentation, thx to Zachary Scott <zachary@zacharyscott.net>.
|
50
|
-
|
51
|
-
|
63
|
+
|
64
|
+
## 2012-11-29 (1.7.6)
|
65
|
+
* Add `GeneratorState#merge` alias for JRuby, fix state accessor methods. Thx to
|
52
66
|
jvshahid@github.
|
53
67
|
* Increase hash likeness of state objects.
|
54
|
-
|
68
|
+
|
69
|
+
## 2012-08-17 (1.7.5)
|
55
70
|
* Fix compilation of extension on older rubies.
|
56
|
-
|
71
|
+
|
72
|
+
## 2012-07-26 (1.7.4)
|
57
73
|
* Fix compilation problem on AIX, see https://github.com/flori/json/issues/142
|
58
|
-
|
74
|
+
|
75
|
+
## 2012-05-12 (1.7.3)
|
59
76
|
* Work around Rubinius encoding issues using iconv for conversion instead.
|
60
|
-
|
77
|
+
|
78
|
+
## 2012-05-11 (1.7.2)
|
61
79
|
* Fix some encoding issues, that cause problems for the pure and the
|
62
80
|
extension variant in jruby 1.9 mode.
|
63
|
-
|
81
|
+
|
82
|
+
## 2012-04-28 (1.7.1)
|
64
83
|
* Some small fixes for building
|
65
|
-
|
66
|
-
|
67
|
-
|
84
|
+
|
85
|
+
## 2012-04-28 (1.7.0)
|
86
|
+
* Add `JSON::GenericObject` for method access to objects transmitted via JSON.
|
87
|
+
|
88
|
+
## 2012-04-27 (1.6.7)
|
68
89
|
* Fix possible crash when trying to parse nil value.
|
69
|
-
|
90
|
+
|
91
|
+
## 2012-02-11 (1.6.6)
|
70
92
|
* Propagate src encoding to values made from it (fixes 1.9 mode converting
|
71
93
|
everything to ascii-8bit; harmless for 1.8 mode too) (Thomas E. Enebo
|
72
94
|
<tom.enebo@gmail.com>), should fix
|
73
95
|
https://github.com/flori/json/issues#issue/119.
|
74
96
|
* Fix https://github.com/flori/json/issues#issue/124 Thx to Jason Hutchens.
|
75
97
|
* Fix https://github.com/flori/json/issues#issue/117
|
76
|
-
|
98
|
+
|
99
|
+
## 2012-01-15 (1.6.5)
|
77
100
|
* Vit Ondruch <v.ondruch@tiscali.cz> reported a bug that shows up when using
|
78
101
|
optimisation under GCC 4.7. Thx to him, Bohuslav Kabrda
|
79
102
|
<bkabrda@redhat.com> and Yui NARUSE <naruse@airemix.jp> for debugging and
|
80
103
|
developing a patch fix.
|
81
|
-
|
104
|
+
|
105
|
+
## 2011-12-24 (1.6.4)
|
82
106
|
* Patches that improve speed on JRuby contributed by Charles Oliver Nutter
|
83
107
|
<headius@headius.com>.
|
84
|
-
* Support object_class
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
108
|
+
* Support `object_class`/`array_class` with duck typed hash/array.
|
109
|
+
|
110
|
+
## 2011-12-01 (1.6.3)
|
111
|
+
* Let `JSON.load('')` return nil as well to make mysql text columns (default to
|
112
|
+
`''`) work better for serialization.
|
113
|
+
|
114
|
+
## 2011-11-21 (1.6.2)
|
89
115
|
* Add support for OpenStruct and BigDecimal.
|
90
|
-
* Fix bug when parsing nil in quirks_mode
|
116
|
+
* Fix bug when parsing nil in `quirks_mode`.
|
91
117
|
* Make JSON.dump and JSON.load methods better cooperate with Rails' serialize
|
92
|
-
method. Just use:
|
118
|
+
method. Just use:
|
119
|
+
serialize :value, JSON
|
93
120
|
* Fix bug with time serialization concerning nanoseconds. Thanks for the
|
94
121
|
patch go to Josh Partlow (jpartlow@github).
|
95
122
|
* Improve parsing speed for JSON numbers (integers and floats) in a similar way to
|
96
123
|
what Evan Phoenix <evan@phx.io> suggested in:
|
97
124
|
https://github.com/flori/json/pull/103
|
98
|
-
|
125
|
+
|
126
|
+
## 2011-09-18 (1.6.1)
|
99
127
|
* Using -target 1.5 to force Java bits to compile with 1.5.
|
100
|
-
|
128
|
+
|
129
|
+
## 2011-09-12 (1.6.0)
|
101
130
|
* Extract utilities (prettifier and GUI-editor) in its own gem json-utils.
|
102
131
|
* Split json/add/core into different files for classes to be serialised.
|
103
|
-
|
132
|
+
|
133
|
+
## 2011-08-31 (1.5.4)
|
104
134
|
* Fix memory leak when used from multiple JRuby. (Patch by
|
105
135
|
jfirebaugh@github).
|
106
136
|
* Apply patch by Eric Wong <nocode@yhbt.net> that fixes garbage collection problem
|
@@ -108,42 +138,50 @@
|
|
108
138
|
* Add :quirks_mode option to parser and generator.
|
109
139
|
* Add support for Rational and Complex number additions via json/add/complex
|
110
140
|
and json/add/rational requires.
|
111
|
-
|
141
|
+
|
142
|
+
## 2011-06-20 (1.5.3)
|
112
143
|
* Alias State#configure method as State#merge to increase duck type synonymy with Hash.
|
113
|
-
* Add as_json methods in json/add/core, so rails can create its json objects
|
144
|
+
* Add `as_json` methods in json/add/core, so rails can create its json objects
|
114
145
|
the new way.
|
115
|
-
|
146
|
+
|
147
|
+
## 2011-05-11 (1.5.2)
|
116
148
|
* Apply documentation patch by Cory Monty <cory.monty@gmail.com>.
|
117
|
-
* Add gemspecs for json and
|
149
|
+
* Add gemspecs for json and json\_pure.
|
118
150
|
* Fix bug in jruby pretty printing.
|
119
|
-
* Fix bug in object_class and array_class when inheriting from Hash or
|
120
|
-
|
151
|
+
* Fix bug in `object_class` and `array_class` when inheriting from Hash or
|
152
|
+
Array.
|
153
|
+
|
154
|
+
## 2011-01-24 (1.5.1)
|
121
155
|
* Made rake-compiler build a fat binary gem. This should fix issue
|
122
156
|
https://github.com/flori/json/issues#issue/54.
|
123
|
-
|
157
|
+
|
158
|
+
## 2011-01-22 (1.5.0)
|
124
159
|
* Included Java source codes for the Jruby extension made by Daniel Luz
|
125
160
|
<dev@mernen.com>.
|
126
|
-
* Output full exception message of deep_const_get to aid debugging.
|
127
|
-
* Fixed an issue with ruby 1.9 Module#const_defined
|
161
|
+
* Output full exception message of `deep_const_get` to aid debugging.
|
162
|
+
* Fixed an issue with ruby 1.9 `Module#const_defined?` method, that was
|
128
163
|
reported by Riley Goodside.
|
129
|
-
|
164
|
+
|
165
|
+
## 2010-08-09 (1.4.6)
|
130
166
|
* Fixed oversight reported in http://github.com/flori/json/issues/closed#issue/23,
|
131
167
|
always create a new object from the state prototype.
|
132
168
|
* Made pure and ext api more similar again.
|
133
|
-
|
169
|
+
|
170
|
+
## 2010-08-07 (1.4.5)
|
134
171
|
* Manage data structure nesting depth in state object during generation. This
|
135
|
-
should reduce problems with to_json method definіtions that only have one
|
172
|
+
should reduce problems with `to_json` method definіtions that only have one
|
136
173
|
argument.
|
137
174
|
* Some fixes in the state objects and additional tests.
|
138
|
-
2010-08-06 (1.4.4)
|
175
|
+
## 2010-08-06 (1.4.4)
|
139
176
|
* Fixes build problem for rubinius under OS X, http://github.com/flori/json/issues/closed#issue/25
|
140
177
|
* Fixes crashes described in http://github.com/flori/json/issues/closed#issue/21 and
|
141
178
|
http://github.com/flori/json/issues/closed#issue/23
|
142
|
-
2010-05-05 (1.4.3)
|
179
|
+
## 2010-05-05 (1.4.3)
|
143
180
|
* Fixed some test assertions, from Ruby r27587 and r27590, patch by nobu.
|
144
181
|
* Fixed issue http://github.com/flori/json/issues/#issue/20 reported by
|
145
182
|
electronicwhisper@github. Thx!
|
146
|
-
|
183
|
+
|
184
|
+
## 2010-04-26 (1.4.2)
|
147
185
|
* Applied patch from naruse Yui NARUSE <naruse@airemix.com> to make building with
|
148
186
|
Microsoft Visual C possible again.
|
149
187
|
* Applied patch from devrandom <c1.github@niftybox.net> in order to allow building of
|
@@ -151,34 +189,43 @@
|
|
151
189
|
* Thanks to Dustin Schneider <dustin@stocktwits.com>, who reported a memory
|
152
190
|
leak, which is fixed in this release.
|
153
191
|
* Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github.
|
154
|
-
|
192
|
+
|
193
|
+
## 2010-04-25 (1.4.1)
|
155
194
|
* Fix for a bug reported by Dan DeLeo <dan@kallistec.com>, caused by T_FIXNUM
|
156
195
|
being different on 32bit/64bit architectures.
|
157
|
-
|
196
|
+
|
197
|
+
## 2010-04-23 (1.4.0)
|
158
198
|
* Major speed improvements and building with simplified
|
159
199
|
directory/file-structure.
|
160
200
|
* Extension should at least be comapatible with MRI, YARV and Rubinius.
|
161
|
-
|
201
|
+
|
202
|
+
## 2010-04-07 (1.2.4)
|
162
203
|
* Triger const_missing callback to make Rails' dynamic class loading work.
|
163
|
-
|
164
|
-
|
204
|
+
|
205
|
+
## 2010-03-11 (1.2.3)
|
206
|
+
* Added a `State#[]` method which returns an attribute's value in order to
|
165
207
|
increase duck type compatibility to Hash.
|
166
|
-
|
208
|
+
|
209
|
+
## 2010-02-27 (1.2.2)
|
167
210
|
* Made some changes to make the building of the parser/generator compatible
|
168
211
|
to Rubinius.
|
169
|
-
|
170
|
-
|
212
|
+
|
213
|
+
## 2009-11-25 (1.2.1)
|
214
|
+
* Added `:symbolize_names` option to Parser, which returns symbols instead of
|
171
215
|
strings in object names/keys.
|
172
|
-
|
173
|
-
|
216
|
+
|
217
|
+
## 2009-10-01 (1.2.0)
|
218
|
+
* `fast_generate` now raises an exeception for nan and infinite floats.
|
174
219
|
* On Ruby 1.8 json supports parsing of UTF-8, UTF-16BE, UTF-16LE, UTF-32BE,
|
175
220
|
and UTF-32LE JSON documents now. Under Ruby 1.9 the M17n conversion
|
176
221
|
functions are used to convert from all supported encodings. ASCII-8BIT
|
177
222
|
encoded strings are handled like all strings under Ruby 1.8 were.
|
178
223
|
* Better documentation
|
179
|
-
|
180
|
-
|
181
|
-
|
224
|
+
|
225
|
+
## 2009-08-23 (1.1.9)
|
226
|
+
* Added forgotten main doc file `extra_rdoc_files`.
|
227
|
+
|
228
|
+
## 2009-08-23 (1.1.8)
|
182
229
|
* Applied a patch by OZAWA Sakuro <sakuro@2238club.org> to make json/pure
|
183
230
|
work in environments that don't provide iconv.
|
184
231
|
* Applied patch by okkez_ in order to fix Ruby Bug #1768:
|
@@ -186,7 +233,8 @@
|
|
186
233
|
* Finally got around to avoid the rather paranoid escaping of ?/ characters
|
187
234
|
in the generator's output. The parsers aren't affected by this change.
|
188
235
|
Thanks to Rich Apodaca <rapodaca@metamolecular.com> for the suggestion.
|
189
|
-
|
236
|
+
|
237
|
+
## 2009-06-29 (1.1.7)
|
190
238
|
* Security Fix for JSON::Pure::Parser. A specially designed string could
|
191
239
|
cause catastrophic backtracking in one of the parser's regular expressions
|
192
240
|
in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue.
|
@@ -194,16 +242,19 @@
|
|
194
242
|
problem.
|
195
243
|
* This release also uses a less strict ruby version requirement for the
|
196
244
|
creation of the mswin32 native gem.
|
197
|
-
|
245
|
+
|
246
|
+
## 2009-05-10 (1.1.6)
|
198
247
|
* No changes. І tested native linux gems in the last release and they don't
|
199
248
|
play well with different ruby versions other than the one the gem was built
|
200
249
|
with. This release is just to bump the version number in order to skip the
|
201
250
|
native gem on rubyforge.
|
202
|
-
|
251
|
+
|
252
|
+
## 2009-05-10 (1.1.5)
|
203
253
|
* Started to build gems with rake-compiler gem.
|
204
254
|
* Applied patch object/array class patch from Brian Candler
|
205
255
|
<B.Candler@pobox.com> and fixes.
|
206
|
-
|
256
|
+
|
257
|
+
## 2009-04-01 (1.1.4)
|
207
258
|
* Fixed a bug in the creation of serialized generic rails objects reported by
|
208
259
|
Friedrich Graeter <graeter@hydrixos.org>.
|
209
260
|
* Deleted tests/runner.rb, we're using testrb instead.
|
@@ -212,7 +263,8 @@
|
|
212
263
|
1.9.
|
213
264
|
* Improved speed of the code path for the fast_generate method in the pure
|
214
265
|
variant.
|
215
|
-
|
266
|
+
|
267
|
+
## 2008-07-10 (1.1.3)
|
216
268
|
* Wesley Beary <monki@geemus.com> reported a bug in json/add/core's DateTime
|
217
269
|
handling: If the nominator and denominator of the offset were divisible by
|
218
270
|
each other Ruby's Rational#to_s returns them as an integer not a fraction
|
@@ -222,7 +274,8 @@
|
|
222
274
|
* Supports ragel >= 6.0 now.
|
223
275
|
* Corrected some tests.
|
224
276
|
* Some minor changes.
|
225
|
-
|
277
|
+
|
278
|
+
## 2007-11-27 (1.1.2)
|
226
279
|
* Remember default dir (last used directory) in editor.
|
227
280
|
* JSON::Editor.edit method added, the editor can now receive json texts from
|
228
281
|
the clipboard via C-v.
|
@@ -238,13 +291,14 @@
|
|
238
291
|
generator by returning something other than a String instance from a
|
239
292
|
to_json method. I now guard against this by doing a rather crude type
|
240
293
|
check, which raises an exception instead of crashing.
|
241
|
-
|
294
|
+
|
295
|
+
## 2007-07-06 (1.1.1)
|
242
296
|
* Yui NARUSE <naruse@airemix.com> sent some patches to fix tests for Ruby
|
243
297
|
1.9. I applied them and adapted some of them a bit to run both on 1.8 and
|
244
298
|
1.9.
|
245
|
-
* Introduced a JSON.parse
|
246
|
-
danger.
|
247
|
-
* Made generate and pretty_generate methods configurable by an options hash.
|
299
|
+
* Introduced a `JSON.parse!` method without depth checking for people who
|
300
|
+
like danger.
|
301
|
+
* Made generate and `pretty_generate` methods configurable by an options hash.
|
248
302
|
* Added :allow_nan option to parser and generator in order to handle NaN,
|
249
303
|
Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
|
250
304
|
aren't valid JSON according to RFC4627, so by default an exception will be
|
@@ -253,55 +307,65 @@
|
|
253
307
|
* Fixed some more tests for Ruby 1.9.
|
254
308
|
* Implemented dump/load interface of Marshal as suggested in ruby-core:11405
|
255
309
|
by murphy <murphy@rubychan.de>.
|
256
|
-
* Implemented the max_nesting feature for generate methods, too.
|
310
|
+
* Implemented the `max_nesting` feature for generate methods, too.
|
257
311
|
* Added some implementations for ruby core's custom objects for
|
258
312
|
serialisation/deserialisation purposes.
|
259
|
-
|
313
|
+
|
314
|
+
## 2007-05-21 (1.1.0)
|
260
315
|
* Implemented max_nesting feature for parser to avoid stack overflows for
|
261
316
|
data from untrusted sources. If you trust the source, you can disable it
|
262
317
|
with the option max_nesting => false.
|
263
318
|
* Piers Cawley <pdcawley@bofh.org.uk> reported a bug, that not every
|
264
|
-
character can be escaped by
|
319
|
+
character can be escaped by `\` as required by RFC4627. There's a
|
265
320
|
contradiction between David Crockford's JSON checker test vectors (in
|
266
321
|
tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
|
267
322
|
the JSON checker seems to be a bit older than the RFC.
|
268
323
|
* Extended license to Ruby License, which includes the GPL.
|
269
324
|
* Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
|
270
|
-
|
325
|
+
|
326
|
+
## 2007-05-09 (1.0.4)
|
271
327
|
* Applied a patch from Yui NARUSE <naruse@airemix.com> to make JSON compile
|
272
328
|
under Ruby 1.9. Thank you very much for mailing it to me!
|
273
329
|
* Made binary variants of JSON fail early, instead of falling back to the
|
274
330
|
pure version. This should avoid overshadowing of eventual problems while
|
275
331
|
loading of the binary.
|
276
|
-
|
332
|
+
|
333
|
+
## 2007-03-24 (1.0.3)
|
277
334
|
* Improved performance of pure variant a bit.
|
278
335
|
* The ext variant of this release supports the mswin32 platform. Ugh!
|
279
|
-
|
336
|
+
|
337
|
+
## 2007-03-24 (1.0.2)
|
280
338
|
* Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
|
281
|
-
|
339
|
+
|
340
|
+
## 2007-03-24 (1.0.1)
|
282
341
|
* Forgot some object files in the build dir. I really like that - not!
|
283
|
-
|
342
|
+
|
343
|
+
## 2007-03-24 (1.0.0)
|
284
344
|
* Added C implementations for the JSON generator and a ragel based JSON
|
285
345
|
parser in C.
|
286
346
|
* Much more tests, especially fixtures from json.org.
|
287
347
|
* Further improved conformance to RFC4627.
|
288
|
-
|
348
|
+
|
349
|
+
## 2007-02-09 (0.4.3)
|
289
350
|
* Conform more to RFC4627 for JSON: This means JSON strings
|
290
|
-
now always must contain exactly one object "{ ... }" or array "[ ... ]" in
|
351
|
+
now always must contain exactly one object `"{ ... }"` or array `"[ ... ]"` in
|
291
352
|
order to be parsed without raising an exception. The definition of what
|
292
353
|
constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
|
293
354
|
there are differences in floats and integers (no octals or hexadecimals) as
|
294
355
|
well.
|
295
|
-
* Added aliases generate and pretty_generate of unparse and pretty_unparse
|
356
|
+
* Added aliases generate and `pretty_generate` of unparse and `pretty_unparse`.
|
296
357
|
* Fixed a test case.
|
297
|
-
* Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
|
358
|
+
* Catch an `Iconv::InvalidEncoding` exception, that seems to occur on some Sun
|
298
359
|
boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
|
299
360
|
reported by Andrew R Jackson <andrewj@bcm.tmc.edu>, thanks a bunch!
|
300
|
-
|
361
|
+
|
362
|
+
## 2006-08-25 (0.4.2)
|
301
363
|
* Fixed a bug in handling solidi (/-characters), that was reported by
|
302
364
|
Kevin Gilpin <kevin.gilpin@alum.mit.edu>.
|
303
|
-
|
365
|
+
|
366
|
+
## 2006-02-06 (0.4.1)
|
304
367
|
* Fixed a bug related to escaping with backslashes. Thanks for the report go
|
305
368
|
to Florian Munz <surf@theflow.de>.
|
306
|
-
|
369
|
+
|
370
|
+
## 2005-09-23 (0.4.0)
|
307
371
|
* Initial Rubyforge Version
|
File without changes
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1
|
@@ -222,6 +222,7 @@ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string)
|
|
222
222
|
unicode_escape_to_buffer(buffer, buf, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
|
223
223
|
}
|
224
224
|
}
|
225
|
+
RB_GC_GUARD(string);
|
225
226
|
}
|
226
227
|
|
227
228
|
/* Converts string to a JSON string in FBuffer buffer, where only the
|
@@ -113,14 +113,14 @@ enum {JSON_object_en_main = 1};
|
|
113
113
|
#line 165 "parser.rl"
|
114
114
|
|
115
115
|
|
116
|
-
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
116
|
+
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
117
117
|
{
|
118
118
|
int cs = EVIL;
|
119
119
|
VALUE last_name = Qnil;
|
120
120
|
VALUE object_class = json->object_class;
|
121
121
|
|
122
|
-
if (json->max_nesting &&
|
123
|
-
rb_raise(eNestingError, "nesting of %d is too deep",
|
122
|
+
if (json->max_nesting && current_nesting > json->max_nesting) {
|
123
|
+
rb_raise(eNestingError, "nesting of %d is too deep", current_nesting);
|
124
124
|
}
|
125
125
|
|
126
126
|
*result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
|
@@ -244,7 +244,7 @@ tr11:
|
|
244
244
|
#line 132 "parser.rl"
|
245
245
|
{
|
246
246
|
VALUE v = Qnil;
|
247
|
-
char *np = JSON_parse_value(json, p, pe, &v);
|
247
|
+
char *np = JSON_parse_value(json, p, pe, &v, current_nesting);
|
248
248
|
if (np == NULL) {
|
249
249
|
p--; {p++; cs = 9; goto _out;}
|
250
250
|
} else {
|
@@ -488,10 +488,10 @@ enum {JSON_value_error = 0};
|
|
488
488
|
enum {JSON_value_en_main = 1};
|
489
489
|
|
490
490
|
|
491
|
-
#line
|
491
|
+
#line 281 "parser.rl"
|
492
492
|
|
493
493
|
|
494
|
-
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
494
|
+
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
495
495
|
{
|
496
496
|
int cs = EVIL;
|
497
497
|
|
@@ -501,7 +501,7 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
501
501
|
cs = JSON_value_start;
|
502
502
|
}
|
503
503
|
|
504
|
-
#line
|
504
|
+
#line 288 "parser.rl"
|
505
505
|
|
506
506
|
#line 507 "parser.c"
|
507
507
|
{
|
@@ -567,19 +567,15 @@ tr7:
|
|
567
567
|
#line 256 "parser.rl"
|
568
568
|
{
|
569
569
|
char *np;
|
570
|
-
json
|
571
|
-
np = JSON_parse_array(json, p, pe, result);
|
572
|
-
json->current_nesting--;
|
570
|
+
np = JSON_parse_array(json, p, pe, result, current_nesting + 1);
|
573
571
|
if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;}
|
574
572
|
}
|
575
573
|
goto st29;
|
576
574
|
tr11:
|
577
|
-
#line
|
575
|
+
#line 262 "parser.rl"
|
578
576
|
{
|
579
577
|
char *np;
|
580
|
-
json
|
581
|
-
np = JSON_parse_object(json, p, pe, result);
|
582
|
-
json->current_nesting--;
|
578
|
+
np = JSON_parse_object(json, p, pe, result, current_nesting + 1);
|
583
579
|
if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;}
|
584
580
|
}
|
585
581
|
goto st29;
|
@@ -625,9 +621,9 @@ st29:
|
|
625
621
|
if ( ++p == pe )
|
626
622
|
goto _test_eof29;
|
627
623
|
case 29:
|
628
|
-
#line
|
624
|
+
#line 268 "parser.rl"
|
629
625
|
{ p--; {p++; cs = 29; goto _out;} }
|
630
|
-
#line
|
626
|
+
#line 627 "parser.c"
|
631
627
|
switch( (*p) ) {
|
632
628
|
case 13: goto st29;
|
633
629
|
case 32: goto st29;
|
@@ -868,7 +864,7 @@ case 28:
|
|
868
864
|
_out: {}
|
869
865
|
}
|
870
866
|
|
871
|
-
#line
|
867
|
+
#line 289 "parser.rl"
|
872
868
|
|
873
869
|
if (cs >= JSON_value_first_final) {
|
874
870
|
return p;
|
@@ -878,7 +874,7 @@ case 28:
|
|
878
874
|
}
|
879
875
|
|
880
876
|
|
881
|
-
#line
|
877
|
+
#line 878 "parser.c"
|
882
878
|
enum {JSON_integer_start = 1};
|
883
879
|
enum {JSON_integer_first_final = 3};
|
884
880
|
enum {JSON_integer_error = 0};
|
@@ -886,7 +882,7 @@ enum {JSON_integer_error = 0};
|
|
886
882
|
enum {JSON_integer_en_main = 1};
|
887
883
|
|
888
884
|
|
889
|
-
#line
|
885
|
+
#line 305 "parser.rl"
|
890
886
|
|
891
887
|
|
892
888
|
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
@@ -894,15 +890,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
|
|
894
890
|
int cs = EVIL;
|
895
891
|
|
896
892
|
|
897
|
-
#line
|
893
|
+
#line 894 "parser.c"
|
898
894
|
{
|
899
895
|
cs = JSON_integer_start;
|
900
896
|
}
|
901
897
|
|
902
|
-
#line
|
898
|
+
#line 312 "parser.rl"
|
903
899
|
json->memo = p;
|
904
900
|
|
905
|
-
#line
|
901
|
+
#line 902 "parser.c"
|
906
902
|
{
|
907
903
|
if ( p == pe )
|
908
904
|
goto _test_eof;
|
@@ -936,14 +932,14 @@ case 3:
|
|
936
932
|
goto st0;
|
937
933
|
goto tr4;
|
938
934
|
tr4:
|
939
|
-
#line
|
935
|
+
#line 302 "parser.rl"
|
940
936
|
{ p--; {p++; cs = 4; goto _out;} }
|
941
937
|
goto st4;
|
942
938
|
st4:
|
943
939
|
if ( ++p == pe )
|
944
940
|
goto _test_eof4;
|
945
941
|
case 4:
|
946
|
-
#line
|
942
|
+
#line 943 "parser.c"
|
947
943
|
goto st0;
|
948
944
|
st5:
|
949
945
|
if ( ++p == pe )
|
@@ -962,7 +958,7 @@ case 5:
|
|
962
958
|
_out: {}
|
963
959
|
}
|
964
960
|
|
965
|
-
#line
|
961
|
+
#line 314 "parser.rl"
|
966
962
|
|
967
963
|
if (cs >= JSON_integer_first_final) {
|
968
964
|
long len = p - json->memo;
|
@@ -977,7 +973,7 @@ case 5:
|
|
977
973
|
}
|
978
974
|
|
979
975
|
|
980
|
-
#line
|
976
|
+
#line 977 "parser.c"
|
981
977
|
enum {JSON_float_start = 1};
|
982
978
|
enum {JSON_float_first_final = 8};
|
983
979
|
enum {JSON_float_error = 0};
|
@@ -985,7 +981,7 @@ enum {JSON_float_error = 0};
|
|
985
981
|
enum {JSON_float_en_main = 1};
|
986
982
|
|
987
983
|
|
988
|
-
#line
|
984
|
+
#line 339 "parser.rl"
|
989
985
|
|
990
986
|
|
991
987
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
@@ -993,15 +989,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
993
989
|
int cs = EVIL;
|
994
990
|
|
995
991
|
|
996
|
-
#line
|
992
|
+
#line 993 "parser.c"
|
997
993
|
{
|
998
994
|
cs = JSON_float_start;
|
999
995
|
}
|
1000
996
|
|
1001
|
-
#line
|
997
|
+
#line 346 "parser.rl"
|
1002
998
|
json->memo = p;
|
1003
999
|
|
1004
|
-
#line
|
1000
|
+
#line 1001 "parser.c"
|
1005
1001
|
{
|
1006
1002
|
if ( p == pe )
|
1007
1003
|
goto _test_eof;
|
@@ -1059,14 +1055,14 @@ case 8:
|
|
1059
1055
|
goto st0;
|
1060
1056
|
goto tr9;
|
1061
1057
|
tr9:
|
1062
|
-
#line
|
1058
|
+
#line 333 "parser.rl"
|
1063
1059
|
{ p--; {p++; cs = 9; goto _out;} }
|
1064
1060
|
goto st9;
|
1065
1061
|
st9:
|
1066
1062
|
if ( ++p == pe )
|
1067
1063
|
goto _test_eof9;
|
1068
1064
|
case 9:
|
1069
|
-
#line
|
1065
|
+
#line 1066 "parser.c"
|
1070
1066
|
goto st0;
|
1071
1067
|
st5:
|
1072
1068
|
if ( ++p == pe )
|
@@ -1127,7 +1123,7 @@ case 7:
|
|
1127
1123
|
_out: {}
|
1128
1124
|
}
|
1129
1125
|
|
1130
|
-
#line
|
1126
|
+
#line 348 "parser.rl"
|
1131
1127
|
|
1132
1128
|
if (cs >= JSON_float_first_final) {
|
1133
1129
|
long len = p - json->memo;
|
@@ -1143,7 +1139,7 @@ case 7:
|
|
1143
1139
|
|
1144
1140
|
|
1145
1141
|
|
1146
|
-
#line
|
1142
|
+
#line 1143 "parser.c"
|
1147
1143
|
enum {JSON_array_start = 1};
|
1148
1144
|
enum {JSON_array_first_final = 17};
|
1149
1145
|
enum {JSON_array_error = 0};
|
@@ -1151,28 +1147,28 @@ enum {JSON_array_error = 0};
|
|
1151
1147
|
enum {JSON_array_en_main = 1};
|
1152
1148
|
|
1153
1149
|
|
1154
|
-
#line
|
1150
|
+
#line 391 "parser.rl"
|
1155
1151
|
|
1156
1152
|
|
1157
|
-
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
1153
|
+
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
1158
1154
|
{
|
1159
1155
|
int cs = EVIL;
|
1160
1156
|
VALUE array_class = json->array_class;
|
1161
1157
|
|
1162
|
-
if (json->max_nesting &&
|
1163
|
-
rb_raise(eNestingError, "nesting of %d is too deep",
|
1158
|
+
if (json->max_nesting && current_nesting > json->max_nesting) {
|
1159
|
+
rb_raise(eNestingError, "nesting of %d is too deep", current_nesting);
|
1164
1160
|
}
|
1165
1161
|
*result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
|
1166
1162
|
|
1167
1163
|
|
1168
|
-
#line
|
1164
|
+
#line 1165 "parser.c"
|
1169
1165
|
{
|
1170
1166
|
cs = JSON_array_start;
|
1171
1167
|
}
|
1172
1168
|
|
1173
|
-
#line
|
1169
|
+
#line 404 "parser.rl"
|
1174
1170
|
|
1175
|
-
#line
|
1171
|
+
#line 1172 "parser.c"
|
1176
1172
|
{
|
1177
1173
|
if ( p == pe )
|
1178
1174
|
goto _test_eof;
|
@@ -1211,10 +1207,10 @@ case 2:
|
|
1211
1207
|
goto st2;
|
1212
1208
|
goto st0;
|
1213
1209
|
tr2:
|
1214
|
-
#line
|
1210
|
+
#line 368 "parser.rl"
|
1215
1211
|
{
|
1216
1212
|
VALUE v = Qnil;
|
1217
|
-
char *np = JSON_parse_value(json, p, pe, &v);
|
1213
|
+
char *np = JSON_parse_value(json, p, pe, &v, current_nesting);
|
1218
1214
|
if (np == NULL) {
|
1219
1215
|
p--; {p++; cs = 3; goto _out;}
|
1220
1216
|
} else {
|
@@ -1231,7 +1227,7 @@ st3:
|
|
1231
1227
|
if ( ++p == pe )
|
1232
1228
|
goto _test_eof3;
|
1233
1229
|
case 3:
|
1234
|
-
#line
|
1230
|
+
#line 1231 "parser.c"
|
1235
1231
|
switch( (*p) ) {
|
1236
1232
|
case 13: goto st3;
|
1237
1233
|
case 32: goto st3;
|
@@ -1331,14 +1327,14 @@ case 12:
|
|
1331
1327
|
goto st3;
|
1332
1328
|
goto st12;
|
1333
1329
|
tr4:
|
1334
|
-
#line
|
1330
|
+
#line 383 "parser.rl"
|
1335
1331
|
{ p--; {p++; cs = 17; goto _out;} }
|
1336
1332
|
goto st17;
|
1337
1333
|
st17:
|
1338
1334
|
if ( ++p == pe )
|
1339
1335
|
goto _test_eof17;
|
1340
1336
|
case 17:
|
1341
|
-
#line
|
1337
|
+
#line 1338 "parser.c"
|
1342
1338
|
goto st0;
|
1343
1339
|
st13:
|
1344
1340
|
if ( ++p == pe )
|
@@ -1394,7 +1390,7 @@ case 16:
|
|
1394
1390
|
_out: {}
|
1395
1391
|
}
|
1396
1392
|
|
1397
|
-
#line
|
1393
|
+
#line 405 "parser.rl"
|
1398
1394
|
|
1399
1395
|
if(cs >= JSON_array_first_final) {
|
1400
1396
|
return p + 1;
|
@@ -1475,7 +1471,7 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
1475
1471
|
}
|
1476
1472
|
|
1477
1473
|
|
1478
|
-
#line
|
1474
|
+
#line 1475 "parser.c"
|
1479
1475
|
enum {JSON_string_start = 1};
|
1480
1476
|
enum {JSON_string_first_final = 8};
|
1481
1477
|
enum {JSON_string_error = 0};
|
@@ -1483,7 +1479,7 @@ enum {JSON_string_error = 0};
|
|
1483
1479
|
enum {JSON_string_en_main = 1};
|
1484
1480
|
|
1485
1481
|
|
1486
|
-
#line
|
1482
|
+
#line 504 "parser.rl"
|
1487
1483
|
|
1488
1484
|
|
1489
1485
|
static int
|
@@ -1505,15 +1501,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
1505
1501
|
|
1506
1502
|
*result = rb_str_buf_new(0);
|
1507
1503
|
|
1508
|
-
#line
|
1504
|
+
#line 1505 "parser.c"
|
1509
1505
|
{
|
1510
1506
|
cs = JSON_string_start;
|
1511
1507
|
}
|
1512
1508
|
|
1513
|
-
#line
|
1509
|
+
#line 525 "parser.rl"
|
1514
1510
|
json->memo = p;
|
1515
1511
|
|
1516
|
-
#line
|
1512
|
+
#line 1513 "parser.c"
|
1517
1513
|
{
|
1518
1514
|
if ( p == pe )
|
1519
1515
|
goto _test_eof;
|
@@ -1538,7 +1534,7 @@ case 2:
|
|
1538
1534
|
goto st0;
|
1539
1535
|
goto st2;
|
1540
1536
|
tr2:
|
1541
|
-
#line
|
1537
|
+
#line 490 "parser.rl"
|
1542
1538
|
{
|
1543
1539
|
*result = json_string_unescape(*result, json->memo + 1, p);
|
1544
1540
|
if (NIL_P(*result)) {
|
@@ -1549,14 +1545,14 @@ tr2:
|
|
1549
1545
|
{p = (( p + 1))-1;}
|
1550
1546
|
}
|
1551
1547
|
}
|
1552
|
-
#line
|
1548
|
+
#line 501 "parser.rl"
|
1553
1549
|
{ p--; {p++; cs = 8; goto _out;} }
|
1554
1550
|
goto st8;
|
1555
1551
|
st8:
|
1556
1552
|
if ( ++p == pe )
|
1557
1553
|
goto _test_eof8;
|
1558
1554
|
case 8:
|
1559
|
-
#line
|
1555
|
+
#line 1556 "parser.c"
|
1560
1556
|
goto st0;
|
1561
1557
|
st3:
|
1562
1558
|
if ( ++p == pe )
|
@@ -1632,7 +1628,7 @@ case 7:
|
|
1632
1628
|
_out: {}
|
1633
1629
|
}
|
1634
1630
|
|
1635
|
-
#line
|
1631
|
+
#line 527 "parser.rl"
|
1636
1632
|
|
1637
1633
|
if (json->create_additions && RTEST(match_string = json->match_string)) {
|
1638
1634
|
VALUE klass;
|
@@ -1801,7 +1797,6 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
1801
1797
|
json->array_class = Qnil;
|
1802
1798
|
}
|
1803
1799
|
source = convert_encoding(StringValue(source));
|
1804
|
-
json->current_nesting = 0;
|
1805
1800
|
StringValue(source);
|
1806
1801
|
json->len = RSTRING_LEN(source);
|
1807
1802
|
json->source = RSTRING_PTR(source);;
|
@@ -1810,7 +1805,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
1810
1805
|
}
|
1811
1806
|
|
1812
1807
|
|
1813
|
-
#line
|
1808
|
+
#line 1809 "parser.c"
|
1814
1809
|
enum {JSON_start = 1};
|
1815
1810
|
enum {JSON_first_final = 10};
|
1816
1811
|
enum {JSON_error = 0};
|
@@ -1818,7 +1813,7 @@ enum {JSON_error = 0};
|
|
1818
1813
|
enum {JSON_en_main = 1};
|
1819
1814
|
|
1820
1815
|
|
1821
|
-
#line
|
1816
|
+
#line 717 "parser.rl"
|
1822
1817
|
|
1823
1818
|
|
1824
1819
|
/*
|
@@ -1835,16 +1830,16 @@ static VALUE cParser_parse(VALUE self)
|
|
1835
1830
|
GET_PARSER;
|
1836
1831
|
|
1837
1832
|
|
1838
|
-
#line
|
1833
|
+
#line 1834 "parser.c"
|
1839
1834
|
{
|
1840
1835
|
cs = JSON_start;
|
1841
1836
|
}
|
1842
1837
|
|
1843
|
-
#line
|
1838
|
+
#line 733 "parser.rl"
|
1844
1839
|
p = json->source;
|
1845
1840
|
pe = p + json->len;
|
1846
1841
|
|
1847
|
-
#line
|
1842
|
+
#line 1843 "parser.c"
|
1848
1843
|
{
|
1849
1844
|
if ( p == pe )
|
1850
1845
|
goto _test_eof;
|
@@ -1878,9 +1873,9 @@ st0:
|
|
1878
1873
|
cs = 0;
|
1879
1874
|
goto _out;
|
1880
1875
|
tr2:
|
1881
|
-
#line
|
1876
|
+
#line 709 "parser.rl"
|
1882
1877
|
{
|
1883
|
-
char *np = JSON_parse_value(json, p, pe, &result);
|
1878
|
+
char *np = JSON_parse_value(json, p, pe, &result, 0);
|
1884
1879
|
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
|
1885
1880
|
}
|
1886
1881
|
goto st10;
|
@@ -1888,7 +1883,7 @@ st10:
|
|
1888
1883
|
if ( ++p == pe )
|
1889
1884
|
goto _test_eof10;
|
1890
1885
|
case 10:
|
1891
|
-
#line
|
1886
|
+
#line 1887 "parser.c"
|
1892
1887
|
switch( (*p) ) {
|
1893
1888
|
case 13: goto st10;
|
1894
1889
|
case 32: goto st10;
|
@@ -1977,7 +1972,7 @@ case 9:
|
|
1977
1972
|
_out: {}
|
1978
1973
|
}
|
1979
1974
|
|
1980
|
-
#line
|
1975
|
+
#line 736 "parser.rl"
|
1981
1976
|
|
1982
1977
|
if (cs >= JSON_first_final && p == pe) {
|
1983
1978
|
return result;
|
@@ -34,7 +34,6 @@ typedef struct JSON_ParserStruct {
|
|
34
34
|
char *memo;
|
35
35
|
VALUE create_id;
|
36
36
|
int max_nesting;
|
37
|
-
int current_nesting;
|
38
37
|
int allow_nan;
|
39
38
|
int parsing_name;
|
40
39
|
int symbolize_names;
|
@@ -57,11 +56,11 @@ typedef struct JSON_ParserStruct {
|
|
57
56
|
|
58
57
|
static UTF32 unescape_unicode(const unsigned char *p);
|
59
58
|
static int convert_UTF32_to_UTF8(char *buf, UTF32 ch);
|
60
|
-
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
61
|
-
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
59
|
+
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
60
|
+
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
62
61
|
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
63
62
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
64
|
-
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
63
|
+
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
65
64
|
static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd);
|
66
65
|
static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
67
66
|
static VALUE convert_encoding(VALUE source);
|
@@ -131,7 +131,7 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
|
131
131
|
|
132
132
|
action parse_value {
|
133
133
|
VALUE v = Qnil;
|
134
|
-
char *np = JSON_parse_value(json, fpc, pe, &v);
|
134
|
+
char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting);
|
135
135
|
if (np == NULL) {
|
136
136
|
fhold; fbreak;
|
137
137
|
} else {
|
@@ -164,14 +164,14 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
|
164
164
|
) @exit;
|
165
165
|
}%%
|
166
166
|
|
167
|
-
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
167
|
+
static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
168
168
|
{
|
169
169
|
int cs = EVIL;
|
170
170
|
VALUE last_name = Qnil;
|
171
171
|
VALUE object_class = json->object_class;
|
172
172
|
|
173
|
-
if (json->max_nesting &&
|
174
|
-
rb_raise(eNestingError, "nesting of %d is too deep",
|
173
|
+
if (json->max_nesting && current_nesting > json->max_nesting) {
|
174
|
+
rb_raise(eNestingError, "nesting of %d is too deep", current_nesting);
|
175
175
|
}
|
176
176
|
|
177
177
|
*result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
|
@@ -255,17 +255,13 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
255
255
|
|
256
256
|
action parse_array {
|
257
257
|
char *np;
|
258
|
-
json
|
259
|
-
np = JSON_parse_array(json, fpc, pe, result);
|
260
|
-
json->current_nesting--;
|
258
|
+
np = JSON_parse_array(json, fpc, pe, result, current_nesting + 1);
|
261
259
|
if (np == NULL) { fhold; fbreak; } else fexec np;
|
262
260
|
}
|
263
261
|
|
264
262
|
action parse_object {
|
265
263
|
char *np;
|
266
|
-
json
|
267
|
-
np = JSON_parse_object(json, fpc, pe, result);
|
268
|
-
json->current_nesting--;
|
264
|
+
np = JSON_parse_object(json, fpc, pe, result, current_nesting + 1);
|
269
265
|
if (np == NULL) { fhold; fbreak; } else fexec np;
|
270
266
|
}
|
271
267
|
|
@@ -284,7 +280,7 @@ main := ignore* (
|
|
284
280
|
) ignore* %*exit;
|
285
281
|
}%%
|
286
282
|
|
287
|
-
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
283
|
+
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
288
284
|
{
|
289
285
|
int cs = EVIL;
|
290
286
|
|
@@ -371,7 +367,7 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
371
367
|
|
372
368
|
action parse_value {
|
373
369
|
VALUE v = Qnil;
|
374
|
-
char *np = JSON_parse_value(json, fpc, pe, &v);
|
370
|
+
char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting);
|
375
371
|
if (np == NULL) {
|
376
372
|
fhold; fbreak;
|
377
373
|
} else {
|
@@ -394,13 +390,13 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
394
390
|
end_array @exit;
|
395
391
|
}%%
|
396
392
|
|
397
|
-
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
393
|
+
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
398
394
|
{
|
399
395
|
int cs = EVIL;
|
400
396
|
VALUE array_class = json->array_class;
|
401
397
|
|
402
|
-
if (json->max_nesting &&
|
403
|
-
rb_raise(eNestingError, "nesting of %d is too deep",
|
398
|
+
if (json->max_nesting && current_nesting > json->max_nesting) {
|
399
|
+
rb_raise(eNestingError, "nesting of %d is too deep", current_nesting);
|
404
400
|
}
|
405
401
|
*result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
|
406
402
|
|
@@ -696,7 +692,6 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
696
692
|
json->array_class = Qnil;
|
697
693
|
}
|
698
694
|
source = convert_encoding(StringValue(source));
|
699
|
-
json->current_nesting = 0;
|
700
695
|
StringValue(source);
|
701
696
|
json->len = RSTRING_LEN(source);
|
702
697
|
json->source = RSTRING_PTR(source);;
|
@@ -712,7 +707,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
712
707
|
include JSON_common;
|
713
708
|
|
714
709
|
action parse_value {
|
715
|
-
char *np = JSON_parse_value(json, fpc, pe, &result);
|
710
|
+
char *np = JSON_parse_value(json, fpc, pe, &result, 0);
|
716
711
|
if (np == NULL) { fhold; fbreak; } else fexec np;
|
717
712
|
}
|
718
713
|
|
data/json.gemspec
CHANGED
Binary file
|
data/json_pure.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: json_pure 2.0.
|
2
|
+
# stub: json_pure 2.0.1 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "json_pure".freeze
|
6
|
-
s.version = "2.0.
|
6
|
+
s.version = "2.0.1"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = "This is a JSON implementation in pure Ruby.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.extra_rdoc_files = ["README.md".freeze]
|
15
|
-
s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES".freeze, "Gemfile".freeze, "README-json-jruby.
|
15
|
+
s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "README-json-jruby.md".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "data/example.json".freeze, "data/index.html".freeze, "data/prototype.js".freeze, "diagrams/.keep".freeze, "ext/json/ext/fbuffer/fbuffer.h".freeze, "ext/json/ext/generator/depend".freeze, "ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/generator/generator.c".freeze, "ext/json/ext/generator/generator.h".freeze, "ext/json/ext/parser/depend".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/ext/parser/parser.c".freeze, "ext/json/ext/parser/parser.h".freeze, "ext/json/ext/parser/parser.rl".freeze, "ext/json/extconf.rb".freeze, "install.rb".freeze, "java/src/json/ext/ByteListTranscoder.java".freeze, "java/src/json/ext/Generator.java".freeze, "java/src/json/ext/GeneratorMethods.java".freeze, "java/src/json/ext/GeneratorService.java".freeze, "java/src/json/ext/GeneratorState.java".freeze, "java/src/json/ext/OptionsReader.java".freeze, "java/src/json/ext/Parser.java".freeze, "java/src/json/ext/Parser.rl".freeze, "java/src/json/ext/ParserService.java".freeze, "java/src/json/ext/RuntimeInfo.java".freeze, "java/src/json/ext/StringDecoder.java".freeze, "java/src/json/ext/StringEncoder.java".freeze, "java/src/json/ext/Utils.java".freeze, "json-java.gemspec".freeze, "json.gemspec".freeze, "json_pure.gemspec".freeze, "lib/json.rb".freeze, "lib/json/add/bigdecimal.rb".freeze, "lib/json/add/complex.rb".freeze, "lib/json/add/core.rb".freeze, "lib/json/add/date.rb".freeze, "lib/json/add/date_time.rb".freeze, "lib/json/add/exception.rb".freeze, "lib/json/add/ostruct.rb".freeze, "lib/json/add/range.rb".freeze, "lib/json/add/rational.rb".freeze, "lib/json/add/regexp.rb".freeze, "lib/json/add/struct.rb".freeze, "lib/json/add/symbol.rb".freeze, "lib/json/add/time.rb".freeze, "lib/json/common.rb".freeze, "lib/json/ext.rb".freeze, "lib/json/ext/.keep".freeze, "lib/json/generic_object.rb".freeze, "lib/json/pure.rb".freeze, "lib/json/pure/generator.rb".freeze, "lib/json/pure/parser.rb".freeze, "lib/json/version.rb".freeze, "references/rfc7159.txt".freeze, "tests/fixtures/fail10.json".freeze, "tests/fixtures/fail11.json".freeze, "tests/fixtures/fail12.json".freeze, "tests/fixtures/fail13.json".freeze, "tests/fixtures/fail14.json".freeze, "tests/fixtures/fail18.json".freeze, "tests/fixtures/fail19.json".freeze, "tests/fixtures/fail2.json".freeze, "tests/fixtures/fail20.json".freeze, "tests/fixtures/fail21.json".freeze, "tests/fixtures/fail22.json".freeze, "tests/fixtures/fail23.json".freeze, "tests/fixtures/fail24.json".freeze, "tests/fixtures/fail25.json".freeze, "tests/fixtures/fail27.json".freeze, "tests/fixtures/fail28.json".freeze, "tests/fixtures/fail3.json".freeze, "tests/fixtures/fail4.json".freeze, "tests/fixtures/fail5.json".freeze, "tests/fixtures/fail6.json".freeze, "tests/fixtures/fail7.json".freeze, "tests/fixtures/fail8.json".freeze, "tests/fixtures/fail9.json".freeze, "tests/fixtures/obsolete_fail1.json".freeze, "tests/fixtures/pass1.json".freeze, "tests/fixtures/pass15.json".freeze, "tests/fixtures/pass16.json".freeze, "tests/fixtures/pass17.json".freeze, "tests/fixtures/pass2.json".freeze, "tests/fixtures/pass26.json".freeze, "tests/fixtures/pass3.json".freeze, "tests/json_addition_test.rb".freeze, "tests/json_common_interface_test.rb".freeze, "tests/json_encoding_test.rb".freeze, "tests/json_ext_parser_test.rb".freeze, "tests/json_fixtures_test.rb".freeze, "tests/json_generator_test.rb".freeze, "tests/json_generic_object_test.rb".freeze, "tests/json_parser_test.rb".freeze, "tests/json_string_matching_test.rb".freeze, "tests/test_helper.rb".freeze, "tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
|
16
16
|
s.homepage = "http://flori.github.com/json".freeze
|
17
17
|
s.licenses = ["Ruby".freeze]
|
18
18
|
s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze, "--main".freeze, "README.md".freeze]
|
data/lib/json/common.rb
CHANGED
@@ -25,7 +25,7 @@ module JSON
|
|
25
25
|
# Set the JSON parser class _parser_ to be used by JSON.
|
26
26
|
def parser=(parser) # :nodoc:
|
27
27
|
@parser = parser
|
28
|
-
remove_const :Parser if const_defined?(:Parser,
|
28
|
+
remove_const :Parser if const_defined?(:Parser, false)
|
29
29
|
const_set :Parser, parser
|
30
30
|
end
|
31
31
|
|
data/lib/json/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_pure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
@@ -48,9 +48,9 @@ files:
|
|
48
48
|
- "./tests/test_helper.rb"
|
49
49
|
- ".gitignore"
|
50
50
|
- ".travis.yml"
|
51
|
-
- CHANGES
|
51
|
+
- CHANGES.md
|
52
52
|
- Gemfile
|
53
|
-
- README-json-jruby.
|
53
|
+
- README-json-jruby.md
|
54
54
|
- README.md
|
55
55
|
- Rakefile
|
56
56
|
- VERSION
|