Jelajahi Sumber

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

Tim Schumacher 2 tahun lalu
induk
melakukan
3fccf2481c

+ 3 - 0
Userland/Libraries/LibCore/Stream.cpp

@@ -82,6 +82,9 @@ ErrorOr<void> Stream::discard(size_t discarded_bytes)
     Array<u8, continuous_read_size> buffer;
 
     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))));
         discarded_bytes -= slice.size();
     }

+ 3 - 1
Userland/Libraries/LibCore/Stream.h

@@ -40,7 +40,9 @@ public:
     /// is returned once EOF is encountered. The block size determines the size
     /// of newly allocated chunks while reading.
     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
     /// internal stack-based buffer.
     virtual ErrorOr<void> discard(size_t discarded_bytes);