diff options
author | Tomasz Duda <tomaszduda23@gmail.com> | 2012-09-19 17:42:11 (GMT) |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-25 13:35:09 (GMT) |
commit | 872d6aff3ea96d548e0bad99def669b803368a36 (patch) | |
tree | 6a7fdcbc26fab50bf0ba81b2bd47516a5fb09481 /src/network | |
parent | 87cd2d3530dfd3d7dc78b7dab50aefde87ca3b16 (diff) | |
download | Qt-872d6aff3ea96d548e0bad99def669b803368a36.zip Qt-872d6aff3ea96d548e0bad99def669b803368a36.tar.gz Qt-872d6aff3ea96d548e0bad99def669b803368a36.tar.bz2 |
HTTP header may be damaged - fix, unit test
"HTTP/1.1 100 CONTINUE\r\n"
If the header from a server is splitted between two packets
the first packet contains "HTTP/1.1 100" and the second one
contains " CONTINUE\r\n", one space (0x20) is skipped. After
processing the line looks in this way "HTTP/1.1 100CONTINUE".
QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket)
is called twice, if a http header is splitted as above.
The function always removes whitespace from the beginning of a packet,
even if it is the second part of a http header
QHttpNetworkReply returns QNetworkReply::RemoteHostClosedError
due to damaged http header during processing.
Task-number: QTBUG-27161
Backported qtbase/60f4fc8b706db9cbeacd5dc4886a7aa347daafc0
Change-Id: I07ec43641bbb9966285a8a1f57a51fb27d2643d4
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/access/qhttpnetworkreply.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 03ac2b2..759d5ab 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -517,7 +517,7 @@ qint64 QHttpNetworkReplyPrivate::readStatus(QAbstractSocket *socket) return -1; // unexpected EOF else if (haveRead == 0) break; // read more later - else if (haveRead == 1 && bytes == 0 && (c == 11 || c == '\n' || c == '\r' || c == ' ' || c == 31)) + else if (haveRead == 1 && fragment.size() == 0 && (c == 11 || c == '\n' || c == '\r' || c == ' ' || c == 31)) continue; // Ignore all whitespace that was trailing froma previous request on that socket bytes++; |