From 31e66ab0f54787075c3d09222b81b57816f583cc Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 7 Aug 2020 18:39:47 +0800 Subject: [PATCH 1/3] Add a suite for frozen string literal cases --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 67b760696..862096783 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,8 @@ matrix: env: JRUBY_OPTS="--dev -J-Djruby.launch.inproc=true -J-Xmx1024M" RAILS_VERSION=4 - rvm: jruby-9.2.11.1 env: JRUBY_OPTS="--dev -J-Djruby.launch.inproc=true -J-Xmx1024M" RAILS_VERSION=5 + - rvm: 2.7 + env: RUBYOPT="--enable-frozen-string-literal --debug=frozen-string-literal" - rvm: ruby-head env: RAILS_VERSION=0 exclude: From cf04d8c4c1f4a22f9239eb9021894e9ef7e248b0 Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 7 Aug 2020 18:43:40 +0800 Subject: [PATCH 2/3] Duplicate string before calling force_encoding --- spec/raven/event_spec.rb | 2 +- spec/raven/processors/utf8conversion_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/raven/event_spec.rb b/spec/raven/event_spec.rb index dc67af03f..d9a13d9e4 100644 --- a/spec/raven/event_spec.rb +++ b/spec/raven/event_spec.rb @@ -392,7 +392,7 @@ def raven_context data['ary2'] = data['ary'] Raven::Event.new(:extra => { - :invalid => "invalid\255".force_encoding('UTF-8'), + :invalid => "invalid\255".dup.force_encoding('UTF-8'), :circular => data }) end diff --git a/spec/raven/processors/utf8conversion_spec.rb b/spec/raven/processors/utf8conversion_spec.rb index d0cd4ec4c..efc4242d2 100644 --- a/spec/raven/processors/utf8conversion_spec.rb +++ b/spec/raven/processors/utf8conversion_spec.rb @@ -6,7 +6,7 @@ before do @client = double("client") @processor = Raven::Processor::UTF8Conversion.new(@client) - @bad_utf8_string = "invalid utf8 string goes here\255".force_encoding('UTF-8') + @bad_utf8_string = "invalid utf8 string goes here\255".dup.force_encoding('UTF-8') end it "has a utf8 fixture which is not valid utf-8" do @@ -31,7 +31,7 @@ it 'should keep valid UTF-8 bytes after cleaning' do data = {} - data['invalid'] = "한국, 中國, 日本(にっぽん)\255".force_encoding('UTF-8') + data['invalid'] = "한국, 中國, 日本(にっぽん)\255".dup.force_encoding('UTF-8') results = @processor.process(data) expect(results['invalid']).to eq("한국, 中國, 日本(にっぽん)") @@ -61,7 +61,7 @@ end it "deals with unicode hidden in ASCII_8BIT" do - data = ["\xE2\x9C\x89 Hello".force_encoding(Encoding::ASCII_8BIT)] + data = ["\xE2\x9C\x89 Hello".dup.force_encoding(Encoding::ASCII_8BIT)] results = @processor.process(data) @@ -72,7 +72,7 @@ end it "deals with unicode hidden in ASCII_8BIT when the string is frozen" do - data = ["\xE2\x9C\x89 Hello".force_encoding(Encoding::ASCII_8BIT).freeze] + data = ["\xE2\x9C\x89 Hello".dup.force_encoding(Encoding::ASCII_8BIT).freeze] results = @processor.process(data) From 687394c373b42eb2322f61dce28ed3f660bbd409 Mon Sep 17 00:00:00 2001 From: st0012 Date: Fri, 7 Aug 2020 18:44:36 +0800 Subject: [PATCH 3/3] Avoid mutating @server string --- lib/raven/configuration.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/raven/configuration.rb b/lib/raven/configuration.rb index db7fc73c4..9ffa67439 100644 --- a/lib/raven/configuration.rb +++ b/lib/raven/configuration.rb @@ -253,8 +253,8 @@ def server=(value) # For anyone who wants to read the base server string @server = "#{scheme}://#{host}" - @server << ":#{port}" unless port == { 'http' => 80, 'https' => 443 }[scheme] - @server << path + @server += ":#{port}" unless port == { 'http' => 80, 'https' => 443 }[scheme] + @server += path end alias dsn= server=