mirror of
https://github.com/lostisland/faraday.git
synced 2025-10-27 00:03:09 -04:00
Fix #93 again: ActiveSupport::SafeBuffer#gsub bug
This commit is contained in:
parent
2c5bf666b3
commit
c328e5285a
@ -162,8 +162,8 @@ module Faraday
|
|||||||
ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/
|
ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/
|
||||||
|
|
||||||
def escape(s)
|
def escape(s)
|
||||||
s.to_s.gsub(ESCAPE_RE) {
|
s.to_s.gsub(ESCAPE_RE) {|match|
|
||||||
'%' + $&.unpack('H2' * $&.bytesize).join('%').upcase
|
'%' + match.unpack('H2' * match.bytesize).join('%').upcase
|
||||||
}.tr(' ', '+')
|
}.tr(' ', '+')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -81,3 +81,24 @@ module Faraday
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The essential part of ActiveSupport::SafeBuffer to demonstrate
|
||||||
|
# how it blows up when passed to Faraday::Utils.escape
|
||||||
|
# rails/rails@ed738f7
|
||||||
|
class FakeSafeBuffer < String
|
||||||
|
UNSAFE_STRING_METHODS = %w(gsub)
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
UNSAFE_STRING_METHODS.each do |unsafe_method|
|
||||||
|
if 'String'.respond_to?(unsafe_method)
|
||||||
|
class_eval <<-EOT, __FILE__, __LINE__ + 1
|
||||||
|
def #{unsafe_method}(*args, &block) # def capitalize(*args, &block)
|
||||||
|
to_str.#{unsafe_method}(*args, &block) # to_str.capitalize(*args, &block)
|
||||||
|
end # end
|
||||||
|
EOT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@ -9,6 +9,11 @@ class TestUtils < Faraday::TestCase
|
|||||||
Faraday::Utils.default_uri_parser = nil
|
Faraday::Utils.default_uri_parser = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_escaping_safe_buffer
|
||||||
|
str = FakeSafeBuffer.new('$32,000.00')
|
||||||
|
assert_equal '%2432%2C000.00', Faraday::Utils.escape(str)
|
||||||
|
end
|
||||||
|
|
||||||
def test_parses_with_default
|
def test_parses_with_default
|
||||||
assert_equal %(#<Method: Kernel.URI>), Faraday::Utils.default_uri_parser.to_s
|
assert_equal %(#<Method: Kernel.URI>), Faraday::Utils.default_uri_parser.to_s
|
||||||
uri = normalize(@url)
|
uri = normalize(@url)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user