From dc8333067f060692a8dedad43c45d7c6b171a9f8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 22 Jun 2019 23:10:05 +0200 Subject: [PATCH] CHttpJob: Block until we can actually read during State::InBody. Also move to State::Finished once we've received >= Content-Length. --- LibCore/CHttpJob.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/LibCore/CHttpJob.cpp b/LibCore/CHttpJob.cpp index e580fd87c2..5787dbebfc 100644 --- a/LibCore/CHttpJob.cpp +++ b/LibCore/CHttpJob.cpp @@ -78,6 +78,9 @@ void CHttpJob::on_socket_connected() continue; } ASSERT(m_state == State::InBody); + while (!m_socket->can_read()) + usleep(1); + ASSERT(m_socket->can_read()); auto payload = m_socket->receive(PAGE_SIZE); if (!payload) { if (m_socket->eof()) { @@ -87,6 +90,12 @@ void CHttpJob::on_socket_connected() return deferred_invoke([this](auto&) { did_fail(CNetworkJob::Error::ProtocolFailed); }); } buffer.append(payload.pointer(), payload.size()); + + bool ok; + if (buffer.size() >= m_headers.get("Content-Length").to_int(ok) && ok) { + m_state = State::Finished; + break; + } } auto response = CHttpResponse::create(m_code, move(m_headers), ByteBuffer::copy(buffer.data(), buffer.size()));