summary refs log tree commit
diff options
context:
space:
mode:
authorpavel <pavel.rosicky@easy.cz>2019-07-23 21:11:39 +0200
committerpavel <pavel.rosicky@easy.cz>2019-07-23 21:11:39 +0200
commitc6760c2a413ae6d618268e937ee7f940062170dc (patch)
tree788bc7265554e7347630fd39e4790f7b5c741829
parent91e492a56a4eb1d26f5a8e647f12e364458818de (diff)
downloadrack-c6760c2a413ae6d618268e937ee7f940062170dc.tar.gz
reduce allocations in strip_port
-rw-r--r--lib/rack/request.rb11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/rack/request.rb b/lib/rack/request.rb
index 951fe8cb..4ffc1972 100644
--- a/lib/rack/request.rb
+++ b/lib/rack/request.rb
@@ -496,11 +496,18 @@ module Rack
       def strip_port(ip_address)
         # IPv6 format with optional port: "[2001:db8:cafe::17]:47011"
         # returns: "2001:db8:cafe::17"
-        return ip_address.gsub(/(^\[|\]:\d+$)/, '') if ip_address.include?('[')
+        sep_start = ip_address.index('[')
+        sep_end = ip_address.index(']')
+        if (sep_start && sep_end)
+          return ip_address[sep_start + 1, sep_end - 1]
+        end
 
         # IPv4 format with optional port: "192.0.2.43:47011"
         # returns: "192.0.2.43"
-        return ip_address.gsub(/:\d+$/, '') if ip_address.count(':') == 1
+        sep = ip_address.index(':')
+        if (sep && ip_address.count(':') == 1)
+          return ip_address[0, sep]
+        end
 
         ip_address
       end