summaryrefslogtreecommitdiff
path: root/lib/rack
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rack')
-rw-r--r--lib/rack/bad_request.rb6
-rw-r--r--lib/rack/multipart.rb3
-rw-r--r--lib/rack/multipart/parser.rb18
-rw-r--r--lib/rack/query_parser.rb14
4 files changed, 34 insertions, 7 deletions
diff --git a/lib/rack/bad_request.rb b/lib/rack/bad_request.rb
new file mode 100644
index 00000000..9c675126
--- /dev/null
+++ b/lib/rack/bad_request.rb
@@ -0,0 +1,6 @@
+module Rack
+ # Represents a 400 Bad Request error when input data fails to meet the
+ # requirements.
+ module BadRequest
+ end
+end
diff --git a/lib/rack/multipart.rb b/lib/rack/multipart.rb
index 76b25a51..165b4db3 100644
--- a/lib/rack/multipart.rb
+++ b/lib/rack/multipart.rb
@@ -6,6 +6,8 @@ require_relative 'utils'
require_relative 'multipart/parser'
require_relative 'multipart/generator'
+require_relative 'bad_request'
+
module Rack
# A multipart form data parser, adapted from IOWA.
#
@@ -14,6 +16,7 @@ module Rack
MULTIPART_BOUNDARY = "AaB03x"
class MissingInputError < StandardError
+ include BadRequest
end
class << self
diff --git a/lib/rack/multipart/parser.rb b/lib/rack/multipart/parser.rb
index ceafbc6b..c49c80e6 100644
--- a/lib/rack/multipart/parser.rb
+++ b/lib/rack/multipart/parser.rb
@@ -3,18 +3,28 @@
require 'strscan'
require_relative '../utils'
+require_relative '../bad_request'
module Rack
module Multipart
- class MultipartPartLimitError < Errno::EMFILE; end
+ class MultipartPartLimitError < Errno::EMFILE
+ include BadRequest
+ end
# Use specific error class when parsing multipart request
# that ends early.
- class EmptyContentError < ::EOFError; end
+ class EmptyContentError < ::EOFError
+ include BadRequest
+ end
# Base class for multipart exceptions that do not subclass from
# other exception classes for backwards compatibility.
- class Error < StandardError; end
+ class BoundaryTooLongError < StandardError
+ include BadRequest
+ end
+
+ # Prefer to use the BoundaryTooLongError class or Rack::BadRequest.
+ Error = BoundaryTooLongError
EOL = "\r\n"
MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
@@ -96,7 +106,7 @@ module Rack
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
diff --git a/lib/rack/query_parser.rb b/lib/rack/query_parser.rb
index a89c4c7f..7c9621ed 100644
--- a/lib/rack/query_parser.rb
+++ b/lib/rack/query_parser.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require_relative 'bad_request'
+
module Rack
class QueryParser
DEFAULT_SEP = /[&] */n
@@ -7,16 +9,22 @@ module Rack
# ParameterTypeError is the error that is raised when incoming structural
# parameters (parsed by parse_nested_query) contain conflicting types.
- class ParameterTypeError < TypeError; end
+ class ParameterTypeError < TypeError
+ include BadRequest
+ end
# InvalidParameterError is the error that is raised when incoming structural
# parameters (parsed by parse_nested_query) contain invalid format or byte
# sequence.
- class InvalidParameterError < ArgumentError; end
+ class InvalidParameterError < ArgumentError
+ include BadRequest
+ end
# ParamsTooDeepError is the error that is raised when params are recursively
# nested over the specified limit.
- class ParamsTooDeepError < RangeError; end
+ class ParamsTooDeepError < RangeError
+ include BadRequest
+ end
def self.make_default(param_depth_limit)
new Params, param_depth_limit