Skip to content

Commit f39daed

Browse files
author
Rory O'Connell
committed
Merge pull request #64 from lfu/sid
Let Net::BER::BerIdentifiedString fall back if string cannot be encoded.
2 parents a808c89 + 234daf9 commit f39daed

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/net/ber.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class Net::BER::BerIdentifiedString < String
298298
def initialize args
299299
super args
300300
# LDAP uses UTF-8 encoded strings
301-
force_encoding('UTF-8') if respond_to?(:encoding)
301+
self.encode('UTF-8') if self.respond_to?(:encoding) rescue self
302302
end
303303
end
304304

spec/unit/ber/ber_spec.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,30 @@
112112
end
113113
end
114114
end
115+
116+
describe Net::BER::BerIdentifiedString do
117+
describe "initialize" do
118+
subject { Net::BER::BerIdentifiedString.new(data) }
119+
120+
context "binary data" do
121+
let(:data) { ["6a31b4a12aa27a41aca9603f27dd5116"].pack("H*").force_encoding("ASCII-8BIT") }
122+
123+
its(:valid_encoding?) { should be_true }
124+
specify { subject.encoding.name.should == "ASCII-8BIT" }
125+
end
126+
127+
context "ascii data in UTF-8" do
128+
let(:data) { "some text".force_encoding("UTF-8") }
129+
130+
its(:valid_encoding?) { should be_true }
131+
specify { subject.encoding.name.should == "UTF-8" }
132+
end
133+
134+
context "UTF-8 data in UTF-8" do
135+
let(:data) { ["e4b8ad"].pack("H*").force_encoding("UTF-8") }
136+
137+
its(:valid_encoding?) { should be_true }
138+
specify { subject.encoding.name.should == "UTF-8" }
139+
end
140+
end
141+
end

0 commit comments

Comments
 (0)