Project

General

Profile

Bug #6566 ยป bug-6566.diff

reject invalid UTF-8 sequence in JSON.generate - nobu (Nobuyoshi Nakada), 06/10/2012 07:19 AM

View differences:

w/ext/json/generator/generator.c
i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only,
i_quirks_mode, i_pack, i_unpack, i_create_id, i_extend, i_key_p,
i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth,
i_buffer_initial_length, i_dup;
i_buffer_initial_length, i_dup, i_valid_encoding_p;
/*
* Copyright 2001-2004 Unicode, Inc.
......
static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
{
int ascii = state->ascii_only;
fbuffer_append_char(buffer, '"');
#ifdef HAVE_RUBY_ENCODING_H
obj = rb_funcall(obj, i_encode, 1, CEncoding_UTF_8);
if (!ascii && !RTEST(rb_funcall(obj, i_valid_encoding_p, 0, 0))) ascii = 1;
#endif
if (state->ascii_only) {
if (ascii) {
convert_UTF8_to_JSON_ASCII(buffer, obj);
} else {
convert_UTF8_to_JSON(buffer, obj);
......
CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
i_encoding = rb_intern("encoding");
i_encode = rb_intern("encode");
i_valid_encoding_p = rb_intern("valid_encoding?");
#endif
i_SAFE_STATE_PROTOTYPE = rb_intern("SAFE_STATE_PROTOTYPE");
CJSON_SAFE_STATE_PROTOTYPE = Qnil;
    (1-1/1)