aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--regparse.c3
-rw-r--r--test/ruby/test_regexp.rb6
3 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 697e60f81c..512349f8d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Sun Aug 16 01:10:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (add_ctype_to_cc_by_range): fix the first
+ character bigger than sb_out was dropped.
+
+ * test/ruby/test_regexp.rb (TestRegexp#test_posix_bracket):
+ add tests for above.
+
Sun Aug 16 00:30:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
* include/ruby/oniguruma.h
diff --git a/regparse.c b/regparse.c
index 876ad546ae..90b26a3bca 100644
--- a/regparse.c
+++ b/regparse.c
@@ -3797,8 +3797,7 @@ add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
for (j = ONIGENC_CODE_RANGE_FROM(mbr, i);
j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {
if (j >= sb_out) {
- if (j == ONIGENC_CODE_RANGE_TO(mbr, i)) i++;
- else if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
+ if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
r = add_code_range_to_buf(&(cc->mbuf), env, j,
ONIGENC_CODE_RANGE_TO(mbr, i));
if (r != 0) return r;
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index 30651c4c91..7631b6854d 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -684,6 +684,12 @@ class TestRegexp < Test::Unit::TestCase
failcheck('[[:alpha')
failcheck('[[:alpha:')
failcheck('[[:alp:]]')
+
+ assert_match(/\A[[:digit:]]+\z/, "\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19")
+ assert_match(/\A[[:alnum:]]+\z/, "\uff10\uff19\uff41\uff5a\uff21\uff3a")
+ assert_match(/\A[[:space:]]+\z/, "\r\n\v\f\r\s\u0085")
+ assert_match(/\A[[:ascii:]]+\z/, "\x00\x7F")
+ assert_no_match(/[[:ascii:]]/, "\x80\xFF")
end
def test_backward