Skip to content

Commit 3e97434

Browse files
authored
Gracefully fail on malformed utf-8 breadcrumb message (#2582)
1 parent cf3887b commit 3e97434

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## Unreleased
2+
3+
### Bug Fixes
4+
5+
- Gracefully fail on malformed utf-8 breadcrumb message ([#2582](https://github.com/getsentry/sentry-ruby/pull/2582))
6+
- Fixes [#2376](https://github.com/getsentry/sentry-ruby/issues/2376)
7+
18
## 5.23.0
29

310
### Features

sentry-ruby/lib/sentry/breadcrumb.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def to_hash
4747
# @param message [String]
4848
# @return [void]
4949
def message=(message)
50-
@message = message ? message.byteslice(0..Event::MAX_MESSAGE_SIZE_IN_BYTES) : ""
50+
@message = message && Utils::EncodingHelper.valid_utf_8?(message) ? message.byteslice(0..Event::MAX_MESSAGE_SIZE_IN_BYTES) : ""
5151
end
5252

5353
# @param level [String]

sentry-ruby/spec/sentry/breadcrumb_spec.rb

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@
4040
crumb.message = long_message
4141
expect(crumb.message.length).to eq(Sentry::Event::MAX_MESSAGE_SIZE_IN_BYTES + 1)
4242
end
43+
44+
it "removes bad encoding message gracefully" do
45+
crumb = described_class.new
46+
crumb.message = "foo \x1F\xE6"
47+
expect(crumb.message).to eq("")
48+
end
4349
end
4450

4551
describe "#level=" do

sentry-ruby/spec/sentry/transport_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,22 @@
237237
end
238238
end
239239

240+
context "malformed breadcrumb" do
241+
let(:event) { client.event_from_message("foo") }
242+
243+
before do
244+
event.breadcrumbs = Sentry::BreadcrumbBuffer.new(1000)
245+
breadcrumb = Sentry::Breadcrumb.new(message: "foo \x1F\xE6")
246+
event.breadcrumbs.record(breadcrumb)
247+
end
248+
249+
it "gracefully removes bad encoding breadcrumb message" do
250+
expect do
251+
serialized_result = JSON.generate(event.to_hash)
252+
end.not_to raise_error
253+
end
254+
end
255+
240256
context "oversized event" do
241257
context "due to breadcrumb" do
242258
let(:event) { client.event_from_message("foo") }

0 commit comments

Comments
 (0)