1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 17:35:08 +00:00

LibHTTP: Handle running out of input between chunk body and ending CRLF

Fixes an issue where LibHTTP would incorrectly detect an end of stream
when it runs out of TLS application data between the chunk body and its
ending CRLF.
This commit is contained in:
AnotherTest 2021-04-12 00:47:33 +04:30 committed by Andreas Kling
parent d7f947b7ca
commit 7c98a6be17
2 changed files with 12 additions and 4 deletions

View file

@ -242,6 +242,11 @@ void Job::on_socket_connected()
if (remaining == -1) {
// read size
auto size_data = read_line(PAGE_SIZE);
if (m_should_read_chunk_ending_line) {
VERIFY(size_data.is_empty());
m_should_read_chunk_ending_line = false;
return IterationDecision::Continue;
}
auto size_lines = size_data.view().lines();
dbgln_if(JOB_DEBUG, "Job: Received a chunk with size '{}'", size_data);
if (size_lines.size() == 0) {
@ -327,10 +332,12 @@ void Job::on_socket_connected()
// we've read everything, now let's get the next chunk
size = -1;
[[maybe_unused]] auto line = read_line(PAGE_SIZE);
if constexpr (JOB_DEBUG)
dbgln("Line following (should be empty): '{}'", line);
if (can_read_line()) {
auto line = read_line(PAGE_SIZE);
VERIFY(line.is_empty());
} else {
m_should_read_chunk_ending_line = true;
}
}
m_current_chunk_remaining_size = size;
}