summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeepj <deepjungle.maca@gmail.com>2015-05-25 01:52:10 +0200
committerdeepj <deepjungle.maca@gmail.com>2015-05-26 23:37:54 +0200
commit8a7a142de07cc052f5046bfb17b903d467eb24f6 (patch)
tree3f78c5caf5128c90213c357401c202c04ec490c9
parent7b5820f8de7f9dffeb03d86588bba13fb0e91df1 (diff)
downloadrack-8a7a142de07cc052f5046bfb17b903d467eb24f6.tar.gz
Encoding class can be used freely everywhere
-rw-r--r--lib/rack/chunked.rb2
-rw-r--r--lib/rack/handler/mongrel.rb2
-rw-r--r--lib/rack/handler/scgi.rb3
-rw-r--r--lib/rack/handler/webrick.rb2
-rw-r--r--lib/rack/mock.rb5
-rw-r--r--lib/rack/multipart/generator.rb6
-rw-r--r--lib/rack/multipart/parser.rb76
-rw-r--r--lib/rack/multipart/uploaded_file.rb3
-rw-r--r--lib/rack/utils.rb19
9 files changed, 45 insertions, 73 deletions
diff --git a/lib/rack/chunked.rb b/lib/rack/chunked.rb
index bd8faf3c..4b8f270e 100644
--- a/lib/rack/chunked.rb
+++ b/lib/rack/chunked.rb
@@ -24,7 +24,7 @@ module Rack
size = chunk.bytesize
next if size == 0
- chunk = chunk.dup.force_encoding(Encoding::BINARY) if chunk.respond_to?(:force_encoding)
+ chunk = chunk.dup.force_encoding(Encoding::BINARY)
yield [size.to_s(16), term, chunk, term].join
end
yield TAIL
diff --git a/lib/rack/handler/mongrel.rb b/lib/rack/handler/mongrel.rb
index af0e7cd1..bd42309d 100644
--- a/lib/rack/handler/mongrel.rb
+++ b/lib/rack/handler/mongrel.rb
@@ -66,7 +66,7 @@ module Rack
env[SCRIPT_NAME] = "" if env[SCRIPT_NAME] == "/"
rack_input = request.body || StringIO.new('')
- rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
+ rack_input.set_encoding(Encoding::BINARY)
env.update({"rack.version" => Rack::VERSION,
"rack.input" => rack_input,
diff --git a/lib/rack/handler/scgi.rb b/lib/rack/handler/scgi.rb
index 8d3eea26..2e54e050 100644
--- a/lib/rack/handler/scgi.rb
+++ b/lib/rack/handler/scgi.rb
@@ -41,8 +41,7 @@ module Rack
env[QUERY_STRING] ||= ""
env[SCRIPT_NAME] = ""
- rack_input = StringIO.new(input_body)
- rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
+ rack_input = StringIO.new(input_body, encoding: Encoding::BINARY)
env.update({"rack.version" => Rack::VERSION,
"rack.input" => rack_input,
diff --git a/lib/rack/handler/webrick.rb b/lib/rack/handler/webrick.rb
index 992f813a..76e07f59 100644
--- a/lib/rack/handler/webrick.rb
+++ b/lib/rack/handler/webrick.rb
@@ -60,7 +60,7 @@ module Rack
env.delete_if { |k, v| v.nil? }
rack_input = StringIO.new(req.body.to_s)
- rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
+ rack_input.set_encoding(Encoding::BINARY)
env.update({"rack.version" => Rack::VERSION,
"rack.input" => rack_input,
diff --git a/lib/rack/mock.rb b/lib/rack/mock.rb
index ae50fd41..8d1e0635 100644
--- a/lib/rack/mock.rb
+++ b/lib/rack/mock.rb
@@ -128,8 +128,7 @@ module Rack
end
end
- empty_str = ""
- empty_str.force_encoding("ASCII-8BIT") if empty_str.respond_to? :force_encoding
+ empty_str = ''.force_encoding(Encoding::ASCII_8BIT)
opts[:input] ||= empty_str
if String === opts[:input]
rack_input = StringIO.new(opts[:input])
@@ -137,7 +136,7 @@ module Rack
rack_input = opts[:input]
end
- rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
+ rack_input.set_encoding(Encoding::BINARY)
env['rack.input'] = rack_input
env["CONTENT_LENGTH"] ||= env["rack.input"].length.to_s
diff --git a/lib/rack/multipart/generator.rb b/lib/rack/multipart/generator.rb
index 1c586b75..edf11669 100644
--- a/lib/rack/multipart/generator.rb
+++ b/lib/rack/multipart/generator.rb
@@ -15,8 +15,8 @@ module Rack
flattened_params.map do |name, file|
if file.respond_to?(:original_filename)
- ::File.open(file.path, "rb") do |f|
- f.set_encoding(Encoding::BINARY) if f.respond_to?(:set_encoding)
+ ::File.open(file.path, 'rb') do |f|
+ f.set_encoding(Encoding::BINARY)
content_for_tempfile(f, file, name)
end
else
@@ -90,4 +90,4 @@ EOF
end
end
end
-end \ No newline at end of file
+end
diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb
index 3be3a207..c47c5f37 100644
--- a/lib/rack/multipart/parser.rb
+++ b/lib/rack/multipart/parser.rb
@@ -27,11 +27,7 @@ module Rack
end
def initialize(boundary, io, content_length, env, tempfile, bufsize)
- @buf = ""
-
- if @buf.respond_to? :force_encoding
- @buf.force_encoding Encoding::ASCII_8BIT
- end
+ @buf = "".force_encoding(Encoding::ASCII_8BIT)
@params = Utils::KeySpaceConstrainedParams.new
@boundary = "--#{boundary}"
@@ -110,11 +106,7 @@ module Rack
def get_current_head_and_filename_and_content_type_and_name_and_body
head = nil
- body = ''
-
- if body.respond_to? :force_encoding
- body.force_encoding Encoding::ASCII_8BIT
- end
+ body = ''.force_encoding(Encoding::ASCII_8BIT)
filename = content_type = name = nil
@@ -172,7 +164,7 @@ module Rack
filename = Utils.unescape(filename)
end
- scrub_filename filename
+ scrub_filename(filename)
if filename !~ /\\[^\\"]/
filename = filename.gsub(/\\(.)/, '\1')
@@ -180,51 +172,45 @@ module Rack
filename
end
- if "<3".respond_to? :valid_encoding?
- def scrub_filename(filename)
- unless filename.valid_encoding?
- # FIXME: this force_encoding is for Ruby 2.0 and 1.9 support.
- # We can remove it after they are dropped
- filename.force_encoding(Encoding::ASCII_8BIT)
- filename.encode!(:invalid => :replace, :undef => :replace)
- end
+ def scrub_filename(filename)
+ unless filename.valid_encoding?
+ # FIXME: this force_encoding is for Ruby 2.0 and 1.9 support.
+ # We can remove it after they are dropped
+ filename.force_encoding(Encoding::ASCII_8BIT)
+ filename.encode!(:invalid => :replace, :undef => :replace)
end
+ end
- CHARSET = "charset"
+ CHARSET = "charset"
- def tag_multipart_encoding(filename, content_type, name, body)
- name = name.to_s
- name.force_encoding Encoding::UTF_8
+ def tag_multipart_encoding(filename, content_type, name, body)
+ name = name.to_s
+ encoding = Encoding::UTF_8
- return if filename
+ name.force_encoding(encoding)
- encoding = Encoding::UTF_8
+ return if filename
- if content_type
- list = content_type.split(';')
- type_subtype = list.first
- type_subtype.strip!
- if TEXT_PLAIN == type_subtype
- rest = list.drop 1
- rest.each do |param|
- k,v = param.split('=', 2)
- k.strip!
- v.strip!
- encoding = Encoding.find v if k == CHARSET
- end
+ if content_type
+ list = content_type.split(';')
+ type_subtype = list.first
+ type_subtype.strip!
+ if TEXT_PLAIN == type_subtype
+ rest = list.drop 1
+ rest.each do |param|
+ k,v = param.split('=', 2)
+ k.strip!
+ v.strip!
+ encoding = Encoding.find v if k == CHARSET
end
end
-
- name.force_encoding encoding
- body.force_encoding encoding
- end
- else
- def scrub_filename(filename)
- end
- def tag_multipart_encoding(filename, content_type, name, body)
end
+
+ name.force_encoding(encoding)
+ body.force_encoding(encoding)
end
+
def get_data(filename, body, content_type, name, head)
data = body
if filename == ""
diff --git a/lib/rack/multipart/uploaded_file.rb b/lib/rack/multipart/uploaded_file.rb
index 1b56ad75..924b1f08 100644
--- a/lib/rack/multipart/uploaded_file.rb
+++ b/lib/rack/multipart/uploaded_file.rb
@@ -11,8 +11,7 @@ module Rack
raise "#{path} file does not exist" unless ::File.exist?(path)
@content_type = content_type
@original_filename = ::File.basename(path)
- @tempfile = Tempfile.new([@original_filename, ::File.extname(path)])
- @tempfile.set_encoding(Encoding::BINARY) if @tempfile.respond_to?(:set_encoding)
+ @tempfile = Tempfile.new([@original_filename, ::File.extname(path)], encoding: Encoding::BINARY)
@tempfile.binmode if binary
FileUtils.copy_file(path, @tempfile.path)
end
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb
index 2d7626ec..52aecfe0 100644
--- a/lib/rack/utils.rb
+++ b/lib/rack/utils.rb
@@ -36,14 +36,8 @@ module Rack
# Unescapes a URI escaped string with +encoding+. +encoding+ will be the
# target encoding of the string returned, and it defaults to UTF-8
- if defined?(::Encoding)
- def unescape(s, encoding = Encoding::UTF_8)
- URI.decode_www_form_component(s, encoding)
- end
- else
- def unescape(s, encoding = nil)
- URI.decode_www_form_component(s, encoding)
- end
+ def unescape(s, encoding = Encoding::UTF_8)
+ URI.decode_www_form_component(s, encoding)
end
module_function :unescape
@@ -221,13 +215,8 @@ module Rack
'"' => "&quot;",
"/" => "&#x2F;"
}
- if //.respond_to?(:encoding)
- ESCAPE_HTML_PATTERN = Regexp.union(*ESCAPE_HTML.keys)
- else
- # On 1.8, there is a kcode = 'u' bug that allows for XSS otherwise
- # TODO doesn't apply to jruby, so a better condition above might be preferable?
- ESCAPE_HTML_PATTERN = /#{Regexp.union(*ESCAPE_HTML.keys)}/n
- end
+
+ ESCAPE_HTML_PATTERN = Regexp.union(*ESCAPE_HTML.keys)
# Escape ampersands, brackets and quotes to their HTML/XML entities.
def escape_html(string)