summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNARUSE, Yui <naruse@airemix.jp>2012-06-11 11:07:31 +0900
committerFlorian Frank <flori@ping.de>2013-02-22 01:39:37 +0100
commitca25df027a3b7b1baf786228e47f6dadfdb6af2e (patch)
treea12cc7a26e9f87f00afa2815388ac0ce5eb7dd38
parent22da7f38a2670a9afbd2352c7265697c5db8afb4 (diff)
downloadjson-ca25df027a3b7b1baf786228e47f6dadfdb6af2e.tar.gz
Validate UTF-8 strings.
Raise JSON::GeneratorError on converting Ruby UTF-8 string to JSON as to JSON ASCII does.
-rw-r--r--ext/json/ext/generator/generator.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
index 6180f15..8ceaa2b 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;
}