diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index 739bdaa4..03b09890 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -329,7 +329,9 @@ static inline void escape_UTF8_char(search_state *search, unsigned char ch_len) { const unsigned char ch = (unsigned char)*search->ptr; switch (ch_len) { - case 1: { + case ESCAPE_LEN_1: { + search_flush(search); + switch (ch) { case '"': fbuffer_append(search->buffer, "\\\"", 2); break; case '\\': fbuffer_append(search->buffer, "\\\\", 2); break; diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index 33f3ebe8..15434c80 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -793,6 +793,14 @@ def run_script_safe_test(ascii_only) data = '\n" + json = '"\\n\\u003c/script>"' + assert_equal json, generate(data, script_safe: true, ascii_only: ascii_only) end def test_backslash