diff options
author | NARUSE, Yui <naruse@airemix.jp> | 2012-06-11 11:07:31 +0900 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2013-02-22 01:39:37 +0100 |
commit | ca25df027a3b7b1baf786228e47f6dadfdb6af2e (patch) | |
tree | a12cc7a26e9f87f00afa2815388ac0ce5eb7dd38 /ext/json/ext/generator/generator.c | |
parent | 22da7f38a2670a9afbd2352c7265697c5db8afb4 (diff) | |
download | json-ca25df027a3b7b1baf786228e47f6dadfdb6af2e.tar.gz |
Validate UTF-8 strings.
Raise JSON::GeneratorError on converting Ruby UTF-8 string to JSON
as to JSON ASCII does.
Diffstat (limited to 'ext/json/ext/generator/generator.c')
-rw-r--r-- | ext/json/ext/generator/generator.c | 13 |
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; } |