From da297e9ee18741eecea43d9a22e4e2f4e97d8ea3 Mon Sep 17 00:00:00 2001 From: "NARUSE, Yui" Date: Mon, 11 Jun 2012 11:07:31 +0900 Subject: [PATCH] Validate UTF-8 strings. Raise JSON::GeneratorError on converting Ruby UTF-8 string to JSON as to JSON ASCII does. --- ext/json/ext/generator/generator.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index b1babb15..7fc4d5b9 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -273,7 +273,18 @@ static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string) escape_len = 2; break; default: - end++; + { + unsigned short clen = trailingBytesForUTF8[c] + 1; + if (end + clen > len) { + rb_raise(rb_path2class("JSON::GeneratorError"), + "partial character in source, but hit end"); + } + if (!isLegalUTF8((UTF8 *) p, clen)) { + rb_raise(rb_path2class("JSON::GeneratorError"), + "source sequence is illegal/malformed utf-8"); + } + end += clen; + } continue; break; }