Git commit 34004429f2fb878d091e2fab07970dadae78cb2e by Maks Orlovich. Committed on 06/03/2011 at 17:10. Pushed by orlovich into branch 'master'. kmulti[part: Adjusted the -- stripping quirk to not break on W3c bugzilla The use in that bugzilla does not need a bogus -- removed, as its -- is actually accurate, and properly quoted. So, we don't handle -- quirkily in the quoted case, and pass down the quotedness from kio_http M +14 -1 khtml/kmultipart/kmultipart.cpp M +1 -0 kio/DESIGN.metadata M +6 -0 kioslave/http/http.cpp http://commits.kde.org/kdelibs/34004429f2fb878d091e2fab07970dadae78cb2e diff --git a/khtml/kmultipart/kmultipart.cpp b/khtml/kmultipart/kmultipart.cpp index 85ef2ee..a943806 100644 --- a/khtml/kmultipart/kmultipart.cpp +++ b/khtml/kmultipart/kmultipart.cpp @@ -202,7 +202,20 @@ void KMultiPart::slotData( KIO::Job *job, const QByteArray &data ) QString tmp = job->queryMetaData("media-boundary"); kDebug() << "Got Boundary from kio-http '" << tmp << "'"; if ( !tmp.isEmpty() ) { - if (tmp.startsWith(QLatin1String("--"))) + // as per r437578, sometimes we se something like this: + // Content-Type: multipart/x-mixed-replace; boundary=--myboundary + // .. + // --myboundary + // e.g. the hashes specified in the header are extra. However, + // we also see the following on the w3c bugzilla: + // boundary="------- =_aaaaaaaaaa0" + // .. + //--------- =_aaaaaaaaaa0 + // e.g. the hashes are accurate. For now, we consider the quoted + // case to be quirk-free, and only apply the -- stripping quirk + // when we're unquoted. + if (tmp.startsWith(QLatin1String("--")) && + job->queryMetaData("media-boundary-kio-quoted") != "true") m_boundary = tmp.toLatin1(); else m_boundary = QByteArray("--")+tmp.toLatin1(); diff --git a/kio/DESIGN.metadata b/kio/DESIGN.metadata index c34347d..f5dfcd1 100644 --- a/kio/DESIGN.metadata +++ b/kio/DESIGN.metadata @@ -38,6 +38,7 @@ UserAgent string The user agent name to send to remote host (read content-type string The content type of the data to be uploaded (read and set by http) media-* string Media-Parameter attributes (e.g. media-boundary) +media-*-kio-quoted bool The corresponding media- attribute's value was quoted. (set by http) cache "cache" Use entry from cache if available. "cacheonly" Do not do any remote lookups, fail if not in cache. (read by http) diff --git a/kioslave/http/http.cpp b/kioslave/http/http.cpp index 1654dfc..82009f7 100644 --- a/kioslave/http/http.cpp +++ b/kioslave/http/http.cpp @@ -3064,7 +3064,9 @@ endParsing: mediaAttribute = mediaAttribute.trimmed(); mediaValue = mediaValue.trimmed(); + bool quoted = false; if (mediaValue.startsWith(QLatin1Char('"'))) { + quoted = true; mediaValue.remove(QLatin1Char('"')); } @@ -3080,6 +3082,10 @@ endParsing: setMetaData(QLatin1String("charset"), mediaValue); } else { setMetaData(QLatin1String("media-") + mediaAttribute, mediaValue); + if (quoted) { + setMetaData(QLatin1String("media-") + mediaAttribute + QLatin1String("-kio-quoted"), + QLatin1String("true")); + } } } }