yajl-ruby 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yajl-ruby might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ext/yajl/yajl_encode.c +39 -3
- data/ext/yajl/yajl_ext.c +6 -0
- data/ext/yajl/yajl_ext.h +1 -1
- data/lib/yajl/version.rb +1 -1
- data/spec/encoding/encoding_spec.rb +16 -0
- data/yajl-ruby.gemspec +4 -5
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c99601133192fb2ea1f0586ac1b4a83dc465d9a8
|
4
|
+
data.tar.gz: cbfce4619e6c2ccd5b761bf8d6005dbee6ce043e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78c816a3a6368d3b0520d27b5987da10a40478357424e305aa121a6359141ef51c8ee9a3caa4bc3dde159156d5cb6f9af6d5cfd3c576c543b5fd9178ad2993e6
|
7
|
+
data.tar.gz: fc968516c955984c03c184d11a349c82c109adcce8c590a7537bd291a315bb2a8ac0be92ae927b9458e10dee07b564ebf15806bc591b89b0d09df89b5d6ce173
|
data/ext/yajl/yajl_encode.c
CHANGED
@@ -59,12 +59,18 @@ yajl_string_encode2(const yajl_print_t print,
|
|
59
59
|
unsigned int htmlSafe)
|
60
60
|
{
|
61
61
|
unsigned int beg = 0;
|
62
|
-
unsigned int end = 0;
|
62
|
+
unsigned int end = 0;
|
63
|
+
unsigned int increment = 0;
|
63
64
|
char hexBuf[7];
|
65
|
+
char entityBuffer[7];
|
64
66
|
hexBuf[0] = '\\'; hexBuf[1] = 'u'; hexBuf[2] = '0'; hexBuf[3] = '0';
|
65
67
|
hexBuf[6] = 0;
|
66
68
|
|
69
|
+
entityBuffer[0] = '\\'; entityBuffer[1] = 'u'; entityBuffer[2] = '2'; entityBuffer[3] = '0';
|
70
|
+
entityBuffer[6] = 0;
|
71
|
+
|
67
72
|
while (end < len) {
|
73
|
+
increment = 1;
|
68
74
|
const char * escaped = NULL;
|
69
75
|
switch (str[end]) {
|
70
76
|
case '\r': escaped = "\\r"; break;
|
@@ -76,10 +82,39 @@ yajl_string_encode2(const yajl_print_t print,
|
|
76
82
|
case '\b': escaped = "\\b"; break;
|
77
83
|
case '\t': escaped = "\\t"; break;
|
78
84
|
case '/':
|
79
|
-
if (htmlSafe) {
|
85
|
+
if (htmlSafe == 1 || htmlSafe == 2) {
|
80
86
|
escaped = "\\/";
|
81
87
|
}
|
82
88
|
break;
|
89
|
+
/* Escaping 0xe280a8 0xe280a9 */
|
90
|
+
case 0xe2:
|
91
|
+
if (htmlSafe == 2) {
|
92
|
+
if (len - end >= 2 && str[end + 1] == 0x80) {
|
93
|
+
if (str[end + 2] == 0xa8) {
|
94
|
+
increment = 3;
|
95
|
+
entityBuffer[4] = '2';
|
96
|
+
entityBuffer[5] = '8';
|
97
|
+
escaped = entityBuffer;
|
98
|
+
break;
|
99
|
+
}
|
100
|
+
|
101
|
+
if (str[end + 2] == 0xa9) {
|
102
|
+
increment = 3;
|
103
|
+
entityBuffer[4] = '2';
|
104
|
+
entityBuffer[5] = '9';
|
105
|
+
escaped = entityBuffer;
|
106
|
+
break;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
case '<':
|
111
|
+
case '>':
|
112
|
+
case '&':
|
113
|
+
if (htmlSafe == 2) {
|
114
|
+
CharToHex(str[end], hexBuf + 4);
|
115
|
+
escaped = hexBuf;
|
116
|
+
}
|
117
|
+
break;
|
83
118
|
default:
|
84
119
|
if ((unsigned char) str[end] < 32) {
|
85
120
|
CharToHex(str[end], hexBuf + 4);
|
@@ -90,7 +125,8 @@ yajl_string_encode2(const yajl_print_t print,
|
|
90
125
|
if (escaped != NULL) {
|
91
126
|
print(ctx, (const char *) (str + beg), end - beg);
|
92
127
|
print(ctx, escaped, (unsigned int)strlen(escaped));
|
93
|
-
|
128
|
+
end += increment;
|
129
|
+
beg = end;
|
94
130
|
} else {
|
95
131
|
++end;
|
96
132
|
}
|
data/ext/yajl/yajl_ext.c
CHANGED
@@ -1030,9 +1030,14 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
|
|
1030
1030
|
actualIndent = indentString;
|
1031
1031
|
}
|
1032
1032
|
}
|
1033
|
+
|
1033
1034
|
if (rb_hash_aref(opts, sym_html_safe) == Qtrue) {
|
1034
1035
|
htmlSafe = 1;
|
1035
1036
|
}
|
1037
|
+
|
1038
|
+
if (rb_hash_aref(opts, sym_entities) == Qtrue) {
|
1039
|
+
htmlSafe = 2;
|
1040
|
+
}
|
1036
1041
|
}
|
1037
1042
|
if (!indentString) {
|
1038
1043
|
indentString = defaultIndentString;
|
@@ -1356,6 +1361,7 @@ void Init_yajl() {
|
|
1356
1361
|
sym_pretty = ID2SYM(rb_intern("pretty"));
|
1357
1362
|
sym_indent = ID2SYM(rb_intern("indent"));
|
1358
1363
|
sym_html_safe = ID2SYM(rb_intern("html_safe"));
|
1364
|
+
sym_entities = ID2SYM(rb_intern("entities"));
|
1359
1365
|
sym_terminator = ID2SYM(rb_intern("terminator"));
|
1360
1366
|
sym_symbolize_keys = ID2SYM(rb_intern("symbolize_keys"));
|
1361
1367
|
sym_symbolize_names = ID2SYM(rb_intern("symbolize_names"));
|
data/ext/yajl/yajl_ext.h
CHANGED
@@ -56,7 +56,7 @@ static rb_encoding *utf8Encoding;
|
|
56
56
|
static VALUE cStandardError, cParseError, cEncodeError, mYajl, cParser, cProjector, cEncoder;
|
57
57
|
static ID intern_io_read, intern_call, intern_keys, intern_to_s,
|
58
58
|
intern_to_json, intern_has_key, intern_to_sym, intern_as_json;
|
59
|
-
static ID sym_allow_comments, sym_check_utf8, sym_pretty, sym_indent, sym_terminator, sym_symbolize_keys, sym_symbolize_names, sym_html_safe;
|
59
|
+
static ID sym_allow_comments, sym_check_utf8, sym_pretty, sym_indent, sym_terminator, sym_symbolize_keys, sym_symbolize_names, sym_html_safe, sym_entities;
|
60
60
|
|
61
61
|
#define GetParser(obj, sval) Data_Get_Struct(obj, yajl_parser_wrapper, sval);
|
62
62
|
#define GetEncoder(obj, sval) Data_Get_Struct(obj, yajl_encoder_wrapper, sval);
|
data/lib/yajl/version.rb
CHANGED
@@ -275,11 +275,27 @@ describe "Yajl JSON encoder" do
|
|
275
275
|
expect(safe_encoder.encode("</script>")).to eql("\"<\\/script>\"")
|
276
276
|
end
|
277
277
|
|
278
|
+
it "should not encode characters with entities by default" do
|
279
|
+
expect(Yajl.dump("\u2028\u2029><&")).to eql("\"\u2028\u2029><&\"")
|
280
|
+
end
|
281
|
+
|
282
|
+
it "should encode characters with entities when enabled" do
|
283
|
+
expect(Yajl.dump("\u2028\u2029><&", entities: true)).to eql("\"\\u2028\\u2029\\u003E\\u003C\\u0026\"")
|
284
|
+
end
|
285
|
+
|
278
286
|
it "should default to *not* escaping / characters" do
|
279
287
|
unsafe_encoder = Yajl::Encoder.new
|
280
288
|
expect(unsafe_encoder.encode("</script>")).not_to eql("\"<\\/script>\"")
|
281
289
|
end
|
282
290
|
|
291
|
+
it "should encode slashes when enabled" do
|
292
|
+
unsafe_encoder = Yajl::Encoder.new(:entities => false)
|
293
|
+
safe_encoder = Yajl::Encoder.new(:entities => true)
|
294
|
+
|
295
|
+
expect(unsafe_encoder.encode("</script>")).not_to eql("\"<\\/script>\"")
|
296
|
+
expect(safe_encoder.encode("</script>")).to eql("\"\\u003C\\/script\\u003E\"")
|
297
|
+
end
|
298
|
+
|
283
299
|
it "return value of #to_json must be a string" do
|
284
300
|
expect {
|
285
301
|
Yajl::Encoder.encode(TheMindKiller.new)
|
data/yajl-ruby.gemspec
CHANGED
@@ -17,11 +17,10 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.required_ruby_version = ">= 1.8.6"
|
18
18
|
|
19
19
|
# tests
|
20
|
-
s.add_development_dependency 'rake-compiler'
|
21
|
-
s.add_development_dependency 'rspec'
|
20
|
+
s.add_development_dependency 'rake-compiler'
|
21
|
+
s.add_development_dependency 'rspec'
|
22
22
|
# benchmarks
|
23
|
-
s.add_development_dependency 'activesupport'
|
23
|
+
s.add_development_dependency 'activesupport'
|
24
24
|
s.add_development_dependency 'json'
|
25
|
-
s.add_development_dependency "benchmark-memory"
|
25
|
+
s.add_development_dependency "benchmark-memory"
|
26
26
|
end
|
27
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yajl-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Lopez
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-07-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|
@@ -17,42 +17,42 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0
|
20
|
+
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: activesupport
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: json
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,16 +71,16 @@ dependencies:
|
|
71
71
|
name: benchmark-memory
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0
|
76
|
+
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '0
|
83
|
+
version: '0'
|
84
84
|
description:
|
85
85
|
email: seniorlopez@gmail.com
|
86
86
|
executables: []
|