Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions lib/rollbar/encoding.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ def self.setup
end

def self.encode(object)
can_be_encoded = object.is_a?(String) || object.is_a?(Symbol)

return object unless can_be_encoded

encoding_class.new(object).encode
case object
when Numeric, TrueClass, FalseClass, NilClass
object
else
encoding_class.new(object).encode
end
end
end
end
Expand Down
5 changes: 5 additions & 0 deletions spec/rollbar/util_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,14 @@
it 'should replace invalid utf8 values' do
bad_key = force_to_ascii("inner \x92bad key")

class ObjClass; def to_s; "bad obj\255".force_encoding('ASCII-8BIT'); end; end
bad_obj = ObjClass.new

payload = {
:bad_value => force_to_ascii("bad value 1\255"),
:bad_value2 => force_to_ascii("bad\255 value 2"),
force_to_ascii("bad\255 key") => 'good value',
:bad_obj => bad_obj,
:hash => {
:inner_bad_value => force_to_ascii("\255\255bad value 3"),
bad_key.to_sym => 'inner good value',
Expand All @@ -157,6 +161,7 @@
payload_copy[:bad_value].should eq('bad value 1')
payload_copy[:bad_value2].should eq('bad value 2')
payload_copy['bad key'].should eq('good value')
payload_copy[:bad_obj].should eq('bad obj')
payload_copy.keys.should_not include("bad\456 key")
payload_copy[:hash][:inner_bad_value].should eq('bad value 3')
payload_copy[:hash][:"inner bad key"].should eq('inner good value')
Expand Down