Skip to content

Commit 234daf9

Browse files
committed
Let Net::BER::BerIdentifiedString fall back if string cannot be encoded.
1 parent 8a18267 commit 234daf9

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
@@ -296,7 +296,7 @@ class Net::BER::BerIdentifiedString < String
296296
def initialize args
297297
super args
298298
# LDAP uses UTF-8 encoded strings
299-
force_encoding('UTF-8') if respond_to?(:encoding)
299+
self.encode('UTF-8') if self.respond_to?(:encoding) rescue self
300300
end
301301
end
302302

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)