Module: Mail::Jdec::ContentDispositionElementPatch

Defined in:
lib/mail/jdec/elements/content_disposition_element_patch.rb

Instance Method Summary collapse

Instance Method Details

#initialize(string) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mail/jdec/elements/content_disposition_element_patch.rb', line 6

def initialize(string)
  if Jdec.enabled?
    # Remove extra trailing semicolon
    string = string.gsub(/;+$/, '')
    # Handles filename=test
    string = string.gsub(/filename\s*=\s*([^"]+?)\s*(;|$)/im) { %Q|filename="#{$1}"#{$2}| }
    # Handles filename=""test""
    string = string.gsub(/filename\s*=\s*"+([^"]+?)"+\s*(;|$)/im) { %Q|filename="#{$1}"#{$2}| }
    # Escape tspecial chars in RFC2231 filename
    string = string.gsub(/filename\*(\d*)(\*?)\s*=\s*(\S+?)'(\S*)'(\S+)(;|$)/i) { %Q|filename*#{$1}#{$2}=#{$3}'#{$4}'#{Escaper.escape($5)}#{$6}| }
    string = string.gsub(/filename\*(\d*)(\*?)\s*=\s*(\S+)(;|$)/i) { %Q|filename*#{$1}#{$2}=#{Escaper.escape($3)}#{$4}| }
  end

  super
rescue Mail::Field::ParseError => e
  if Jdec.enabled?
    @disposition_type = 'attachment'
    @parameters = ['filename' => Jdec::Decoder.force_utf8(string)]
  else
    raise e
  end
end