Hello community, here is the log from the commit of package rubygem-puma for openSUSE:Factory checked in at 2018-02-12 10:13:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-puma (Old) and /work/SRC/openSUSE:Factory/.rubygem-puma.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-puma" Mon Feb 12 10:13:45 2018 rev:29 rq:574056 version:3.11.2 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-puma/rubygem-puma.changes 2017-12-22 12:18:23.367454185 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-puma.new/rubygem-puma.changes 2018-02-12 10:13:49.704503267 +0100 @@ -1,0 +2,16 @@ +Thu Feb 8 06:21:17 UTC 2018 - [email protected] + +- updated to version 3.11.2 + see installed History.md + + ## 3.11.2 / 2018-01-19 + + * 1 bugfix: + * Deal with read\_nonblock returning nil early + + ## 3.11.1 / 2018-01-18 + + * 1 bugfix: + * Handle read\_nonblock returning nil when the socket close (#1502) + +------------------------------------------------------------------- Old: ---- puma-3.11.0.gem New: ---- puma-3.11.2.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-puma.spec ++++++ --- /var/tmp/diff_new_pack.juLBjH/_old 2018-02-12 10:13:50.608470691 +0100 +++ /var/tmp/diff_new_pack.juLBjH/_new 2018-02-12 10:13:50.612470547 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-puma # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,7 +24,7 @@ # Name: rubygem-puma -Version: 3.11.0 +Version: 3.11.2 Release: 0 %define mod_name puma %define mod_full_name %{mod_name}-%{version} ++++++ puma-3.11.0.gem -> puma-3.11.2.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/History.md new/History.md --- old/History.md 2017-11-20 17:26:13.000000000 +0100 +++ new/History.md 2018-01-19 20:23:10.000000000 +0100 @@ -1,7 +1,17 @@ +## 3.11.2 / 2018-01-19 + +* 1 bugfix: + * Deal with read\_nonblock returning nil early + +## 3.11.1 / 2018-01-18 + +* 1 bugfix: + * Handle read\_nonblock returning nil when the socket close (#1502) + ## 3.11.0 / 2017-11-20 * 2 features: - * HTTP 203 Early Hints (#1403) + * HTTP 103 Early Hints (#1403) * 421/451 status codes now have correct status messages attached (#1435) * 9 bugfixes: Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/puma_http11/http11_parser.c new/ext/puma_http11/http11_parser.c --- old/ext/puma_http11/http11_parser.c 2017-11-20 17:26:13.000000000 +0100 +++ new/ext/puma_http11/http11_parser.c 2018-01-19 20:23:10.000000000 +0100 @@ -41,11 +41,14 @@ static const int puma_parser_first_final = 47; static const int puma_parser_error = 0; +static const int puma_parser_en_main = 1; + + #line 83 "ext/puma_http11/http11_parser.rl" int puma_parser_init(puma_parser *parser) { int cs = 0; - + #line 53 "ext/puma_http11/http11_parser.c" { cs = puma_parser_start; @@ -71,9 +74,15 @@ const char *p, *pe; int cs = parser->cs; + assert(off <= len && "offset past end of buffer"); + p = buffer+off; pe = buffer+len; + /* assert(*pe == '\0' && "pointer does not end on NUL"); */ + assert((size_t) (pe - p) == len - off && "pointers aren't same distance"); + + #line 87 "ext/puma_http11/http11_parser.c" { if ( p == pe ) @@ -973,52 +982,52 @@ goto tr2; goto st0; } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof47: cs = 47; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof28: cs = 28; goto _test_eof; - _test_eof29: cs = 29; goto _test_eof; - _test_eof30: cs = 30; goto _test_eof; - _test_eof31: cs = 31; goto _test_eof; - _test_eof32: cs = 32; goto _test_eof; - _test_eof33: cs = 33; goto _test_eof; - _test_eof34: cs = 34; goto _test_eof; - _test_eof35: cs = 35; goto _test_eof; - _test_eof36: cs = 36; goto _test_eof; - _test_eof37: cs = 37; goto _test_eof; - _test_eof38: cs = 38; goto _test_eof; - _test_eof39: cs = 39; goto _test_eof; - _test_eof40: cs = 40; goto _test_eof; - _test_eof41: cs = 41; goto _test_eof; - _test_eof42: cs = 42; goto _test_eof; - _test_eof43: cs = 43; goto _test_eof; - _test_eof44: cs = 44; goto _test_eof; - _test_eof45: cs = 45; goto _test_eof; - _test_eof46: cs = 46; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof47: cs = 47; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof30: cs = 30; goto _test_eof; + _test_eof31: cs = 31; goto _test_eof; + _test_eof32: cs = 32; goto _test_eof; + _test_eof33: cs = 33; goto _test_eof; + _test_eof34: cs = 34; goto _test_eof; + _test_eof35: cs = 35; goto _test_eof; + _test_eof36: cs = 36; goto _test_eof; + _test_eof37: cs = 37; goto _test_eof; + _test_eof38: cs = 38; goto _test_eof; + _test_eof39: cs = 39; goto _test_eof; + _test_eof40: cs = 40; goto _test_eof; + _test_eof41: cs = 41; goto _test_eof; + _test_eof42: cs = 42; goto _test_eof; + _test_eof43: cs = 43; goto _test_eof; + _test_eof44: cs = 44; goto _test_eof; + _test_eof45: cs = 45; goto _test_eof; + _test_eof46: cs = 46; goto _test_eof; _test_eof: {} _out: {} @@ -1030,6 +1039,13 @@ parser->cs = cs; parser->nread += p - (buffer + off); + assert(p <= pe && "buffer overflow after parsing execute"); + assert(parser->nread <= len && "nread longer than length"); + assert(parser->body_start <= len && "body starts after buffer end"); + assert(parser->mark < len && "mark is after buffer end"); + assert(parser->field_len <= len && "field has length longer than whole buffer"); + assert(parser->field_start < len && "field starts after buffer end"); + return(parser->nread); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/binder.rb new/lib/puma/binder.rb --- old/lib/puma/binder.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/binder.rb 2018-01-19 20:23:10.000000000 +0100 @@ -120,7 +120,7 @@ umask = nil mode = nil - backlog = nil + backlog = 1024 if uri.query params = Util.parse_query uri.query @@ -344,7 +344,7 @@ # Tell the server to listen on +path+ as a UNIX domain socket. # - def add_unix_listener(path, umask=nil, mode=nil, backlog=nil) + def add_unix_listener(path, umask=nil, mode=nil, backlog=1024) @unix_paths << path # Let anyone connect by default @@ -365,7 +365,7 @@ end s = UNIXServer.new(path) - s.listen backlog if backlog + s.listen backlog @ios << s ensure File.umask old_mask diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/client.rb new/lib/puma/client.rb --- old/lib/puma/client.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/client.rb 2018-01-19 20:23:10.000000000 +0100 @@ -284,6 +284,14 @@ raise ConnectionError, "Connection error detected during read" end + # No data means a closed socket + unless data + @buffer = nil + @requests_served += 1 + @ready = true + raise EOFError + end + if @buffer @buffer << data else @@ -313,6 +321,14 @@ raise e end + # No data means a closed socket + unless data + @buffer = nil + @requests_served += 1 + @ready = true + raise EOFError + end + if @buffer @buffer << data else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/cluster.rb new/lib/puma/cluster.rb --- old/lib/puma/cluster.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/cluster.rb 2018-01-19 20:23:10.000000000 +0100 @@ -279,8 +279,8 @@ while true sleep WORKER_CHECK_INTERVAL begin - b = server.backlog - r = server.running + b = server.backlog || 0 + r = server.running || 0 payload = %Q!#{base_payload}{ "backlog":#{b}, "running":#{r} }\n! io << payload rescue IOError @@ -340,7 +340,7 @@ def stats old_worker_count = @workers.count { |w| w.phase != @phase } booted_worker_count = @workers.count { |w| w.booted? } - worker_status = '[' + @workers.map{ |w| %Q!{ "pid": #{w.pid}, "index": #{w.index}, "phase": #{w.phase}, "booted": #{w.booted?}, "last_checkin": "#{w.last_checkin.utc.iso8601}", "last_status": #{w.last_status} }!}.join(",") + ']' + worker_status = '[' + @workers.map { |w| %Q!{ "pid": #{w.pid}, "index": #{w.index}, "phase": #{w.phase}, "booted": #{w.booted?}, "last_checkin": "#{w.last_checkin.utc.iso8601}", "last_status": #{w.last_status} }!}.join(",") + ']' %Q!{ "workers": #{@workers.size}, "phase": #{@phase}, "booted_workers": #{booted_worker_count}, "old_workers": #{old_worker_count}, "worker_status": #{worker_status} }! end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/configuration.rb new/lib/puma/configuration.rb --- old/lib/puma/configuration.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/configuration.rb 2018-01-19 20:23:10.000000000 +0100 @@ -180,7 +180,7 @@ :worker_shutdown_timeout => DefaultWorkerShutdownTimeout, :remote_address => :socket, :tag => method(:infer_tag), - :environment => ->{ ENV['RACK_ENV'] || "development" }, + :environment => -> { ENV['RACK_ENV'] || "development" }, :rackup => DefaultRackup, :logger => STDOUT, :persistent_timeout => Const::PERSISTENT_TIMEOUT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/const.rb new/lib/puma/const.rb --- old/lib/puma/const.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/const.rb 2018-01-19 20:23:10.000000000 +0100 @@ -98,7 +98,7 @@ # too taxing on performance. module Const - PUMA_VERSION = VERSION = "3.11.0".freeze + PUMA_VERSION = VERSION = "3.11.2".freeze CODE_NAME = "Love Song".freeze PUMA_SERVER_STRING = ['puma', PUMA_VERSION, CODE_NAME].join(' ').freeze diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/dsl.rb new/lib/puma/dsl.rb --- old/lib/puma/dsl.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/dsl.rb 2018-01-19 20:23:10.000000000 +0100 @@ -110,9 +110,22 @@ @options[:config_files] << file end - # Bind the server to +url+. tcp:// and unix:// are the only accepted - # protocols. + # Adds a binding for the server to +url+. tcp://, unix://, and ssl:// are the only accepted + # protocols. Use query parameters within the url to specify options. # + # @note multiple urls can be bound to, calling `bind` does not overwrite previous bindings. + # + # @example Explicitly the socket backlog depth (default is 1024) + # bind('unix:///var/run/puma.sock?backlog=2048') + # + # @example Set up ssl cert + # bind('ssl://127.0.0.1:9292?key=key.key&cert=cert.pem') + # + # @example Prefer low-latency over higher throughput (via `Socket::TCP_NODELAY`) + # bind('tcp://0.0.0.0:9292?low_latency=true') + # + # @example Set socket permissions + # bind('unix:///var/run/puma.sock?umask=0111') def bind(url) @options[:binds] ||= [] @options[:binds] << url diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/minissl.rb new/lib/puma/minissl.rb --- old/lib/puma/minissl.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/minissl.rb 2018-01-19 20:23:10.000000000 +0100 @@ -58,6 +58,8 @@ else IO.select(nil, [@socket.to_io]) end + elsif !data + return nil else break end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/single.rb new/lib/puma/single.rb --- old/lib/puma/single.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/single.rb 2018-01-19 20:23:10.000000000 +0100 @@ -5,8 +5,8 @@ module Puma class Single < Runner def stats - b = @server.backlog - r = @server.running + b = @server.backlog || 0 + r = @server.running || 0 %Q!{ "backlog": #{b}, "running": #{r} }! end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/puma/thread_pool.rb new/lib/puma/thread_pool.rb --- old/lib/puma/thread_pool.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/puma/thread_pool.rb 2018-01-19 20:23:10.000000000 +0100 @@ -53,7 +53,7 @@ attr_accessor :clean_thread_locals def self.clean_thread_locals - Thread.current.keys.each do |key| + Thread.current.keys.each do |key| # rubocop: disable Performance/HashEachMethods Thread.current[key] = nil unless key == :__recursive_key__ end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/rack/handler/puma.rb new/lib/rack/handler/puma.rb --- old/lib/rack/handler/puma.rb 2017-11-20 17:26:13.000000000 +0100 +++ new/lib/rack/handler/puma.rb 2018-01-19 20:23:10.000000000 +0100 @@ -21,7 +21,7 @@ # contains an array of all explicitly defined user options. We then # know that all other values are defaults if user_supplied_options = options.delete(:user_supplied_options) - (options.keys - user_supplied_options).each do |k, v| + (options.keys - user_supplied_options).each do |k| default_options[k] = options.delete(k) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2017-11-20 17:26:13.000000000 +0100 +++ new/metadata 2018-01-19 20:23:10.000000000 +0100 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: puma version: !ruby/object:Gem::Version - version: 3.11.0 + version: 3.11.2 platform: ruby authors: - Evan Phoenix autorequire: bindir: bin cert_chain: [] -date: 2017-11-20 00:00:00.000000000 Z +date: 2018-01-19 00:00:00.000000000 Z dependencies: [] description: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications. Puma is intended for use in both development and production @@ -121,7 +121,7 @@ version: '0' requirements: [] rubyforge_project: -rubygems_version: 2.6.13 +rubygems_version: 2.6.8 signing_key: specification_version: 4 summary: Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for
