mirror of https://github.com/aria2/aria2
2007-07-18 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that prevents filename in content-disposition from being retrieved when filename is not quoted. * src/Util.cc (getContentDispositionFilename) Fixed the bug that causes infinate loop and memory leak when file open operation failed. * src/HttpResponseCommand.cc (handleDefaultEncoding)pull/1/head
parent
18480a08df
commit
247b1f2a4f
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2007-07-18 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Fixed the bug that prevents filename in content-disposition from
|
||||||
|
being retrieved when filename is not quoted.
|
||||||
|
* src/Util.cc (getContentDispositionFilename)
|
||||||
|
|
||||||
|
Fixed the bug that causes infinate loop and memory leak when file open
|
||||||
|
operation failed.
|
||||||
|
* src/HttpResponseCommand.cc (handleDefaultEncoding)
|
||||||
|
|
||||||
2007-07-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2007-07-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Fixed the bug that causes segfault when all URIs specified are
|
Fixed the bug that causes segfault when all URIs specified are
|
||||||
|
|
|
@ -142,13 +142,18 @@ bool HttpResponseCommand::handleDefaultEncoding(const HttpResponseHandle& httpRe
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadCommand* command = 0;
|
DownloadCommand* command = 0;
|
||||||
File file(_requestGroup->getFilePath());
|
try {
|
||||||
if(_requestGroup->getRemainingUris().empty() && !file.exists()) {
|
File file(_requestGroup->getFilePath());
|
||||||
command = createHttpDownloadCommand(httpResponse);
|
if(_requestGroup->getRemainingUris().empty() && !file.exists()) {
|
||||||
|
command = createHttpDownloadCommand(httpResponse);
|
||||||
|
}
|
||||||
|
_requestGroup->loadAndOpenFile();
|
||||||
|
_requestGroup->prepareForNextAction(cuid, req, e, command);
|
||||||
|
e->noWait = true;
|
||||||
|
} catch(Exception* e) {
|
||||||
|
delete command;
|
||||||
|
throw;
|
||||||
}
|
}
|
||||||
_requestGroup->loadAndOpenFile();
|
|
||||||
_requestGroup->prepareForNextAction(cuid, req, e, command);
|
|
||||||
e->noWait = true;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
27
src/Util.cc
27
src/Util.cc
|
@ -111,9 +111,9 @@ string Util::llitos(int64_t value, bool comma)
|
||||||
return int2str<int64_t>(value, comma);
|
return int2str<int64_t>(value, comma);
|
||||||
}
|
}
|
||||||
|
|
||||||
string Util::trim(const string& src) {
|
string Util::trim(const string& src, const string& trimCharset) {
|
||||||
string::size_type sp = src.find_first_not_of("\r\n\t ");
|
string::size_type sp = src.find_first_not_of(trimCharset);
|
||||||
string::size_type ep = src.find_last_not_of("\r\n\t ");
|
string::size_type ep = src.find_last_not_of(trimCharset);
|
||||||
if(sp == string::npos || ep == string::npos) {
|
if(sp == string::npos || ep == string::npos) {
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
|
@ -459,16 +459,27 @@ void Util::unfoldRange(const string& src, Integers& range) {
|
||||||
}
|
}
|
||||||
|
|
||||||
string Util::getContentDispositionFilename(const string& header) {
|
string Util::getContentDispositionFilename(const string& header) {
|
||||||
string::size_type attributesp = header.find("filename=\"");
|
string keyName = "filename=";
|
||||||
|
string::size_type attributesp = header.find(keyName);
|
||||||
if(attributesp == string::npos) {
|
if(attributesp == string::npos) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
string::size_type filenamesp = attributesp+strlen("filename=\"");
|
string::size_type filenamesp = attributesp+strlen(keyName.c_str());
|
||||||
string::size_type filenameep = header.find("\"", filenamesp);
|
string::size_type filenameep;
|
||||||
if(filenameep == string::npos) {
|
if(filenamesp == header.size()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return trim(header.substr(filenamesp, filenameep-filenamesp));
|
|
||||||
|
if(header[filenamesp] == '\'' || header[filenamesp] == '"') {
|
||||||
|
char quoteChar = header[filenamesp];
|
||||||
|
filenameep = header.find(quoteChar, filenamesp+1);
|
||||||
|
} else {
|
||||||
|
filenameep = header.find(';', filenamesp);
|
||||||
|
}
|
||||||
|
if(filenameep == string::npos) {
|
||||||
|
filenameep = header.size();
|
||||||
|
}
|
||||||
|
return trim(header.substr(filenamesp, filenameep-filenamesp), "\r\n '\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_MESSAGE_DIGEST
|
#ifdef ENABLE_MESSAGE_DIGEST
|
||||||
|
|
|
@ -73,7 +73,7 @@ public:
|
||||||
*/
|
*/
|
||||||
static void slice(Strings& result, const string& src, char delim, bool trim = false);
|
static void slice(Strings& result, const string& src, char delim, bool trim = false);
|
||||||
|
|
||||||
static string trim(const string& src);
|
static string trim(const string& src, const string& trimCharset = "\r\n\t ");
|
||||||
|
|
||||||
static bool startsWith(const string& target, const string& part);
|
static bool startsWith(const string& target, const string& part);
|
||||||
|
|
||||||
|
|
|
@ -203,6 +203,28 @@ void UtilTest::testGetContentDispositionFilename() {
|
||||||
|
|
||||||
string h4 = "attachment;";
|
string h4 = "attachment;";
|
||||||
CPPUNIT_ASSERT_EQUAL(string(""), Util::getContentDispositionFilename(h4));
|
CPPUNIT_ASSERT_EQUAL(string(""), Util::getContentDispositionFilename(h4));
|
||||||
|
|
||||||
|
string h5 = "attachment; filename=aria2.tar.bz2";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2"), Util::getContentDispositionFilename(h5));
|
||||||
|
|
||||||
|
string h6 = "attachment; filename='aria2.tar.bz2'";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2"), Util::getContentDispositionFilename(h6));
|
||||||
|
|
||||||
|
string h7 = "attachment; filename='aria2.tar.bz2";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2"), Util::getContentDispositionFilename(h7));
|
||||||
|
|
||||||
|
string h8 = "attachment; filename=aria2.tar.bz2; creation-date=20 Jun 2007 00:00:00 GMT";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2"), Util::getContentDispositionFilename(h8));
|
||||||
|
|
||||||
|
string h9 = "attachment; filename=\"aria2.tar.bz2; creation-date=20 Jun 2007 00:00:00 GMT\"";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("aria2.tar.bz2; creation-date=20 Jun 2007 00:00:00 GMT"), Util::getContentDispositionFilename(h9));
|
||||||
|
|
||||||
|
string h10 = "attachment; filename=";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string(""), Util::getContentDispositionFilename(h10));
|
||||||
|
|
||||||
|
string h11 = "attachment; filename=;";
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string(""), Util::getContentDispositionFilename(h11));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Printer {
|
class Printer {
|
||||||
|
|
Loading…
Reference in New Issue