oj 3.0.3 → 3.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/oj/dump_object.c +1 -1
- data/ext/oj/mimic_json.c +5 -5
- data/ext/oj/oj.c +5 -5
- data/ext/oj/rails.c +12 -5
- data/ext/oj/rxclass.c +20 -6
- data/lib/oj/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77898b80dc0daaabff6e620f0d9ef0b6eb26eac1
|
4
|
+
data.tar.gz: 112de18472976923d86d57a62fa30f611e0c4bbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f59fca5e3442fcf3d46e5f931ec36657e54f359924e60707ed4962c11f9b7f402e41e2166befb257a7bf6686a4552a6be8553b84552908ca503a30bdd4f94ec1
|
7
|
+
data.tar.gz: 9443804d9d931de71e5b9d3f2ba29d05141fb0dd86bd9700d285908d75e5566f50476b5887200c49dc3524637a076c3efb9f489adb4926bf4dd0403753eb5032
|
data/ext/oj/dump_object.c
CHANGED
@@ -624,7 +624,7 @@ dump_obj_attrs(VALUE obj, VALUE clas, slot_t id, int depth, Out out) {
|
|
624
624
|
oj_dump_cstr(buf, strlen(attr) + 1, 0, 0, out);
|
625
625
|
}
|
626
626
|
*out->cur++ = ':';
|
627
|
-
oj_dump_obj_val(value, d2, out
|
627
|
+
oj_dump_obj_val(value, d2, out);
|
628
628
|
assure_size(out, 2);
|
629
629
|
}
|
630
630
|
#endif
|
data/ext/oj/mimic_json.c
CHANGED
@@ -113,7 +113,7 @@ oj_parse_mimic_dump_options(VALUE ropts, Options copts) {
|
|
113
113
|
if (Qnil != (v = rb_hash_lookup(ropts, oj_indent_sym))) {
|
114
114
|
rb_check_type(v, T_STRING);
|
115
115
|
if (sizeof(copts->dump_opts.indent_str) <= (len = RSTRING_LEN(v))) {
|
116
|
-
rb_raise(rb_eArgError, "indent string is limited to %lu characters.", sizeof(copts->dump_opts.indent_str));
|
116
|
+
rb_raise(rb_eArgError, "indent string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.indent_str));
|
117
117
|
}
|
118
118
|
strcpy(copts->dump_opts.indent_str, StringValuePtr(v));
|
119
119
|
copts->dump_opts.indent_size = (uint8_t)len;
|
@@ -122,7 +122,7 @@ oj_parse_mimic_dump_options(VALUE ropts, Options copts) {
|
|
122
122
|
if (Qnil != (v = rb_hash_lookup(ropts, oj_space_sym))) {
|
123
123
|
rb_check_type(v, T_STRING);
|
124
124
|
if (sizeof(copts->dump_opts.after_sep) <= (len = RSTRING_LEN(v))) {
|
125
|
-
rb_raise(rb_eArgError, "space string is limited to %lu characters.", sizeof(copts->dump_opts.after_sep));
|
125
|
+
rb_raise(rb_eArgError, "space string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.after_sep));
|
126
126
|
}
|
127
127
|
strcpy(copts->dump_opts.after_sep, StringValuePtr(v));
|
128
128
|
copts->dump_opts.after_size = (uint8_t)len;
|
@@ -131,7 +131,7 @@ oj_parse_mimic_dump_options(VALUE ropts, Options copts) {
|
|
131
131
|
if (Qnil != (v = rb_hash_lookup(ropts, oj_space_before_sym))) {
|
132
132
|
rb_check_type(v, T_STRING);
|
133
133
|
if (sizeof(copts->dump_opts.before_sep) <= (len = RSTRING_LEN(v))) {
|
134
|
-
rb_raise(rb_eArgError, "space_before string is limited to %lu characters.", sizeof(copts->dump_opts.before_sep));
|
134
|
+
rb_raise(rb_eArgError, "space_before string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.before_sep));
|
135
135
|
}
|
136
136
|
strcpy(copts->dump_opts.before_sep, StringValuePtr(v));
|
137
137
|
copts->dump_opts.before_size = (uint8_t)len;
|
@@ -140,7 +140,7 @@ oj_parse_mimic_dump_options(VALUE ropts, Options copts) {
|
|
140
140
|
if (Qnil != (v = rb_hash_lookup(ropts, oj_object_nl_sym))) {
|
141
141
|
rb_check_type(v, T_STRING);
|
142
142
|
if (sizeof(copts->dump_opts.hash_nl) <= (len = RSTRING_LEN(v))) {
|
143
|
-
rb_raise(rb_eArgError, "object_nl string is limited to %lu characters.", sizeof(copts->dump_opts.hash_nl));
|
143
|
+
rb_raise(rb_eArgError, "object_nl string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.hash_nl));
|
144
144
|
}
|
145
145
|
strcpy(copts->dump_opts.hash_nl, StringValuePtr(v));
|
146
146
|
copts->dump_opts.hash_size = (uint8_t)len;
|
@@ -149,7 +149,7 @@ oj_parse_mimic_dump_options(VALUE ropts, Options copts) {
|
|
149
149
|
if (Qnil != (v = rb_hash_lookup(ropts, oj_array_nl_sym))) {
|
150
150
|
rb_check_type(v, T_STRING);
|
151
151
|
if (sizeof(copts->dump_opts.array_nl) <= (len = RSTRING_LEN(v))) {
|
152
|
-
rb_raise(rb_eArgError, "array_nl string is limited to %lu characters.", sizeof(copts->dump_opts.array_nl));
|
152
|
+
rb_raise(rb_eArgError, "array_nl string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.array_nl));
|
153
153
|
}
|
154
154
|
strcpy(copts->dump_opts.array_nl, StringValuePtr(v));
|
155
155
|
copts->dump_opts.array_size = (uint8_t)len;
|
data/ext/oj/oj.c
CHANGED
@@ -407,7 +407,7 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
407
407
|
break;
|
408
408
|
case T_STRING:
|
409
409
|
if (sizeof(copts->dump_opts.indent_str) <= (len = RSTRING_LEN(v))) {
|
410
|
-
rb_raise(rb_eArgError, "indent string is limited to %lu characters.", sizeof(copts->dump_opts.indent_str));
|
410
|
+
rb_raise(rb_eArgError, "indent string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.indent_str));
|
411
411
|
}
|
412
412
|
strcpy(copts->dump_opts.indent_str, StringValuePtr(v));
|
413
413
|
copts->dump_opts.indent_size = (uint8_t)len;
|
@@ -558,7 +558,7 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
558
558
|
} else {
|
559
559
|
rb_check_type(v, T_STRING);
|
560
560
|
if (sizeof(copts->dump_opts.after_sep) <= (len = RSTRING_LEN(v))) {
|
561
|
-
rb_raise(rb_eArgError, "space string is limited to %lu characters.", sizeof(copts->dump_opts.after_sep));
|
561
|
+
rb_raise(rb_eArgError, "space string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.after_sep));
|
562
562
|
}
|
563
563
|
strcpy(copts->dump_opts.after_sep, StringValuePtr(v));
|
564
564
|
copts->dump_opts.after_size = (uint8_t)len;
|
@@ -571,7 +571,7 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
571
571
|
} else {
|
572
572
|
rb_check_type(v, T_STRING);
|
573
573
|
if (sizeof(copts->dump_opts.before_sep) <= (len = RSTRING_LEN(v))) {
|
574
|
-
rb_raise(rb_eArgError, "sapce_before string is limited to %lu characters.", sizeof(copts->dump_opts.before_sep));
|
574
|
+
rb_raise(rb_eArgError, "sapce_before string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.before_sep));
|
575
575
|
}
|
576
576
|
strcpy(copts->dump_opts.before_sep, StringValuePtr(v));
|
577
577
|
copts->dump_opts.before_size = (uint8_t)len;
|
@@ -584,7 +584,7 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
584
584
|
} else {
|
585
585
|
rb_check_type(v, T_STRING);
|
586
586
|
if (sizeof(copts->dump_opts.hash_nl) <= (len = RSTRING_LEN(v))) {
|
587
|
-
rb_raise(rb_eArgError, "object_nl string is limited to %lu characters.", sizeof(copts->dump_opts.hash_nl));
|
587
|
+
rb_raise(rb_eArgError, "object_nl string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.hash_nl));
|
588
588
|
}
|
589
589
|
strcpy(copts->dump_opts.hash_nl, StringValuePtr(v));
|
590
590
|
copts->dump_opts.hash_size = (uint8_t)len;
|
@@ -597,7 +597,7 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
597
597
|
} else {
|
598
598
|
rb_check_type(v, T_STRING);
|
599
599
|
if (sizeof(copts->dump_opts.array_nl) <= (len = RSTRING_LEN(v))) {
|
600
|
-
rb_raise(rb_eArgError, "array_nl string is limited to %lu characters.", sizeof(copts->dump_opts.array_nl));
|
600
|
+
rb_raise(rb_eArgError, "array_nl string is limited to %lu characters.", (unsigned long)sizeof(copts->dump_opts.array_nl));
|
601
601
|
}
|
602
602
|
strcpy(copts->dump_opts.array_nl, StringValuePtr(v));
|
603
603
|
copts->dump_opts.array_size = (uint8_t)len;
|
data/ext/oj/rails.c
CHANGED
@@ -834,6 +834,7 @@ dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
|
|
834
834
|
} else {
|
835
835
|
ja = rb_funcall(obj, oj_as_json_id, 0);
|
836
836
|
}
|
837
|
+
out->argc = 0;
|
837
838
|
if (ja == obj || !as_ok) {
|
838
839
|
// Once as_json is call it should never be called again on the same
|
839
840
|
// object with as_ok.
|
@@ -842,7 +843,7 @@ dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
|
|
842
843
|
int type = rb_type(ja);
|
843
844
|
|
844
845
|
if (T_HASH == type || T_ARRAY == type) {
|
845
|
-
dump_rails_val(ja, depth, out,
|
846
|
+
dump_rails_val(ja, depth, out, true);
|
846
847
|
} else {
|
847
848
|
dump_rails_val(ja, depth, out, true);
|
848
849
|
}
|
@@ -851,7 +852,7 @@ dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
|
|
851
852
|
|
852
853
|
static void
|
853
854
|
dump_to_hash(VALUE obj, int depth, Out out) {
|
854
|
-
dump_rails_val(rb_funcall(obj, oj_to_hash_id, 0), depth, out,
|
855
|
+
dump_rails_val(rb_funcall(obj, oj_to_hash_id, 0), depth, out, true);
|
855
856
|
}
|
856
857
|
|
857
858
|
static void
|
@@ -931,7 +932,7 @@ dump_array(VALUE a, int depth, Out out, bool as_ok) {
|
|
931
932
|
} else {
|
932
933
|
fill_indent(out, d2);
|
933
934
|
}
|
934
|
-
dump_rails_val(rb_ary_entry(a, i), d2, out,
|
935
|
+
dump_rails_val(rb_ary_entry(a, i), d2, out, true);
|
935
936
|
if (i < cnt) {
|
936
937
|
*out->cur++ = ',';
|
937
938
|
}
|
@@ -1010,7 +1011,7 @@ hash_cb(VALUE key, VALUE value, Out out) {
|
|
1010
1011
|
out->cur += out->opts->dump_opts.after_size;
|
1011
1012
|
}
|
1012
1013
|
}
|
1013
|
-
dump_rails_val(value, depth, out,
|
1014
|
+
dump_rails_val(value, depth, out, true);
|
1014
1015
|
out->depth = depth;
|
1015
1016
|
*out->cur++ = ',';
|
1016
1017
|
|
@@ -1028,7 +1029,11 @@ dump_hash(VALUE obj, int depth, Out out, bool as_ok) {
|
|
1028
1029
|
return;
|
1029
1030
|
}
|
1030
1031
|
}
|
1031
|
-
|
1032
|
+
// Nothing good can come from calling as_json on a hash which is supposed
|
1033
|
+
// to be a primitive so if the type is a hash and the class is also a hash
|
1034
|
+
// then do not call as_json.
|
1035
|
+
//if (!oj_rails_hash_opt && as_ok && rb_cHash != rb_obj_class(obj) && rb_respond_to(obj, oj_as_json_id)) {
|
1036
|
+
if (!oj_rails_hash_opt && as_ok && rb_respond_to(obj, oj_as_json_id)) {
|
1032
1037
|
dump_as_json(obj, depth, out, false);
|
1033
1038
|
return;
|
1034
1039
|
}
|
@@ -1071,6 +1076,7 @@ dump_hash(VALUE obj, int depth, Out out, bool as_ok) {
|
|
1071
1076
|
static void
|
1072
1077
|
dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
|
1073
1078
|
if (oj_code_dump(oj_compat_codes, obj, depth, out)) {
|
1079
|
+
out->argc = 0;
|
1074
1080
|
return;
|
1075
1081
|
}
|
1076
1082
|
if (as_ok) {
|
@@ -1096,6 +1102,7 @@ dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
|
|
1096
1102
|
static void
|
1097
1103
|
dump_as_string(VALUE obj, int depth, Out out, bool as_ok) {
|
1098
1104
|
if (oj_code_dump(oj_compat_codes, obj, depth, out)) {
|
1105
|
+
out->argc = 0;
|
1099
1106
|
return;
|
1100
1107
|
}
|
1101
1108
|
oj_dump_obj_to_s(obj, out);
|
data/ext/oj/rxclass.c
CHANGED
@@ -6,16 +6,20 @@
|
|
6
6
|
#include <sys/types.h>
|
7
7
|
#include <stdlib.h>
|
8
8
|
#include <errno.h>
|
9
|
-
#include <regex.h>
|
10
9
|
#include <string.h>
|
11
10
|
#include <stdio.h>
|
11
|
+
#if !IS_WINDOWS
|
12
|
+
#include <regex.h>
|
13
|
+
#endif
|
12
14
|
|
13
15
|
#include "rxclass.h"
|
14
16
|
|
15
17
|
typedef struct _RxC {
|
16
18
|
struct _RxC *next;
|
17
19
|
VALUE rrx;
|
20
|
+
#if !IS_WINDOWS
|
18
21
|
regex_t rx;
|
22
|
+
#endif
|
19
23
|
VALUE clas;
|
20
24
|
char src[256];
|
21
25
|
} *RxC;
|
@@ -33,10 +37,12 @@ oj_rxclass_cleanup(RxClass rc) {
|
|
33
37
|
|
34
38
|
while (NULL != (rxc = rc->head)) {
|
35
39
|
rc->head = rc->head->next;
|
40
|
+
#if !IS_WINDOWS
|
36
41
|
if (Qnil == rxc->rrx) {
|
37
42
|
regfree(&rxc->rx);
|
38
43
|
}
|
39
44
|
xfree(rxc);
|
45
|
+
#endif
|
40
46
|
}
|
41
47
|
}
|
42
48
|
|
@@ -58,25 +64,29 @@ oj_rxclass_rappend(RxClass rc, VALUE rx, VALUE clas) {
|
|
58
64
|
// Attempt to compile the expression. If it fails populate the error code..
|
59
65
|
int
|
60
66
|
oj_rxclass_append(RxClass rc, const char *expr, VALUE clas) {
|
61
|
-
// Use mallow and not ALLOC_N to avoid pulliing ruby.h which conflicts
|
62
|
-
// with regex_t.
|
63
67
|
RxC rxc;
|
68
|
+
#if !IS_WINDOWS
|
64
69
|
int err;
|
65
70
|
int flags = 0;
|
66
|
-
|
71
|
+
#endif
|
67
72
|
if (sizeof(rxc->src) <= strlen(expr)) {
|
68
|
-
snprintf(rc->err, sizeof(rc->err), "expressions must be less than %lu
|
73
|
+
snprintf(rc->err, sizeof(rc->err), "expressions must be less than %lu characters", sizeof(rxc->src));
|
69
74
|
return EINVAL;
|
70
75
|
}
|
71
76
|
rxc = ALLOC_N(struct _RxC, 1);
|
72
77
|
rxc->next = 0;
|
73
|
-
rxc->rrx = Qnil;
|
74
78
|
rxc->clas = clas;
|
79
|
+
|
80
|
+
#if IS_WINDOWS
|
81
|
+
rxc->rrx = rb_funcall(rb_cRegexp, rb_intern("new"), 1, rb_str_new2(expr));
|
82
|
+
#else
|
83
|
+
rxc->rrx = Qnil;
|
75
84
|
if (0 != (err = regcomp(&rxc->rx, expr, flags))) {
|
76
85
|
regerror(err, &rxc->rx, rc->err, sizeof(rc->err));
|
77
86
|
free(rxc);
|
78
87
|
return err;
|
79
88
|
}
|
89
|
+
#endif
|
80
90
|
if (NULL == rc->tail) {
|
81
91
|
rc->head = rxc;
|
82
92
|
} else {
|
@@ -102,12 +112,14 @@ oj_rxclass_match(RxClass rc, const char *str, int len) {
|
|
102
112
|
return rxc->clas;
|
103
113
|
}
|
104
114
|
} else if (len < (int)sizeof(buf)) {
|
115
|
+
#if !IS_WINDOWS
|
105
116
|
// string is not \0 terminated so copy and atempt a match
|
106
117
|
memcpy(buf, str, len);
|
107
118
|
buf[len] = '\0';
|
108
119
|
if (0 == regexec(&rxc->rx, buf, 0, NULL, 0)) { // match
|
109
120
|
return rxc->clas;
|
110
121
|
}
|
122
|
+
#endif
|
111
123
|
} else {
|
112
124
|
// TBD allocate a larger buffer and attempt
|
113
125
|
}
|
@@ -126,7 +138,9 @@ oj_rxclass_copy(RxClass src, RxClass dest) {
|
|
126
138
|
if (Qnil != rxc->rrx) {
|
127
139
|
oj_rxclass_rappend(dest, rxc->rrx, rxc->clas);
|
128
140
|
} else {
|
141
|
+
#if !IS_WINDOWS
|
129
142
|
oj_rxclass_append(dest, rxc->src, rxc->clas);
|
143
|
+
#endif
|
130
144
|
}
|
131
145
|
}
|
132
146
|
}
|
data/lib/oj/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|