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 | 5a413ce4c01b34c46f55df7df97dd7dcea789b76 (patch) | |
| tree | 812b569d50c737c109f2d9c54dcca4d503d449b8 /re.c | |
| parent | 503e047eb8f4f78bdc38de181ecd0e86d2881981 (diff) | |
| download | ruby-5a413ce4c01b34c46f55df7df97dd7dcea789b76.tar.gz ruby-5a413ce4c01b34c46f55df7df97dd7dcea789b76.tar.xz ruby-5a413ce4c01b34c46f55df7df97dd7dcea789b76.zip | |
* re.c (append_utf8): check unicode range.
git-svn-id: http://svn.ruby-lang.org/repos/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; |
