Преглед изворни кода

Accept valid lsColJob reply XML content types

Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
Claudio Cambra пре 3 година
родитељ
комит
2b3efbfb2a
2 измењених фајлова са 19 додато и 8 уклоњено
  1. 11 5
      src/libsync/discoveryphase.cpp
  2. 8 3
      src/libsync/networkjobs.cpp

+ 11 - 5
src/libsync/discoveryphase.cpp

@@ -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();
 }

+ 8 - 3
src/libsync/networkjobs.cpp

@@ -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);