From bc45065c89bb3cd51cd35e52d9075e60da65771b Mon Sep 17 00:00:00 2001 From: Tatsuya Sato Date: Thu, 1 Aug 2013 17:05:08 +0900 Subject: [PATCH] FilterParser can parse filter string including special chars. --- lib/net/ldap/filter.rb | 2 +- spec/unit/ldap/filter_parser_spec.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/net/ldap/filter.rb b/lib/net/ldap/filter.rb index 66610010..01e3d49f 100644 --- a/lib/net/ldap/filter.rb +++ b/lib/net/ldap/filter.rb @@ -755,7 +755,7 @@ def parse_filter_branch(scanner) scanner.scan(/\s*/) if op = scanner.scan(/<=|>=|!=|:=|=/) scanner.scan(/\s*/) - if value = scanner.scan(/(?:[-\w*.+@=,#\$%&!'\s\xC3\x80-\xCA\xAF]|[^\x00-\x7F]|\\[a-fA-F\d]{2})+/u) + if value = scanner.scan(/(?:[-\[\]{}\w*.+@=,#\$%&!'^~\s\xC3\x80-\xCA\xAF]|[^\x00-\x7F]|\\[a-fA-F\d]{2})+/u) # 20100313 AZ: Assumes that "(uid=george*)" is the same as # "(uid=george* )". The standard doesn't specify, but I can find # no examples that suggest otherwise. diff --git a/spec/unit/ldap/filter_parser_spec.rb b/spec/unit/ldap/filter_parser_spec.rb index e34828eb..434743ac 100644 --- a/spec/unit/ldap/filter_parser_spec.rb +++ b/spec/unit/ldap/filter_parser_spec.rb @@ -6,12 +6,23 @@ describe "#parse" do context "Given ASCIIs as filter string" do let(:filter_string) { "(cn=name)" } + specify "should generate filter object" do expect(Net::LDAP::Filter::FilterParser.parse(filter_string)).to be_a Net::LDAP::Filter end end + context "Given string including multibyte chars as filter string" do let(:filter_string) { "(cn=名前)" } + + specify "should generate filter object" do + expect(Net::LDAP::Filter::FilterParser.parse(filter_string)).to be_a Net::LDAP::Filter + end + end + + context 'Given string including special chars allowd to be used in DN as filter string' do + let(:filter_string) { '(cn=[{^something~}])' } + specify "should generate filter object" do expect(Net::LDAP::Filter::FilterParser.parse(filter_string)).to be_a Net::LDAP::Filter end