From 0c91b2493c566b407e1ce9a64ed1a367f353716f Mon Sep 17 00:00:00 2001 From: nagachika Date: Tue, 4 Jun 2013 15:09:53 +0000 Subject: merge revision(s) 40925: [Backport #8451] * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@41068 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ dir.c | 2 +- test/ruby/test_fnmatch.rb | 5 +++++ version.h | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f73d044e0..7d051103d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Wed Jun 5 00:08:55 2013 Yusuke Endoh + + * 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 * string.c (rb_str_quote_unprintable): check if argument is a string. diff --git a/dir.c b/dir.c index a46906e1af..17192141e7 100644 --- a/dir.c +++ b/dir.c @@ -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 diff --git a/version.h b/version.h index 419f814c2e..ce655f6c1b 100644 --- a/version.h +++ b/version.h @@ -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 -- cgit v1.2.3