Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-rack-2.2 for 
openSUSE:Factory checked in at 2023-03-14 18:17:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-rack-2.2 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-rack-2.2.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-rack-2.2"

Tue Mar 14 18:17:23 2023 rev:3 rq:1071430 version:2.2.6.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-rack-2.2/rubygem-rack-2.2.changes        
2023-01-23 18:33:50.052836870 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-rack-2.2.new.31432/rubygem-rack-2.2.changes 
    2023-03-14 18:17:26.567987773 +0100
@@ -1,0 +2,7 @@
+Mon Mar 13 15:43:57 UTC 2023 - Daniel Donisa <daniel.don...@suse.com>
+
+- updated to version 2.2.6.3
+
+  [CVE-2023-27530] Possible DoS Vulnerability in Multipart MIME parsing  
+
+-------------------------------------------------------------------

Old:
----
  rack-2.2.6.2.gem

New:
----
  rack-2.2.6.3.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-rack-2.2.spec ++++++
--- /var/tmp/diff_new_pack.DrwfhB/_old  2023-03-14 18:17:27.127990767 +0100
+++ /var/tmp/diff_new_pack.DrwfhB/_new  2023-03-14 18:17:27.135990810 +0100
@@ -24,18 +24,13 @@
 #
 
 Name:           rubygem-rack-2.2
-Version:        2.2.6.2
+Version:        2.2.6.3
 Release:        0
 %define mod_name rack
 %define mod_full_name %{mod_name}-%{version}
 %define mod_version_suffix -2.2
 # MANUAL
 BuildRequires:  fdupes
-
-%if 0%{?suse_version} && 0%{?suse_version} < 1330
-%define rb_build_versions ruby23 ruby24 ruby25
-%define rb_build_ruby_abi ruby:2.3.0 ruby:2.4.0 ruby:2.5.0
-%endif
 # /MANUAL
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  %{ruby >= 2.3.0}

++++++ gem2rpm.yml ++++++
--- /var/tmp/diff_new_pack.DrwfhB/_old  2023-03-14 18:17:27.171991002 +0100
+++ /var/tmp/diff_new_pack.DrwfhB/_new  2023-03-14 18:17:27.175991023 +0100
@@ -8,11 +8,6 @@
 :preamble: |-
   BuildRequires:  fdupes
 
-  %if 0%{?suse_version} && 0%{?suse_version} < 1330
-  %define rb_build_versions ruby23 ruby24 ruby25
-  %define rb_build_ruby_abi ruby:2.3.0 ruby:2.4.0 ruby:2.5.0
-  %endif
-
 :post_install: |-
   %fdupes %{buildroot}%{_libdir}/ruby/gems/*/gems/%{mod_name}-%{version}/
 

++++++ rack-2.2.6.2.gem -> rack-2.2.6.3.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2023-01-17 22:22:12.000000000 +0100
+++ new/CHANGELOG.md    2023-03-02 23:55:39.000000000 +0100
@@ -2,6 +2,10 @@
 
 All notable changes to this project will be documented in this file. For info 
on how to format all future additions to this file please reference [Keep A 
Changelog](https://keepachangelog.com/en/1.0.0/).
 
+## [2.2.6.3] - 2023-03-02
+
+- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts
+
 ## [2.2.6.2] - 2022-01-17
 
 - [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.rdoc new/README.rdoc
--- old/README.rdoc     2023-01-17 22:22:12.000000000 +0100
+++ new/README.rdoc     2023-03-02 23:55:39.000000000 +0100
@@ -202,16 +202,30 @@
 
 Defaults to 100.
 
-=== multipart_part_limit
+=== multipart_file_limit
 
-The maximum number of parts a request can contain.
+The maximum number of parts with a filename a request can contain.
 Accepting too many part can lead to the server running out of file handles.
 
 The default is 128, which means that a single request can't upload more than 
128 files at once.
 
 Set to 0 for no limit.
 
-Can also be set via the +RACK_MULTIPART_PART_LIMIT+ environment variable.
+Can also be set via the +RACK_MULTIPART_FILE_LIMIT+ environment variable.
+
+(This is also aliased as +multipart_part_limit+ and 
+RACK_MULTIPART_PART_LIMIT+ for compatibility)
+
+=== multipart_total_part_limit
+
+The maximum total number of parts a request can contain of any type, including
+both file and non-file form fields.
+
+The default is 4096, which means that a single request can't contain more than
+4096 parts.
+
+Set to 0 for no limit.
+
+Can also be set via the +RACK_MULTIPART_TOTAL_PART_LIMIT+ environment variable.
 
 == Changelog
 
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rack/multipart/parser.rb 
new/lib/rack/multipart/parser.rb
--- old/lib/rack/multipart/parser.rb    2023-01-17 22:22:12.000000000 +0100
+++ new/lib/rack/multipart/parser.rb    2023-03-02 23:55:39.000000000 +0100
@@ -5,6 +5,7 @@
 module Rack
   module Multipart
     class MultipartPartLimitError < Errno::EMFILE; end
+    class MultipartTotalPartLimitError < StandardError; end
 
     class Parser
       (require_relative '../core_ext/regexp'; using ::Rack::RegexpExtensions) 
if RUBY_VERSION < '2.4'
@@ -140,7 +141,7 @@
 
           @mime_parts[mime_index] = klass.new(body, head, filename, 
content_type, name)
 
-          check_open_files
+          check_part_limits
         end
 
         def on_mime_body(mime_index, content)
@@ -152,13 +153,23 @@
 
         private
 
-        def check_open_files
-          if Utils.multipart_part_limit > 0
-            if @open_files >= Utils.multipart_part_limit
+        def check_part_limits
+          file_limit = Utils.multipart_file_limit
+          part_limit = Utils.multipart_total_part_limit
+
+          if file_limit && file_limit > 0
+            if @open_files >= file_limit
               @mime_parts.each(&:close)
               raise MultipartPartLimitError, 'Maximum file multiparts in 
content reached'
             end
           end
+
+          if part_limit && part_limit > 0
+            if @mime_parts.size >= part_limit
+              @mime_parts.each(&:close)
+              raise MultipartTotalPartLimitError, 'Maximum total multiparts in 
content reached'
+            end
+          end
         end
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rack/utils.rb new/lib/rack/utils.rb
--- old/lib/rack/utils.rb       2023-01-17 22:22:12.000000000 +0100
+++ new/lib/rack/utils.rb       2023-03-02 23:55:39.000000000 +0100
@@ -58,13 +58,24 @@
     end
 
     class << self
-      attr_accessor :multipart_part_limit
+      attr_accessor :multipart_total_part_limit
+
+      attr_accessor :multipart_file_limit
+
+      # multipart_part_limit is the original name of multipart_file_limit, but
+      # the limit only counts parts with filenames.
+      alias multipart_part_limit multipart_file_limit
+      alias multipart_part_limit= multipart_file_limit=
     end
 
-    # The maximum number of parts a request can contain. Accepting too many 
part
-    # can lead to the server running out of file handles.
+    # The maximum number of file parts a request can contain. Accepting too
+    # many parts can lead to the server running out of file handles.
     # Set to `0` for no limit.
-    self.multipart_part_limit = (ENV['RACK_MULTIPART_PART_LIMIT'] || 128).to_i
+    self.multipart_file_limit = (ENV['RACK_MULTIPART_PART_LIMIT'] || 
ENV['RACK_MULTIPART_FILE_LIMIT'] || 128).to_i
+
+    # The maximum total number of parts a request can contain. Accepting too
+    # many can lead to excessive memory use and parsing time.
+    self.multipart_total_part_limit = (ENV['RACK_MULTIPART_TOTAL_PART_LIMIT'] 
|| 4096).to_i
 
     def self.param_depth_limit
       default_query_parser.param_depth_limit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rack/version.rb new/lib/rack/version.rb
--- old/lib/rack/version.rb     2023-01-17 22:22:12.000000000 +0100
+++ new/lib/rack/version.rb     2023-03-02 23:55:39.000000000 +0100
@@ -20,7 +20,7 @@
     VERSION.join(".")
   end
 
-  RELEASE = "2.2.6.2"
+  RELEASE = "2.2.6.3"
 
   # Return the Rack release as a dotted string.
   def self.release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2023-01-17 22:22:12.000000000 +0100
+++ new/metadata        2023-03-02 23:55:39.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: rack
 version: !ruby/object:Gem::Version
-  version: 2.2.6.2
+  version: 2.2.6.3
 platform: ruby
 authors:
 - Leah Neukirchen
 autorequire:
 bindir: bin
 cert_chain: []
-date: 2023-01-17 00:00:00.000000000 Z
+date: 2023-03-02 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: minitest
@@ -184,7 +184,7 @@
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
-rubygems_version: 3.5.0.dev
+rubygems_version: 3.4.1
 signing_key:
 specification_version: 4
 summary: A modular Ruby webserver interface.

Reply via email to