diff options
-rw-r--r-- | ext/json/ext/generator/generator.c | 26 | ||||
-rw-r--r-- | ext/json/ext/generator/unicode.c | 5 |
2 files changed, 15 insertions, 16 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index d8be368..4d017f0 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -388,23 +388,22 @@ void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, V long space_before_len = state->space_before_len; char *indent = state->indent; long indent_len = state->indent_len; + long max_nesting = state->max_nesting; int i, j; FBuffer *delim, *delim2; - if (state->delim) { - fbuffer_clear(state->delim); - delim = state->delim; + if (delim = state->delim) { + fbuffer_clear(delim); } else { delim = state->delim = fbuffer_alloc(); } - if (state->delim2) { - fbuffer_clear(state->delim2); - delim2 = state->delim2; + if (delim2 = state->delim2) { + fbuffer_clear(delim2); } else { delim2 = state->delim2 = fbuffer_alloc(); } fbuffer_append_char(delim, ','); depth++; - if (state->max_nesting != 0 && depth > state->max_nesting) { + if (max_nesting != 0 && depth > max_nesting) { fbuffer_free(buffer); rb_raise(eNestingError, "nesting of %ld is too deep", depth); } @@ -450,17 +449,17 @@ void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, V long array_nl_len = state->array_nl_len; char *indent = state->indent; long indent_len = state->indent_len; + long max_nesting = state->max_nesting; int i, j; FBuffer *delim; - if (state->delim) { - fbuffer_clear(state->delim); - delim = state->delim; + if (delim = state->delim) { + fbuffer_clear(delim); } else { delim = state->delim = fbuffer_alloc(); } fbuffer_append_char(delim, ','); depth++; - if (state->max_nesting != 0 && depth > state->max_nesting) { + if (max_nesting != 0 && depth > max_nesting) { fbuffer_free(buffer); rb_raise(eNestingError, "nesting of %ld is too deep", depth); } @@ -516,12 +515,13 @@ void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, V break; case T_FLOAT: { + char allow_nan = state->allow_nan; double value = RFLOAT_VALUE(obj); tmp = rb_funcall(obj, i_to_s, 0); - if (isinf(value) && !state->allow_nan) { + if (!allow_nan && isinf(value)) { fbuffer_free(buffer); rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp)); - } else if (isnan(value) && !state->allow_nan) { + } else if (!allow_nan && isnan(value)) { fbuffer_free(buffer); rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp)); } diff --git a/ext/json/ext/generator/unicode.c b/ext/json/ext/generator/unicode.c index e838824..181f807 100644 --- a/ext/json/ext/generator/unicode.c +++ b/ext/json/ext/generator/unicode.c @@ -97,7 +97,7 @@ inline static void unicode_escape(char *buf, UTF16 character) } -inline static void unicode_escape_to_buffer(FBuffer *buffer, char buf[7], UTF16 character) +inline static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character) { unicode_escape(buf, character); fbuffer_append(buffer, buf, 6); @@ -107,8 +107,7 @@ inline void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string) { const UTF8 *source = (UTF8 *) RSTRING_PTR(string); const UTF8 *sourceEnd = source + RSTRING_LEN(string); - char buf[7] = { '\\', 'u' }; - buf[6] = 0; + char buf[6] = { '\\', 'u' }; while (source < sourceEnd) { UTF32 ch = 0; |