diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/http/http_content_disposition.cc | 16 | ||||
-rw-r--r-- | net/http/http_content_disposition_unittest.cc | 5 |
2 files changed, 16 insertions, 5 deletions
diff --git a/net/http/http_content_disposition.cc b/net/http/http_content_disposition.cc index 5ec09c9..52d9f4f 100644 --- a/net/http/http_content_disposition.cc +++ b/net/http/http_content_disposition.cc @@ -69,6 +69,7 @@ void HttpContentDisposition::Parse(const std::string& header, std::string::const_iterator end = header.end(); pos = ConsumeDispositionType(pos, end); + std::string name; std::string filename; std::string ext_filename; @@ -78,10 +79,10 @@ void HttpContentDisposition::Parse(const std::string& header, iter.name_end(), "filename")) { DecodeFilenameValue(iter.value(), referrer_charset, &filename); - } else if (filename.empty() && LowerCaseEqualsASCII(iter.name_begin(), - iter.name_end(), - "name")) { - DecodeFilenameValue(iter.value(), referrer_charset, &filename); + } else if (name.empty() && LowerCaseEqualsASCII(iter.name_begin(), + iter.name_end(), + "name")) { + DecodeFilenameValue(iter.value(), referrer_charset, &name); } else if (ext_filename.empty() && LowerCaseEqualsASCII(iter.name_begin(), iter.name_end(), "filename*")) { @@ -89,7 +90,12 @@ void HttpContentDisposition::Parse(const std::string& header, } } - filename_ = ext_filename.empty() ? filename : ext_filename; + if (!ext_filename.empty()) + filename_ = ext_filename; + else if (!filename.empty()) + filename_ = filename; + else + filename_ = name; } } // namespace net diff --git a/net/http/http_content_disposition_unittest.cc b/net/http/http_content_disposition_unittest.cc index 7587c3e..240c699 100644 --- a/net/http/http_content_disposition_unittest.cc +++ b/net/http/http_content_disposition_unittest.cc @@ -147,6 +147,11 @@ TEST(HttpContentDispositionTest, Filename) { {"attachment; filename*=windows-1252''caf%E9.png", "", L"caf\x00e9.png"}, + // Multiple filename, filename*, name parameters specified. + {"attachment; name=\"foo\"; filename=\"bar\"", "", L"bar"}, + {"attachment; filename=\"bar\"; name=\"foo\"", "", L"bar"}, + {"attachment; filename=\"bar\"; filename*=utf-8''baz", "", L"baz"}, + // http://greenbytes.de/tech/tc2231/ filename* test cases. // attwithisofn2231iso {"attachment; filename*=iso-8859-1''foo-%E4.html", "", |