diff --git a/Manifest.txt b/Manifest.txt index 4bd01241..cb8815d5 100644 --- a/Manifest.txt +++ b/Manifest.txt @@ -51,8 +51,6 @@ lib/puma/minissl.rb lib/puma/null_io.rb lib/puma/plugin.rb lib/puma/plugin/tmp_restart.rb -lib/puma/rack/backports/uri/common_18.rb -lib/puma/rack/backports/uri/common_192.rb lib/puma/rack/backports/uri/common_193.rb lib/puma/rack/builder.rb lib/puma/rack/urlmap.rb diff --git a/Rakefile b/Rakefile index 99202b3f..870b4177 100644 --- a/Rakefile +++ b/Rakefile @@ -18,7 +18,7 @@ HOE = Hoe.spec "puma" do spec_extras[:executables] = ['puma', 'pumactl'] spec_extras[:homepage] = self.urls.first - require_ruby_version ">= 1.8.7" + require_ruby_version ">= 1.9.3" dependency "rack", [">= 1.1", "< 2.0"], :development @@ -155,4 +155,3 @@ namespace :test do task :all => [:test, "test:integration"] end end - diff --git a/lib/puma/client.rb b/lib/puma/client.rb index e8ebc010..945cdb29 100644 --- a/lib/puma/client.rb +++ b/lib/puma/client.rb @@ -291,7 +291,7 @@ module Puma raise HttpParserError, "HEADER is longer than allowed, aborting client early." end - + false end diff --git a/lib/puma/compat.rb b/lib/puma/compat.rb index 787e748d..a6e3d374 100644 --- a/lib/puma/compat.rb +++ b/lib/puma/compat.rb @@ -6,13 +6,9 @@ class String end unless method_defined? :byteslice - if RUBY_VERSION < '1.9' - alias_method :byteslice, :[] - else - def byteslice(*arg) - enc = self.encoding - self.dup.force_encoding(Encoding::ASCII_8BIT).slice(*arg).force_encoding(enc) - end + def byteslice(*arg) + enc = self.encoding + self.dup.force_encoding(Encoding::ASCII_8BIT).slice(*arg).force_encoding(enc) end end end diff --git a/lib/puma/rack/backports/uri/common_18.rb b/lib/puma/rack/backports/uri/common_18.rb deleted file mode 100644 index bbe4fe07..00000000 --- a/lib/puma/rack/backports/uri/common_18.rb +++ /dev/null @@ -1,59 +0,0 @@ -# :stopdoc: - -# Stolen from ruby core's uri/common.rb, with modifications to support 1.8.x -# -# https://github.com/ruby/ruby/blob/trunk/lib/uri/common.rb -# -# - -module URI - begin - TBLENCWWWCOMP_ = {} # :nodoc: - 256.times do |i| - TBLENCWWWCOMP_[i.chr] = '%%%02X' % i - end - TBLENCWWWCOMP_[' '] = '+' - TBLENCWWWCOMP_.freeze - TBLDECWWWCOMP_ = {} # :nodoc: - 256.times do |i| - h, l = i>>4, i&15 - TBLDECWWWCOMP_['%%%X%X' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%x%X' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%X%x' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%x%x' % [h, l]] = i.chr - end - TBLDECWWWCOMP_['+'] = ' ' - TBLDECWWWCOMP_.freeze - rescue Exception - end - - # Encode given +s+ to URL-encoded form data. - # - # This method doesn't convert *, -, ., 0-9, A-Z, _, a-z, but does convert SP - # (ASCII space) to + and converts others to %XX. - # - # This is an implementation of - # http://www.w3.org/TR/html5/forms.html#url-encoded-form-data - # - # See URI.decode_www_form_component, URI.encode_www_form - def self.encode_www_form_component(s) - str = s.to_s - if RUBY_VERSION < "1.9" && $KCODE =~ /u/i - str.gsub(/([^ a-zA-Z0-9_.-]+)/) do - '%' + $1.unpack('H2' * Rack::Utils.bytesize($1)).join('%').upcase - end.tr(' ', '+') - else - str.gsub(/[^*\-.0-9A-Z_a-z]/) {|m| TBLENCWWWCOMP_[m]} - end - end - - # Decode given +str+ of URL-encoded form data. - # - # This decodes + to SP. - # - # See URI.encode_www_form_component, URI.decode_www_form - def self.decode_www_form_component(str, enc=nil) - raise ArgumentError, "invalid %-encoding (#{str})" unless /\A(?:%[0-9a-fA-F]{2}|[^%])*\z/ =~ str - str.gsub(/\+|%[0-9a-fA-F]{2}/) {|m| TBLDECWWWCOMP_[m]} - end -end diff --git a/lib/puma/rack/backports/uri/common_192.rb b/lib/puma/rack/backports/uri/common_192.rb deleted file mode 100644 index a3cc4d1d..00000000 --- a/lib/puma/rack/backports/uri/common_192.rb +++ /dev/null @@ -1,55 +0,0 @@ -# :stopdoc: - -# Stolen from ruby core's uri/common.rb @32618ba to fix DoS issues in 1.9.2 -# -# https://github.com/ruby/ruby/blob/32618ba7438a2247042bba9b5d85b5d49070f5e5/lib/uri/common.rb -# -# Issue: -# http://redmine.ruby-lang.org/issues/5149 -# -# Relevant Fixes: -# https://github.com/ruby/ruby/commit/b5f91deee04aa6ccbe07c23c8222b937c22a799b -# https://github.com/ruby/ruby/commit/93177c1e5c3906abf14472ae0b905d8b5c72ce1b -# -# This should probably be removed once there is a Ruby 1.9.2 patch level that -# includes this fix. - -require 'uri/common' - -module URI - begin - TBLDECWWWCOMP_ = {} unless const_defined?(:TBLDECWWWCOMP_) #:nodoc: - if TBLDECWWWCOMP_.empty? - 256.times do |i| - h, l = i>>4, i&15 - TBLDECWWWCOMP_['%%%X%X' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%x%X' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%X%x' % [h, l]] = i.chr - TBLDECWWWCOMP_['%%%x%x' % [h, l]] = i.chr - end - TBLDECWWWCOMP_['+'] = ' ' - TBLDECWWWCOMP_.freeze - end - rescue Exception - end - - def self.decode_www_form(str, enc=Encoding::UTF_8) - return [] if str.empty? - unless /\A#{WFKV_}=#{WFKV_}(?:[;&]#{WFKV_}=#{WFKV_})*\z/o =~ str - raise ArgumentError, "invalid data of application/x-www-form-urlencoded (#{str})" - end - ary = [] - $&.scan(/([^=;&]+)=([^;&]*)/) do - ary << [decode_www_form_component($1, enc), decode_www_form_component($2, enc)] - end - ary - end - - def self.decode_www_form_component(str, enc=Encoding::UTF_8) - raise ArgumentError, "invalid %-encoding (#{str})" unless /\A[^%]*(?:%\h\h[^%]*)*\z/ =~ str - str.gsub(/\+|%\h\h/, TBLDECWWWCOMP_).force_encoding(enc) - end - - remove_const :WFKV_ if const_defined?(:WFKV_) - WFKV_ = '(?:[^%#=;&]*(?:%\h\h[^%#=;&]*)*)' # :nodoc: -end diff --git a/lib/puma/util.rb b/lib/puma/util.rb index d46015a2..9937a887 100644 --- a/lib/puma/util.rb +++ b/lib/puma/util.rb @@ -1,10 +1,6 @@ major, minor, patch = RUBY_VERSION.split('.').map { |v| v.to_i } -if major == 1 && minor < 9 - require 'puma/rack/backports/uri/common_18' -elsif major == 1 && minor == 9 && patch == 2 && RUBY_PATCHLEVEL <= 328 && RUBY_ENGINE != 'jruby' - require 'puma/rack/backports/uri/common_192' -elsif major == 1 && minor == 9 && patch == 3 && RUBY_PATCHLEVEL < 125 +if major == 1 && minor == 9 && patch == 3 && RUBY_PATCHLEVEL < 125 require 'puma/rack/backports/uri/common_193' else require 'uri/common' diff --git a/test/test_puma_server_ssl.rb b/test/test_puma_server_ssl.rb index cd506ec9..768aab2c 100644 --- a/test/test_puma_server_ssl.rb +++ b/test/test_puma_server_ssl.rb @@ -114,19 +114,17 @@ class TestPumaServerSSL < Test::Unit::TestCase assert_equal "https", body end - unless RUBY_VERSION =~ /^1.8/ - def test_ssl_v3_rejection - return if DISABLE_SSL - @http.ssl_version='SSLv3' - assert_raises(OpenSSL::SSL::SSLError) do - @http.start do - Net::HTTP::Get.new '/' - end - end - unless defined?(JRUBY_VERSION) - assert_match("wrong version number", @events.error.message) if @events.error + def test_ssl_v3_rejection + return if DISABLE_SSL + @http.ssl_version='SSLv3' + assert_raises(OpenSSL::SSL::SSLError) do + @http.start do + Net::HTTP::Get.new '/' end end + unless defined?(JRUBY_VERSION) + assert_match("wrong version number", @events.error.message) if @events.error + end end end