From 1f40ed553e618c3b0511c7db4b4fd26c2d2b65bf Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Thu, 25 Jul 2013 12:05:29 -0400 Subject: [PATCH] QHttpMultiPart: fix data corruption in readData method When readData() is called repeatedly, we need to keep track which part of the multipart message we are currently reading from. Hereby we also need to take the boundary size into account, and not only the size of the multipart; otherwise we would skip a not completely read part. This would then later lead to advancing the read pointer by negative indexes and data loss. Upstream-Status: Accepted [https://codereview.qt-project.org/#change,61861] Signed-off-by: Jonathan Liu Task-number: QTBUG-32534 Change-Id: Ibb6dff16adaf4ea67181d23d1d0c8459e33a0ed0 Reviewed-by: Jonathan Liu Reviewed-by: Shane Kearns (cherry picked from qtbase/af96c6fed931564c95037539f07e9c8e33c69529) Reviewed-by: Thiago Macieira --- src/network/access/qhttpmultipart.cpp | 3 +- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 44 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpmultipart.cpp b/src/network/access/qhttpmultipart.cpp index 635129a..b25e917 100644 --- a/src/network/access/qhttpmultipart.cpp +++ b/src/network/access/qhttpmultipart.cpp @@ -488,7 +488,8 @@ qint64 QHttpMultiPartIODevice::readData(char *data, qint64 maxSize) // skip the parts we have already read while (index < multiPart->parts.count() && - readPointer >= partOffsets.at(index) + multiPart->parts.at(index).d->size()) + readPointer >= partOffsets.at(index) + multiPart->parts.at(index).d->size() + + multiPart->boundary.count() + 6) // 6 == 2 boundary dashes, \r\n after boundary, \r\n after multipart index++; // read the data -- 1.8.3.4