QHttpMultiPart: supply new line at the end of the body
authorPeter Hartmann <9qgm-76ea@xemaps.com>
Sun, 22 Apr 2012 19:20:27 +0000 (21:20 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 24 Apr 2012 23:57:14 +0000 (01:57 +0200)
... to conform to RFC 2046 (section 5.1.1). Apparently IIS had problems
without the new line.

Task-number: QTBUG-25429
Change-Id: Ia619bbdcebd407b2716bc467323634e4c8d77bcd
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
src/network/access/qhttpmultipart.cpp

index e24c060..27164d6 100644 (file)
@@ -456,7 +456,7 @@ qint64 QHttpMultiPartIODevice::size() const
             // and 2 bytes for the "\r\n" after the content
             currentSize += boundaryCount + 4 + multiPart->parts.at(a).d->size() + 2;
         }
-        currentSize += boundaryCount + 4; // size for ending boundary and 2 beginning and ending dashes
+        currentSize += boundaryCount + 6; // size for ending boundary, 2 beginning and ending dashes and "\r\n"
         deviceSize = currentSize;
     }
     return deviceSize;
@@ -527,7 +527,7 @@ qint64 QHttpMultiPartIODevice::readData(char *data, qint64 maxSize)
     }
     // check whether we need to return the final boundary
     if (bytesRead < maxSize && index == multiPart->parts.count()) {
-        QByteArray finalBoundary = "--" + multiPart->boundary + "--";
+        QByteArray finalBoundary = "--" + multiPart->boundary + "--\r\n";
         qint64 boundaryIndex = readPointer + finalBoundary.count() - size();
         qint64 lastBoundaryBytesRead = qMin(finalBoundary.count() - boundaryIndex, maxSize - bytesRead);
         memcpy(data + bytesRead, finalBoundary.constData() + boundaryIndex, lastBoundaryBytesRead);