From 8b4a1663c4611fc78f0cfaec6fdef756ab60486e Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 4 Jun 2021 17:38:27 +0800 Subject: [PATCH 1/2] Limit breadcrumb message's length --- sentry-ruby/lib/sentry/breadcrumb.rb | 9 +++++++-- sentry-ruby/spec/sentry/breadcrumb_spec.rb | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/sentry-ruby/lib/sentry/breadcrumb.rb b/sentry-ruby/lib/sentry/breadcrumb.rb index 4f9c4cc87..4ad5feadb 100644 --- a/sentry-ruby/lib/sentry/breadcrumb.rb +++ b/sentry-ruby/lib/sentry/breadcrumb.rb @@ -2,15 +2,16 @@ module Sentry class Breadcrumb DATA_SERIALIZATION_ERROR_MESSAGE = "[data were removed due to serialization issues]" - attr_accessor :category, :data, :message, :level, :timestamp, :type + attr_accessor :category, :data, :level, :timestamp, :type + attr_reader :message def initialize(category: nil, data: nil, message: nil, timestamp: nil, level: nil, type: nil) @category = category @data = data || {} @level = level - @message = message @timestamp = timestamp || Sentry.utc_now.to_i @type = type + self.message = message end def to_hash @@ -24,6 +25,10 @@ def to_hash } end + def message=(msg) + @message = (msg || "").byteslice(0..Event::MAX_MESSAGE_SIZE_IN_BYTES) + end + private def serialized_data diff --git a/sentry-ruby/spec/sentry/breadcrumb_spec.rb b/sentry-ruby/spec/sentry/breadcrumb_spec.rb index c53eda3f2..9aab0ab2c 100644 --- a/sentry-ruby/spec/sentry/breadcrumb_spec.rb +++ b/sentry-ruby/spec/sentry/breadcrumb_spec.rb @@ -30,6 +30,25 @@ ) end + describe "#initialize" do + it "limits the maximum size of message" do + long_message = "a" * Sentry::Event::MAX_MESSAGE_SIZE_IN_BYTES * 2 + + crumb = described_class.new(message: long_message) + expect(crumb.message.length).to eq(Sentry::Event::MAX_MESSAGE_SIZE_IN_BYTES + 1) + end + end + + describe "#message=" do + it "limits the maximum size of message" do + long_message = "a" * Sentry::Event::MAX_MESSAGE_SIZE_IN_BYTES * 2 + + crumb = described_class.new + crumb.message = long_message + expect(crumb.message.length).to eq(Sentry::Event::MAX_MESSAGE_SIZE_IN_BYTES + 1) + end + end + describe "#to_hash" do it "serializes data correctly" do result = crumb.to_hash From 41dce080de6caa022a97164e5ac2bfead4fdf8e5 Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 4 Jun 2021 21:05:50 +0800 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cb15a521..f4e91641d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Fixes the issue mentioned in this [comment](https://github.com/getsentry/sentry-ruby/pull/1199#issuecomment-773069840) - Correct the timing of loading ActiveJobExtensions [#1464](https://github.com/getsentry/sentry-ruby/pull/1464) - Fixes [#1249](https://github.com/getsentry/sentry-ruby/issues/1249) +- Limit breadcrumb's message length [#1465](https://github.com/getsentry/sentry-ruby/pull/1465) ## 4.5.0