# See RFC 1867, 2183, 2045
# NB: File content will be loaded into memory should
# content-disposition parsing fail.
my ($filename) = $header{'Content-Disposition'}
=~/ filename=(("[^"]*")|([a-z\d!\#'\*\+,\.^_\`\{\}\|\~]*))/i;
$filename ||= ''; # quench uninit variable warning
$filename =~ s/^"([^"]*)"$/$1/;
####
my ( $param ) = $unfold =~ m/form-data;\s+name="?([^\";]*)"?/;
my ( $filename )
= $unfold =~ m/name="?\Q$param\E"?;\s+filename="?([^\"]*)"?/;
####
my $VAR1 = "POST http://localhost/cgi-bin/upload_quotes.pl\nContent-Length: 138\nContent-Type:".
" multipart/form-data; boundary=xYzZY\n\n--xYzZY\r\nContent-Disposition: form".
"-data; name=\"file\"; filename=\"stupid \\\"quoted\\\" filename.txt\"\r\n-Content:".
" stupid content\r\n\r\n\r\n--xYzZY--\r\n";
####
value := token / quoted-string
token := 1*
tspecials := "(" / ")" / "<" / ">" / "@"
/ "," / ";" / ":" / "\" / <">
/ "/" / "[" / "]" / "?" / "="
; Must be in quoted-string,
; to use within parameter values
####
FWS = ([*WSP CRLF] 1*WSP) / ; Folding white space
obs-FWS
ctext = NO-WS-CTL / ; Non white space controls
%d33-39 / ; The rest of the US-ASCII
%d42-91 / ; characters not including "(",
%d93-126 ; ")", or "\"
ccontent = ctext / quoted-pair / comment
comment = "(" *([FWS] ccontent) [FWS] ")"
CFWS = *([FWS] comment) (([FWS] comment) / FWS)
qtext = NO-WS-CTL / ; Non white space controls
%d33 / ; The rest of the US-ASCII
%d35-91 / ; characters not including "\"
%d93-126 ; or the quote character
qcontent = qtext / quoted-pair
quoted-string = [CFWS]
DQUOTE *([FWS] qcontent) [FWS] DQUOTE