[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kio/kio
From:       Dawit Alemayehu <adawit () kde ! org>
Date:       2010-11-30 8:39:31
Message-ID: 20101130083931.107A3AC8A3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1202245 by adawit:

Fixed website breakage in kdewebkit based browsers caused by improper parsing of HTTP \
repsonse headers!

BUG:253851
BUG:253310


 M  +19 -16    accessmanagerreply_p.cpp  


--- trunk/KDE/kdelibs/kio/kio/accessmanagerreply_p.cpp #1202244:1202245
@@ -119,26 +119,29 @@
         // Set the raw header information...
         const QString headers = job->queryMetaData("HTTP-Headers");
         if (!headers.isEmpty()) {
-            QStringListIterator it (headers.split('\n'));
-            while (it.hasNext()) {
-                QStringList headerPair = it.next().split(QLatin1String(":"));
-                if (headerPair.size() < 2)
-                    continue;
+            const QStringList httpHeaders (headers.split('\n'));
+            Q_FOREACH(const QString& httpHeader, httpHeaders) {
+                int index = httpHeader.indexOf(QLatin1Char(':'));
+                if (index == -1)
+                   continue; // Ignore the HTTP status line...
+                const QString headerName = httpHeader.left(index);
+                QString headerValue = httpHeader.mid(index+1);
                 // Skip setting cookies since they are automatically handled by \
                kio_http...
-                if (headerPair.first().startsWith("set-cookie", \
Qt::CaseInsensitive)) +                if (headerName.startsWith("set-cookie", \
Qt::CaseInsensitive))  continue;
-                if (headerPair.first().startsWith("content-type", \
Qt::CaseInsensitive)) { +                if (headerName.startsWith("content-type", \
                Qt::CaseInsensitive)) {
                     const QString mimeType = \
                header(QNetworkRequest::ContentTypeHeader).toString();
-                    if (!headerPair.at(1).contains(mimeType, Qt::CaseInsensitive)) {
-                        const int index = \
headerPair.at(1).indexOf(QLatin1Char(';')); +                    if \
(!headerValue.contains(mimeType, Qt::CaseInsensitive)) { +                        \
index = headerValue.indexOf(QLatin1Char(';'));  if (index == -1)
-                            headerPair[1] = mimeType;
+                            headerValue = mimeType;
                         else
-                            headerPair[1].replace(0, index, mimeType);
+                            headerValue.replace(0, index, mimeType);
+                        kDebug(7044) << "Changed mime-type from" << mimeType << "to" \
<< headerValue;  }
                 }
-                //kDebug(7044) << "Adding header:" << headerPair.at(0) << ":" << \
                headerPair.at(1);
-                setRawHeader(headerPair.at(0).trimmed().toUtf8(), \
headerPair.at(1).trimmed().toUtf8()); +                kDebug(7044) << "Adding \
header:" << headerName << ":" << headerValue; +                \
setRawHeader(headerName.trimmed().toUtf8(), headerValue.trimmed().toUtf8());  }
         }
 
@@ -223,7 +226,7 @@
             kDebug(7044) << errcode;
     }
 
-    QUrl redirectUrl = \
attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); +    const QUrl \
redirectUrl = attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();  if \
(redirectUrl.isValid()) {  readHttpResponseHeaders(m_kioJob);
         //kDebug(7044) << "HTTP Status code:" << \
attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -236,10 +239,10 @@
     emit finished();
 }
 
-void AccessManagerReply::slotRedirection(KIO::Job* job, const KUrl& url)
+void AccessManagerReply::slotRedirection(KIO::Job* job, const KUrl& u)
 {
     Q_UNUSED(job);
-    setAttribute(QNetworkRequest::RedirectionTargetAttribute, QUrl(url));
+    setAttribute(QNetworkRequest::RedirectionTargetAttribute, QUrl(u));
 }
 
 void AccessManagerReply::slotPercent(KJob *job, unsigned long percent)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic