1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:47:35 +00:00

LibCore: Make not discarding all requested bytes from a stream an error

This commit is contained in:
Tim Schumacher 2022-12-11 19:47:49 +01:00 committed by Andreas Kling
parent 9a3e95785e
commit 3fccf2481c
2 changed files with 6 additions and 1 deletions

View file

@ -82,6 +82,9 @@ ErrorOr<void> Stream::discard(size_t discarded_bytes)
Array<u8, continuous_read_size> buffer; Array<u8, continuous_read_size> buffer;
while (discarded_bytes > 0) { while (discarded_bytes > 0) {
if (is_eof())
return Error::from_string_literal("Reached end-of-file before reading all discarded bytes");
auto slice = TRY(read(buffer.span().slice(0, min(discarded_bytes, continuous_read_size)))); auto slice = TRY(read(buffer.span().slice(0, min(discarded_bytes, continuous_read_size))));
discarded_bytes -= slice.size(); discarded_bytes -= slice.size();
} }

View file

@ -40,7 +40,9 @@ public:
/// is returned once EOF is encountered. The block size determines the size /// is returned once EOF is encountered. The block size determines the size
/// of newly allocated chunks while reading. /// of newly allocated chunks while reading.
virtual ErrorOr<ByteBuffer> read_until_eof(size_t block_size = 4096); virtual ErrorOr<ByteBuffer> read_until_eof(size_t block_size = 4096);
/// Discards the given number of bytes from the stream. /// Discards the given number of bytes from the stream. As this is usually used
/// as an efficient version of `read_entire_buffer`, it returns an error
/// if reading failed or if not all bytes could be discarded.
/// Unless specifically overwritten, this just uses read() to read into an /// Unless specifically overwritten, this just uses read() to read into an
/// internal stack-based buffer. /// internal stack-based buffer.
virtual ErrorOr<void> discard(size_t discarded_bytes); virtual ErrorOr<void> discard(size_t discarded_bytes);