Skip to content

Commit

Permalink
Start updating definitions for RFC 2231
Browse files Browse the repository at this point in the history
  • Loading branch information
sigmavirus24 committed Jun 13, 2015
1 parent c7d291f commit b3e90ed
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion lib/rack/multipart.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,26 @@ module Multipart
MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
DISPPARM = /;\s*(#{TOKEN})=("(?:\\"|[^"])*"|#{TOKEN})/
VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
RFC2183 = /^#{CONDISP}(#{DISPPARM})+$/i
BROKEN_QUOTED = /^#{CONDISP}.*;\sfilename="(.*?)"(?:\s*$|\s*;\s*#{TOKEN}=)/i
BROKEN_UNQUOTED = /^#{CONDISP}.*;\sfilename=(#{TOKEN})/i
MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:.*\s+name="?([^\";]*)"?/ni
MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
# Updated definitions from RFC 2231
ATTRIBUTE_CHAR = %r{[^ \t)(><@,;:\\"/\[\]?=]}
ATTRIBUTE = /#{ATTRIBUTE_CHAR}+/
SECTION = /(\*0|\*\d+)/
REGULAR_PARAMETER_NAME = /#{ATTRIBUTE}(#{SECTION})?/
REGULAR_PARAMETER = /(#{REGULAR_PARAMETER_NAME})=(#{VALUE})/
EXTENDED_OTHER_NAME = /(#{ATTRIBUTE})(\*\d+)\*/
EXTENDED_OTHER_VALUE = /(%[0-9a-fA-F]{2}|#{ATTRIBUTE_CHAR})/
EXTENDED_INITIAL_NAME = /(#{ATTRIBUTE})(\*0)?\*/
EXTENDED_INITIAL_VALUE = /([a-zA-Z0-9\-]+)?'([a-zA-Z0-9\-]+)?'(#{EXTENDED_OTHER_VALUE})/
EXTENDED_PARAMETER = /(#{EXTENDED_INITIAL_NAME}=#{EXTENDED_INITIAL_VALUE}|
#{EXTENDED_OTHER_NAME}=#{EXTENDED_OTHER_VALUE})/
DISPPARM = /;\s*(#{REGULAR_PARAMETER}|#{EXTENDED_PARAMETER})/

class << self
def parse_multipart(env, params = Rack::Utils.default_query_parser)
Expand Down

0 comments on commit b3e90ed

Please sign in to comment.