From 58786564e668f5bc271f71b1d602040ec2e57451 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 16 Dec 2022 15:28:36 +1300 Subject: [PATCH] Rework Multipart error classes. --- lib/rack/multipart/parser.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb index 3d4e0f9b9..995846947 100644 --- a/lib/rack/multipart/parser.rb +++ b/lib/rack/multipart/parser.rb @@ -7,7 +7,8 @@ module Rack module Multipart - class MultipartPartLimitError < Errno::EMFILE; + class MultipartPartLimitError < Errno::EMFILE + include BadRequest end # Use specific error class when parsing multipart request @@ -18,9 +19,13 @@ class EmptyContentError < ::EOFError # Base class for multipart exceptions that do not subclass from # other exception classes for backwards compatibility. - class Error < StandardError + class BoundaryTooLongError < StandardError + include BadRequest end + Error = BoundaryTooLongError + deprecate_constant :Error + EOL = "\r\n" MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/ @@ -101,7 +106,7 @@ def self.parse(io, content_length, content_type, tmpfile, bufsize, qp) if boundary.length > 70 # RFC 1521 Section 7.2.1 imposes a 70 character maximum for the boundary. # Most clients use no more than 55 characters. - raise Error, "multipart boundary size too large (#{boundary.length} characters)" + raise BoundaryTooLongError, "multipart boundary size too large (#{boundary.length} characters)" end io = BoundedIO.new(io, content_length) if content_length