json 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of json might be problematic. Click here for more details.
- data/CHANGES +8 -0
- data/Rakefile +20 -16
- data/VERSION +1 -1
- data/ext/json/ext/{extconf_generator.rb → generator/extconf.rb} +1 -1
- data/ext/json/ext/{generator.c → generator/generator.c} +18 -11
- data/ext/json/ext/{generator.h → generator/generator.h} +0 -0
- data/ext/json/ext/{extconf_parser.rb → parser/extconf.rb} +1 -1
- data/ext/json/ext/{parser.c → parser/parser.c} +2 -1
- data/ext/json/ext/{parser.h → parser/parser.h} +0 -0
- data/ext/json/ext/{parser.rl → parser/parser.rl} +2 -1
- data/lib/json/version.rb +1 -1
- metadata +11 -11
data/CHANGES
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
2010-04-26 (1.4.2)
|
2
|
+
* Applied patch from naruse Yui NARUSE <naruse@airemix.com> to make building with
|
3
|
+
Microsoft Visual C possible again.
|
4
|
+
* Applied patch from devrandom <c1.github@niftybox.net> in order to allow building of
|
5
|
+
json_pure if extensiontask is not present.
|
6
|
+
* Thanks to Dustin Schneider <dustin@stocktwits.com>, who reported a memory
|
7
|
+
leak, which is fixed in this release.
|
8
|
+
* Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github.
|
1
9
|
2010-04-25 (1.4.1)
|
2
10
|
* Fix for a bug reported by Dan DeLeo <dan@kallistec.com>, caused by T_FIXNUM
|
3
11
|
being different on 32bit/64bit architectures.
|
data/Rakefile
CHANGED
@@ -24,14 +24,16 @@ PKG_TITLE = 'JSON Implementation for Ruby'
|
|
24
24
|
PKG_VERSION = File.read('VERSION').chomp
|
25
25
|
PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile|\.nfs\./).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
|
26
26
|
EXT_ROOT_DIR = 'ext/json/ext'
|
27
|
-
|
28
|
-
|
27
|
+
EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
|
28
|
+
EXT_PARSER_DL = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
|
29
|
+
EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
|
29
30
|
PKG_FILES << EXT_PARSER_SRC
|
30
|
-
|
31
|
-
|
31
|
+
EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
|
32
|
+
EXT_GENERATOR_DL = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
|
33
|
+
EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
|
32
34
|
RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
|
33
35
|
RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
|
34
|
-
RAGEL_PATH = "#{
|
36
|
+
RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
|
35
37
|
|
36
38
|
def myruby(*args, &block)
|
37
39
|
@myruby ||= File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
|
@@ -73,17 +75,19 @@ desc "Compiling extension"
|
|
73
75
|
task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
|
74
76
|
|
75
77
|
file EXT_PARSER_DL => EXT_PARSER_SRC do
|
76
|
-
cd
|
77
|
-
myruby '
|
78
|
+
cd EXT_PARSER_DIR do
|
79
|
+
myruby 'extconf.rb'
|
78
80
|
sh MAKE
|
79
81
|
end
|
82
|
+
cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
|
80
83
|
end
|
81
84
|
|
82
85
|
file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
|
83
|
-
cd
|
84
|
-
myruby '
|
86
|
+
cd EXT_GENERATOR_DIR do
|
87
|
+
myruby 'extconf.rb'
|
85
88
|
sh MAKE
|
86
89
|
end
|
90
|
+
cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
|
87
91
|
end
|
88
92
|
|
89
93
|
desc "Generate parser with ragel"
|
@@ -94,7 +98,7 @@ task :ragel_clean do
|
|
94
98
|
end
|
95
99
|
|
96
100
|
file EXT_PARSER_SRC => RAGEL_PATH do
|
97
|
-
cd
|
101
|
+
cd EXT_PARSER_DIR do
|
98
102
|
if RAGEL_CODEGEN == 'ragel'
|
99
103
|
sh "ragel parser.rl -G2 -o parser.c"
|
100
104
|
else
|
@@ -173,7 +177,7 @@ task :doc => [ :version, EXT_PARSER_SRC ] do
|
|
173
177
|
sh "rdoc -o doc -t '#{PKG_TITLE}' -m README README lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
|
174
178
|
end
|
175
179
|
|
176
|
-
if defined?(Gem) and defined?(Rake::GemPackageTask)
|
180
|
+
if defined?(Gem) and defined?(Rake::GemPackageTask)
|
177
181
|
spec_pure = Gem::Specification.new do |s|
|
178
182
|
s.name = 'json_pure'
|
179
183
|
s.version = PKG_VERSION
|
@@ -204,7 +208,9 @@ if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::Extension
|
|
204
208
|
pkg.need_tar = true
|
205
209
|
pkg.package_files = PKG_FILES
|
206
210
|
end
|
211
|
+
end
|
207
212
|
|
213
|
+
if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::ExtensionTask)
|
208
214
|
spec_ext = Gem::Specification.new do |s|
|
209
215
|
s.name = 'json'
|
210
216
|
s.version = PKG_VERSION
|
@@ -213,7 +219,7 @@ if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::Extension
|
|
213
219
|
|
214
220
|
s.files = PKG_FILES
|
215
221
|
|
216
|
-
s.extensions = FileList['ext/**/
|
222
|
+
s.extensions = FileList['ext/**/extconf.rb']
|
217
223
|
|
218
224
|
s.require_path = EXT_ROOT_DIR
|
219
225
|
s.require_paths << 'ext'
|
@@ -242,21 +248,19 @@ if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::Extension
|
|
242
248
|
|
243
249
|
Rake::ExtensionTask.new do |ext|
|
244
250
|
ext.name = 'parser'
|
245
|
-
ext.config_script = 'extconf_parser.rb'
|
246
251
|
ext.gem_spec = spec_ext
|
247
252
|
ext.cross_compile = true
|
248
253
|
ext.cross_platform = %w[i386-mswin32 i386-mingw32]
|
249
|
-
ext.ext_dir = 'ext/json/ext'
|
254
|
+
ext.ext_dir = 'ext/json/ext/parser'
|
250
255
|
ext.lib_dir = 'lib/json/ext'
|
251
256
|
end
|
252
257
|
|
253
258
|
Rake::ExtensionTask.new do |ext|
|
254
259
|
ext.name = 'generator'
|
255
|
-
ext.config_script = 'extconf_generator.rb'
|
256
260
|
ext.gem_spec = spec_ext
|
257
261
|
ext.cross_compile = true
|
258
262
|
ext.cross_platform = %w[i386-mswin32 i386-mingw32]
|
259
|
-
ext.ext_dir = 'ext/json/ext'
|
263
|
+
ext.ext_dir = 'ext/json/ext/generator'
|
260
264
|
ext.lib_dir = 'lib/json/ext'
|
261
265
|
end
|
262
266
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.2
|
@@ -172,7 +172,7 @@ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string)
|
|
172
172
|
fbuffer_append(buffer, "\\\"", 2);
|
173
173
|
break;
|
174
174
|
default:
|
175
|
-
fbuffer_append_char(buffer, ch);
|
175
|
+
fbuffer_append_char(buffer, (char)ch);
|
176
176
|
break;
|
177
177
|
}
|
178
178
|
} else {
|
@@ -284,8 +284,9 @@ static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string)
|
|
284
284
|
}
|
285
285
|
|
286
286
|
static char *fstrndup(const char *ptr, int len) {
|
287
|
+
char *result;
|
287
288
|
if (len <= 0) return NULL;
|
288
|
-
|
289
|
+
result = ALLOC_N(char, len);
|
289
290
|
memccpy(result, ptr, 0, len);
|
290
291
|
return result;
|
291
292
|
}
|
@@ -302,8 +303,9 @@ static FBuffer *fbuffer_alloc()
|
|
302
303
|
|
303
304
|
static FBuffer *fbuffer_alloc_with_length(unsigned int initial_length)
|
304
305
|
{
|
306
|
+
FBuffer *fb;
|
305
307
|
assert(initial_length > 0);
|
306
|
-
|
308
|
+
fb = ALLOC(FBuffer);
|
307
309
|
memset((void *) fb, 0, sizeof(FBuffer));
|
308
310
|
fb->initial_length = initial_length;
|
309
311
|
return fb;
|
@@ -641,36 +643,41 @@ static VALUE cState_configure(VALUE self, VALUE opts)
|
|
641
643
|
opts = tmp;
|
642
644
|
tmp = rb_hash_aref(opts, ID2SYM(i_indent));
|
643
645
|
if (RTEST(tmp)) {
|
646
|
+
int len;
|
644
647
|
Check_Type(tmp, T_STRING);
|
645
|
-
|
648
|
+
len = RSTRING_LEN(tmp);
|
646
649
|
state->indent = fstrndup(RSTRING_PTR(tmp), len);
|
647
650
|
state->indent_len = len;
|
648
651
|
}
|
649
652
|
tmp = rb_hash_aref(opts, ID2SYM(i_space));
|
650
653
|
if (RTEST(tmp)) {
|
654
|
+
int len;
|
651
655
|
Check_Type(tmp, T_STRING);
|
652
|
-
|
656
|
+
len = RSTRING_LEN(tmp);
|
653
657
|
state->space = fstrndup(RSTRING_PTR(tmp), len);
|
654
658
|
state->space_len = len;
|
655
659
|
}
|
656
660
|
tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
|
657
661
|
if (RTEST(tmp)) {
|
662
|
+
int len;
|
658
663
|
Check_Type(tmp, T_STRING);
|
659
|
-
|
664
|
+
len = RSTRING_LEN(tmp);
|
660
665
|
state->space_before = fstrndup(RSTRING_PTR(tmp), len);
|
661
666
|
state->space_before_len = len;
|
662
667
|
}
|
663
668
|
tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
|
664
669
|
if (RTEST(tmp)) {
|
670
|
+
int len;
|
665
671
|
Check_Type(tmp, T_STRING);
|
666
|
-
|
672
|
+
len = RSTRING_LEN(tmp);
|
667
673
|
state->array_nl = fstrndup(RSTRING_PTR(tmp), len);
|
668
674
|
state->array_nl_len = len;
|
669
675
|
}
|
670
676
|
tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
|
671
677
|
if (RTEST(tmp)) {
|
678
|
+
int len;
|
672
679
|
Check_Type(tmp, T_STRING);
|
673
|
-
|
680
|
+
len = RSTRING_LEN(tmp);
|
674
681
|
state->object_nl = fstrndup(RSTRING_PTR(tmp), len);
|
675
682
|
state->object_nl_len = len;
|
676
683
|
}
|
@@ -744,14 +751,14 @@ static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *s
|
|
744
751
|
char *delim2 = FBUFFER_PTR(state->object_delim2);
|
745
752
|
long delim2_len = FBUFFER_LEN(state->object_delim2);
|
746
753
|
int i, j;
|
754
|
+
VALUE key, key_to_s, keys;
|
747
755
|
depth++;
|
748
756
|
if (max_nesting != 0 && depth > max_nesting) {
|
749
757
|
fbuffer_free(buffer);
|
750
758
|
rb_raise(eNestingError, "nesting of %ld is too deep", depth);
|
751
759
|
}
|
752
760
|
fbuffer_append_char(buffer, '{');
|
753
|
-
|
754
|
-
VALUE key, key_to_s;
|
761
|
+
keys = rb_funcall(obj, rb_intern("keys"), 0);
|
755
762
|
for(i = 0; i < RARRAY_LEN(keys); i++) {
|
756
763
|
if (i > 0) fbuffer_append(buffer, delim, delim_len);
|
757
764
|
if (object_nl) {
|
@@ -914,7 +921,7 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj, VALUE depth)
|
|
914
921
|
|
915
922
|
generate_json(buffer, self, state, obj, NIL_P(depth) ? 0 : FIX2INT(depth));
|
916
923
|
result = rb_str_new(FBUFFER_PAIR(buffer));
|
917
|
-
|
924
|
+
fbuffer_free(buffer);
|
918
925
|
FORCE_UTF8(result);
|
919
926
|
return result;
|
920
927
|
}
|
File without changes
|
@@ -147,8 +147,9 @@ case 2:
|
|
147
147
|
tr2:
|
148
148
|
#line 127 "parser.rl"
|
149
149
|
{
|
150
|
+
char *np;
|
150
151
|
json->parsing_name = 1;
|
151
|
-
|
152
|
+
np = JSON_parse_string(json, p, pe, &last_name);
|
152
153
|
json->parsing_name = 0;
|
153
154
|
if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
|
154
155
|
}
|
File without changes
|
@@ -125,8 +125,9 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
|
125
125
|
}
|
126
126
|
|
127
127
|
action parse_name {
|
128
|
+
char *np;
|
128
129
|
json->parsing_name = 1;
|
129
|
-
|
130
|
+
np = JSON_parse_string(json, fpc, pe, &last_name);
|
130
131
|
json->parsing_name = 0;
|
131
132
|
if (np == NULL) { fhold; fbreak; } else fexec np;
|
132
133
|
}
|
data/lib/json/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-04-
|
12
|
+
date: 2010-04-28 00:00:00 +02:00
|
13
13
|
default_executable: edit_json.rb
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -19,8 +19,8 @@ executables:
|
|
19
19
|
- edit_json.rb
|
20
20
|
- prettify_json.rb
|
21
21
|
extensions:
|
22
|
-
- ext/json/ext/
|
23
|
-
- ext/json/ext/
|
22
|
+
- ext/json/ext/generator/extconf.rb
|
23
|
+
- ext/json/ext/parser/extconf.rb
|
24
24
|
extra_rdoc_files:
|
25
25
|
- README
|
26
26
|
files:
|
@@ -68,13 +68,13 @@ files:
|
|
68
68
|
- benchmarks/generator_benchmark.rb
|
69
69
|
- benchmarks/parser2_benchmark.rb
|
70
70
|
- benchmarks/ohai.ruby
|
71
|
-
- ext/json/ext/
|
72
|
-
- ext/json/ext/
|
73
|
-
- ext/json/ext/
|
74
|
-
- ext/json/ext/parser.
|
75
|
-
- ext/json/ext/parser.
|
76
|
-
- ext/json/ext/
|
77
|
-
- ext/json/ext/
|
71
|
+
- ext/json/ext/generator/extconf.rb
|
72
|
+
- ext/json/ext/generator/generator.c
|
73
|
+
- ext/json/ext/generator/generator.h
|
74
|
+
- ext/json/ext/parser/extconf.rb
|
75
|
+
- ext/json/ext/parser/parser.rl
|
76
|
+
- ext/json/ext/parser/parser.h
|
77
|
+
- ext/json/ext/parser/parser.c
|
78
78
|
- Rakefile
|
79
79
|
- tools/fuzz.rb
|
80
80
|
- tools/server.rb
|