diff --git a/CHANGELOG.md b/CHANGELOG.md index 4932a8c8..37fd688d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +## v6.26.2 (17 January 2024) + +### Fixes + +* Fix unhandled `URI::InvalidURIError` in `Cleaner#clean_url` + | [#811](https://github.com/bugsnag/bugsnag-ruby/pull/811) + ## v6.26.1 (9 January 2024) ### Fixes diff --git a/VERSION b/VERSION index 0e10c8e2..dde9f42f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.26.1 +6.26.2 diff --git a/lib/bugsnag/cleaner.rb b/lib/bugsnag/cleaner.rb index 75b7383c..600ba8e1 100644 --- a/lib/bugsnag/cleaner.rb +++ b/lib/bugsnag/cleaner.rb @@ -26,8 +26,16 @@ def clean_object(object) # @return [String] def clean_url(url) return url if @configuration.meta_data_filters.empty? && @configuration.redacted_keys.empty? + return url unless url.include?('?') + + begin + uri = URI(url) + rescue URI::InvalidURIError + pre_query_string, _query_string = url.split('?', 2) + + return "#{pre_query_string}?#{FILTERED}" + end - uri = URI(url) return url unless uri.query query_params = uri.query.split('&').map { |pair| pair.split('=') } diff --git a/spec/cleaner_spec.rb b/spec/cleaner_spec.rb index df33c449..f6908dbe 100644 --- a/spec/cleaner_spec.rb +++ b/spec/cleaner_spec.rb @@ -540,5 +540,17 @@ def to_s let(:url) { "https://host.example/sessions?access_token=abc123" } it { should eq "https://host.example/sessions?access_token=[FILTERED]" } end + + context "with an invalid URL" do + let(:filters) { [/token/] } + let(:url) { "https://host.example/a b c d e f g?access_token=abc123&password=secret&token2=xyz987" } + it { should eq "https://host.example/a b c d e f g?[FILTERED]" } + end + + context "with an invalid URL and no query string" do + let(:filters) { [/token/] } + let(:url) { "https://host.example/a b c d e f g" } + it { should eq "https://host.example/a b c d e f g" } + end end end