Skip to content

Commit

Permalink
Accept valid lsColJob reply XML content types
Browse files Browse the repository at this point in the history
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
  • Loading branch information
claucambra committed Sep 12, 2022
1 parent a48aee9 commit 2b3efbf
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
16 changes: 11 additions & 5 deletions src/libsync/discoveryphase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -583,14 +583,20 @@ void DiscoverySingleDirectoryJob::lsJobFinishedWithoutErrorSlot()

void DiscoverySingleDirectoryJob::lsJobFinishedWithErrorSlot(QNetworkReply *r)
{
QString contentType = r->header(QNetworkRequest::ContentTypeHeader).toString();
int httpCode = r->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString msg = r->errorString();
const auto contentType = r->header(QNetworkRequest::ContentTypeHeader).toString();
const auto invalidContentType = !contentType.contains("application/xml; charset=utf-8") &&
!contentType.contains("application/xml; charset=\"utf-8\"") &&
!contentType.contains("text/xml; charset=utf-8") &&
!contentType.contains("text/xml; charset=\"utf-8\"");
const auto httpCode = r->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
auto msg = r->errorString();

qCWarning(lcDiscovery) << "LSCOL job error" << r->errorString() << httpCode << r->error();
if (r->error() == QNetworkReply::NoError
&& !contentType.contains("application/xml; charset=utf-8")) {

if (r->error() == QNetworkReply::NoError && invalidContentType) {
msg = tr("Server error: PROPFIND reply is not XML formatted!");
}

emit finished(HttpError{ httpCode, msg });
deleteLater();
}
Expand Down
11 changes: 8 additions & 3 deletions src/libsync/networkjobs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,9 +395,14 @@ bool LsColJob::finished()
qCInfo(lcLsColJob) << "LSCOL of" << reply()->request().url() << "FINISHED WITH STATUS"
<< replyStatusString();

QString contentType = reply()->header(QNetworkRequest::ContentTypeHeader).toString();
int httpCode = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (httpCode == 207 && contentType.contains("application/xml; charset=utf-8")) {
const auto contentType = reply()->header(QNetworkRequest::ContentTypeHeader).toString();
const auto httpCode = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
const auto validContentType = contentType.contains("application/xml; charset=utf-8") ||
contentType.contains("application/xml; charset=\"utf-8\"") ||
contentType.contains("text/xml; charset=utf-8") ||
contentType.contains("text/xml; charset=\"utf-8\"");

if (httpCode == 207 && validContentType) {
LsColXMLParser parser;
connect(&parser, &LsColXMLParser::directoryListingSubfolders,
this, &LsColJob::directoryListingSubfolders);
Expand Down

0 comments on commit 2b3efbf

Please sign in to comment.