Okay, new since yesterday, I’ve been able duplicate the issue of infinite redirects on non-ASCII slugs.
And I was able to fix it by modifying action_dispatch/journey/router/utils.rb
.
Inside the container there are two copies of that file, I changed both:
--- vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.9/lib/action_dispatch/journey/router/utils.orig 2017-08-07 16:54:17.726203797 +0000
+++ vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.9/lib/action_dispatch/journey/router/utils.rb 2017-08-07 16:46:04.166411177 +0000
@@ -28,6 +28,7 @@
class UriEncoder # :nodoc:
ENCODE = "%%%02X".freeze
US_ASCII = Encoding::US_ASCII
+ ASCII_8 = Encoding::ASCII_8BIT
UTF_8 = Encoding::UTF_8
EMPTY = "".force_encoding(US_ASCII).freeze
DEC2HEX = (0..255).to_a.map{ |i| ENCODE % i }.map{ |s| s.force_encoding(US_ASCII) }
@@ -56,7 +57,9 @@
end
def unescape_uri(uri)
- encoding = uri.encoding == US_ASCII ? UTF_8 : uri.encoding
+ encoding = uri.encoding
+ encoding = UTF_8 if ( encoding == US_ASCII || encoding == ASCII_8 )
+
uri.gsub(ESCAPED) { [$&[1, 2].hex].pack('C') }.force_encoding(encoding)
end
--- vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router/utils.orig 2017-08-07 16:56:20.718104297 +0000
+++ vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/journey/router/utils.rb 2017-08-07 16:47:21.338413239 +0000
@@ -26,6 +26,7 @@
class UriEncoder # :nodoc:
ENCODE = "%%%02X".freeze
US_ASCII = Encoding::US_ASCII
+ ASCII_8 = Encoding::ASCII_8BIT
UTF_8 = Encoding::UTF_8
EMPTY = "".force_encoding(US_ASCII).freeze
DEC2HEX = (0..255).to_a.map{ |i| ENCODE % i }.map{ |s| s.force_encoding(US_ASCII) }
@@ -54,7 +55,8 @@
end
def unescape_uri(uri)
- encoding = uri.encoding == US_ASCII ? UTF_8 : uri.encoding
+ encoding = uri.encoding
+ encoding = UTF_8 if ( encoding == US_ASCII || encoding == ASCII_8 )
uri.gsub(ESCAPED) { [$&[1, 2].hex].pack('C') }.force_encoding(encoding)
end
@@ -91,4 +93,3 @@
end
end
end
-
Someone want to recommend where I can submit this officially?
Edit: Probably a pull request to Rails itself? https://github.com/rails/rails The code exists in that tree.