diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | dir.c | 2 | ||||
-rw-r--r-- | test/ruby/test_fnmatch.rb | 5 | ||||
-rw-r--r-- | version.h | 2 |
4 files changed, 14 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Wed Jun 5 00:08:55 2013 Yusuke Endoh <mame@tsg.ne.jp> + + * dir.c (bracket): fix copy-paste error. When the first and last + characters of fnmatch range have different length, fnmatch may + have wrongly matched a path that does not really match. + Coverity Scan found this bug. + Wed Jun 5 00:04:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org> * string.c (rb_str_quote_unprintable): check if argument is a string. @@ -137,7 +137,7 @@ bracket( p = t2 + (r2 = rb_enc_mbclen(t2, pend, enc)); if (ok) continue; if ((r <= (send-s) && memcmp(t1, s, r) == 0) || - (r2 <= (send-s) && memcmp(t2, s, r) == 0)) { + (r2 <= (send-s) && memcmp(t2, s, r2) == 0)) { ok = 1; continue; } diff --git a/test/ruby/test_fnmatch.rb b/test/ruby/test_fnmatch.rb index 0b3f604df5..269d26e02f 100644 --- a/test/ruby/test_fnmatch.rb +++ b/test/ruby/test_fnmatch.rb @@ -124,4 +124,9 @@ class TestFnmatch < Test::Unit::TestCase assert(File.fnmatch("{*,#{pattern_eucjp}}", path, File::FNM_EXTGLOB)) end end + + def test_unicode + assert_file.fnmatch("[a-\u3042]*", "\u3042") + assert_file.not_fnmatch("[a-\u3042]*", "\u3043") + end end @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.0.0" #define RUBY_RELEASE_DATE "2013-06-05" -#define RUBY_PATCHLEVEL 205 +#define RUBY_PATCHLEVEL 206 #define RUBY_RELEASE_YEAR 2013 #define RUBY_RELEASE_MONTH 6 |