From 3e8ed02e7f8bc606cbb4a5997e57ddc63534b177 Mon Sep 17 00:00:00 2001 From: Nate Berkopec Date: Wed, 30 Dec 2015 12:31:38 -0500 Subject: [PATCH] Fix UTF-8 conversion for bad exception messages --- lib/raven/processor/utf8conversion.rb | 4 ++++ spec/raven/processors/utf8conversion_spec.rb | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/lib/raven/processor/utf8conversion.rb b/lib/raven/processor/utf8conversion.rb index 0d7e2db38..3cf87c185 100644 --- a/lib/raven/processor/utf8conversion.rb +++ b/lib/raven/processor/utf8conversion.rb @@ -5,6 +5,10 @@ def process(value) value.map { |v| process v } elsif value.is_a? Hash value.merge(value) { |_, v| process v } + elsif value.is_a?(Exception) && !value.message.valid_encoding? + clean_exc = value.class.new(clean_invalid_utf8_bytes(value.message)) + clean_exc.set_backtrace(value.backtrace) + clean_exc else clean_invalid_utf8_bytes(value) end diff --git a/spec/raven/processors/utf8conversion_spec.rb b/spec/raven/processors/utf8conversion_spec.rb index 2a95a3425..492ae741d 100644 --- a/spec/raven/processors/utf8conversion_spec.rb +++ b/spec/raven/processors/utf8conversion_spec.rb @@ -24,6 +24,13 @@ expect(results['invalid']).to eq("invalid utf8 string goes here") end + it "should cleanup invalid UTF-8 bytes in Exception messages" do + data = Exception.new("invalid utf8 string goes here\255".force_encoding('UTF-8')) + + results = @processor.process(data) + expect(results.message).to eq("invalid utf8 string goes here") + end + it 'should keep valid UTF-8 bytes after cleaning' do data = {} data['invalid'] = "한국, 中國, 日本(にっぽん)\255".force_encoding('UTF-8')