Early return from range if request type is not GET

This commit is contained in:
Sdogruyol 2017-02-04 13:35:46 +03:00
parent 0543142a10
commit 476b27892e
5 changed files with 37 additions and 40 deletions

View file

@ -1,30 +1,30 @@
require "./spec_helper"
describe "Run" do
it "runs a code block after starting" do
Kemal.config.env = "test"
make_me_true = false
Kemal.run do
make_me_true = true
Kemal.stop
end
make_me_true.should eq true
end
it "runs without a block being specified" do
Kemal.config.env = "test"
Kemal.run
Kemal.config.running.should eq true
Kemal.stop
end
it "runs with just a block" do
Kemal.config.env = "test"
make_me_true = false
Kemal.run do
make_me_true = true
Kemal.stop
end
make_me_true.should eq true
end
end
require "./spec_helper"
describe "Run" do
it "runs a code block after starting" do
Kemal.config.env = "test"
make_me_true = false
Kemal.run do
make_me_true = true
Kemal.stop
end
make_me_true.should eq true
end
it "runs without a block being specified" do
Kemal.config.env = "test"
Kemal.run
Kemal.config.running.should eq true
Kemal.stop
end
it "runs with just a block" do
Kemal.config.env = "test"
make_me_true = false
Kemal.run do
make_me_true = true
Kemal.stop
end
make_me_true.should eq true
end
end

View file

@ -119,9 +119,9 @@ describe Kemal::StaticFileHandler do
match = response.headers["Content-Range"].match(/bytes (\d+)-(\d+)\/(\d+)/)
match.should_not be nil
if match
start_range = match[1].to_i {0}
end_range = match[2].to_i {0}
range_size = match[3].to_i {0}
start_range = match[1].to_i { 0 }
end_range = match[2].to_i { 0 }
range_size = match[3].to_i { 0 }
range_size.should eq file_size
(end_range < file_size).should eq true

View file

@ -4,7 +4,6 @@ require "./kemal/*"
require "./kemal/helpers/*"
module Kemal
# Overload of self.run with the default startup logging
def self.run(port = nil)
self.run port do
@ -14,9 +13,8 @@ module Kemal
# Overload of self.run to allow just a block
def self.run(&block)
self.run nil &block
self.run nil & block
end
# The command to run a `Kemal` application.
# The port can be given to `#run` but is optional.

View file

@ -1,7 +1,6 @@
class HTTP::Server::Response
class Output
def close
unless response.wrote_headers? && !response.headers.has_key?("Content-Range")
response.content_length = @out_count
end

View file

@ -56,7 +56,7 @@ module Kemal
request_headers = context.request.headers
filesize = File.size(file_path)
File.open(file_path) do |file|
if context.request.headers.has_key?("Range") && context.request.method == "GET"
if context.request.method == "GET" && context.request.headers.has_key?("Range")
next multipart(file, context)
end
if request_headers.includes_word?("Accept-Encoding", "gzip") && config.is_a?(Hash) && config["gzip"] == true && filesize > minsize && Utils.zip_types(file_path)
@ -80,7 +80,7 @@ module Kemal
end
def multipart(file, env)
#See http://httpwg.org/specs/rfc7233.html
# See http://httpwg.org/specs/rfc7233.html
fileb = file.size
range = env.request.headers["Range"]
@ -100,7 +100,7 @@ module Kemal
end
if endb == 0
endb = fileb
endb = fileb
end
if startb < endb && endb <= fileb