diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-09 03:50:11 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-09 03:50:11 +0000 |
commit | 5a1c2b2677129ffadde65633577f7e0a739a1745 (patch) | |
tree | 812b569d50c737c109f2d9c54dcca4d503d449b8 /re.c | |
parent | 78cc1c45ee1dac3f32fccb6f0cd8739403d7568c (diff) | |
download | ruby-5a1c2b2677129ffadde65633577f7e0a739a1745.tar.gz |
* re.c (append_utf8): check unicode range.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -1425,9 +1425,22 @@ unescape_escaped_nonascii(const char **pp, const char *end, rb_encoding *enc, } static int +check_unicode_range(unsigned long code, onig_errmsg_buffer err) +{ + if ((0xd800 <= code && code <= 0xdfff) || /* Surrogates */ + 0x10ffff < code) { + strcpy(err, "invalid Unicode range"); + return -1; + } + return 0; +} + +static int append_utf8(unsigned long uv, VALUE buf, rb_encoding **encp, onig_errmsg_buffer err) { + if (check_unicode_range(uv, err) != 0) + return -1; if (uv < 0x80) { char escbuf[5]; snprintf(escbuf, sizeof(escbuf), "\\x%02x", (int)uv); @@ -1468,10 +1481,6 @@ unescape_unicode_list(const char **pp, const char *end, strcpy(err, "invalid Unicode range"); return -1; } - if (0x10ffff < code) { - strcpy(err, "invalid Unicode range"); - return -1; - } p += len; if (append_utf8(code, buf, encp, err) != 0) return -1; |