From 5a1c2b2677129ffadde65633577f7e0a739a1745 Mon Sep 17 00:00:00 2001 From: akr Date: Sun, 9 Dec 2007 03:50:11 +0000 Subject: * re.c (append_utf8): check unicode range. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14154 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- re.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 're.c') diff --git a/re.c b/re.c index 6187273661..1c7486068f 100644 --- a/re.c +++ b/re.c @@ -1424,10 +1424,23 @@ unescape_escaped_nonascii(const char **pp, const char *end, rb_encoding *enc, return 0; } +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; -- cgit v1.2.3