From a5203c9f9277d9147ee21012f3649c442a140585 Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Fri, 11 Aug 2023 15:57:35 -0400 Subject: [PATCH 1/8] turn on frozen strings for net/http/header --- lib/net/http/header.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/http/header.rb b/lib/net/http/header.rb index e5fabec4..1d734a66 100644 --- a/lib/net/http/header.rb +++ b/lib/net/http/header.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # # The \HTTPHeader module provides access to \HTTP headers. # From b92ade088dd5d64d4e2dc4008372034308c49b19 Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Fri, 11 Aug 2023 18:02:57 -0400 Subject: [PATCH 2/8] turn on frozen strings for net/http/generic_request --- lib/net/http/generic_request.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/net/http/generic_request.rb b/lib/net/http/generic_request.rb index 8877cd04..1f0d2e52 100644 --- a/lib/net/http/generic_request.rb +++ b/lib/net/http/generic_request.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # # \HTTPGenericRequest is the parent of the Net::HTTPRequest class. # @@ -316,7 +316,7 @@ def encode_multipart_form_data(out, params, opt) boundary ||= SecureRandom.urlsafe_base64(40) chunked_p = chunked? - buf = '' + buf = String.new params.each do |key, value, h={}| key = quote_string(key, charset) filename = @@ -401,7 +401,7 @@ def write_header(sock, ver, path) if /[\r\n]/ =~ reqline raise ArgumentError, "A Request-Line must not contain CR or LF" end - buf = "" + buf = String.new buf << reqline << "\r\n" each_capitalized do |k,v| buf << "#{k}: #{v}\r\n" From dc3b4a75ca7cabf04b6c3dc526c39130d3ebd94e Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Fri, 11 Aug 2023 19:04:18 -0400 Subject: [PATCH 3/8] update net/http/response to be frozen string literal --- lib/net/http/response.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/net/http/response.rb b/lib/net/http/response.rb index 43a4a698..96a91dec 100644 --- a/lib/net/http/response.rb +++ b/lib/net/http/response.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # This class is the base class for \Net::HTTP response classes. # @@ -273,7 +273,7 @@ def code_type #:nodoc: def error! #:nodoc: message = @code - message += ' ' + @message.dump if @message + message += " #{@message.dump}" if @message raise error_type().new(message, self) end @@ -648,7 +648,7 @@ def procdest(dest, block) if block Net::ReadAdapter.new(block) else - dest || '' + dest || String.new end end From 455a74734a582404f899912ec93e9f815db53698 Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Sat, 12 Aug 2023 12:19:50 -0400 Subject: [PATCH 4/8] freeze rest of lib --- lib/net/http.rb | 2 +- lib/net/http/backward.rb | 2 +- lib/net/http/exceptions.rb | 2 +- lib/net/http/proxy_delta.rb | 2 +- lib/net/http/request.rb | 2 +- lib/net/http/requests.rb | 2 +- lib/net/https.rb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/net/http.rb b/lib/net/http.rb index 9e4f9e84..3de27207 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # # = net/http.rb # diff --git a/lib/net/http/backward.rb b/lib/net/http/backward.rb index 691e41e4..b44577ed 100644 --- a/lib/net/http/backward.rb +++ b/lib/net/http/backward.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # for backward compatibility # :enddoc: diff --git a/lib/net/http/exceptions.rb b/lib/net/http/exceptions.rb index 9c425cae..ceec8f7b 100644 --- a/lib/net/http/exceptions.rb +++ b/lib/net/http/exceptions.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true module Net # Net::HTTP exception class. # You cannot use Net::HTTPExceptions directly; instead, you must use diff --git a/lib/net/http/proxy_delta.rb b/lib/net/http/proxy_delta.rb index a2f770eb..e7d30def 100644 --- a/lib/net/http/proxy_delta.rb +++ b/lib/net/http/proxy_delta.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true module Net::HTTP::ProxyDelta #:nodoc: internal use only private diff --git a/lib/net/http/request.rb b/lib/net/http/request.rb index e900b8a1..4a138572 100644 --- a/lib/net/http/request.rb +++ b/lib/net/http/request.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # This class is the base class for \Net::HTTP request classes. # The class should not be used directly; diff --git a/lib/net/http/requests.rb b/lib/net/http/requests.rb index 96cedcab..57241642 100644 --- a/lib/net/http/requests.rb +++ b/lib/net/http/requests.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # HTTP/1.1 methods --- RFC2616 diff --git a/lib/net/https.rb b/lib/net/https.rb index d46721c8..0f23e1fb 100644 --- a/lib/net/https.rb +++ b/lib/net/https.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true =begin = net/https -- SSL/TLS enhancement for Net::HTTP. From 5194fd541e00a5fa85c865034af46e5977d05a4b Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Mon, 14 Aug 2023 11:17:00 -0400 Subject: [PATCH 5/8] Fix on 2.7 --- lib/net/http.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/http.rb b/lib/net/http.rb index 3de27207..7894afda 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1615,7 +1615,7 @@ def connect write_timeout: @write_timeout, continue_timeout: @continue_timeout, debug_output: @debug_output) - buf = "CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" + buf = +"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" buf << "Host: #{@address}:#{@port}\r\n" if proxy_user credential = ["#{proxy_user}:#{proxy_pass}"].pack('m0') From 107742715257d5310003b090a2bb295ead0ed60d Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Mon, 14 Aug 2023 11:17:45 -0400 Subject: [PATCH 6/8] use +'' everywhere --- lib/net/http/generic_request.rb | 4 ++-- lib/net/http/response.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/net/http/generic_request.rb b/lib/net/http/generic_request.rb index 1f0d2e52..9421535c 100644 --- a/lib/net/http/generic_request.rb +++ b/lib/net/http/generic_request.rb @@ -316,7 +316,7 @@ def encode_multipart_form_data(out, params, opt) boundary ||= SecureRandom.urlsafe_base64(40) chunked_p = chunked? - buf = String.new + buf = +'' params.each do |key, value, h={}| key = quote_string(key, charset) filename = @@ -401,7 +401,7 @@ def write_header(sock, ver, path) if /[\r\n]/ =~ reqline raise ArgumentError, "A Request-Line must not contain CR or LF" end - buf = String.new + buf = +'' buf << reqline << "\r\n" each_capitalized do |k,v| buf << "#{k}: #{v}\r\n" diff --git a/lib/net/http/response.rb b/lib/net/http/response.rb index 96a91dec..8f0bd02f 100644 --- a/lib/net/http/response.rb +++ b/lib/net/http/response.rb @@ -648,7 +648,7 @@ def procdest(dest, block) if block Net::ReadAdapter.new(block) else - dest || String.new + dest || +'' end end From 925630f227dfd3fea39985707d2e26aa121d4bee Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Tue, 15 Aug 2023 13:30:53 -0400 Subject: [PATCH 7/8] Update lib/net/http/response.rb @natematykiewicz's suggestion to avoid a string allocation Co-authored-by: Nate Matykiewicz --- lib/net/http/response.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/net/http/response.rb b/lib/net/http/response.rb index 8f0bd02f..3a3156b0 100644 --- a/lib/net/http/response.rb +++ b/lib/net/http/response.rb @@ -273,7 +273,7 @@ def code_type #:nodoc: def error! #:nodoc: message = @code - message += " #{@message.dump}" if @message + message = "#{message} #{@message.dump}" if @message raise error_type().new(message, self) end From 4a22c4233833c7087d287608dfa745ac7f1e69a7 Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Tue, 15 Aug 2023 13:31:43 -0400 Subject: [PATCH 8/8] Update lib/net/http.rb @natematykiewicz's suggestion to avoid another string allocation Co-authored-by: Nate Matykiewicz --- lib/net/http.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/net/http.rb b/lib/net/http.rb index 7894afda..4cf3fa3e 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1615,8 +1615,8 @@ def connect write_timeout: @write_timeout, continue_timeout: @continue_timeout, debug_output: @debug_output) - buf = +"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" - buf << "Host: #{@address}:#{@port}\r\n" + buf = +"CONNECT #{conn_address}:#{@port} HTTP/#{HTTPVersion}\r\n" \ + "Host: #{@address}:#{@port}\r\n" if proxy_user credential = ["#{proxy_user}:#{proxy_pass}"].pack('m0') buf << "Proxy-Authorization: Basic #{credential}\r\n"