Kaynağa Gözat

AK+LibCompress: Break when seekback copying to a full CircularBuffer

Otherwise, we just end up infinitely looping while waiting for more
space in the destination.
Tim Schumacher 2 yıl önce
ebeveyn
işleme
b88c58b94c

+ 3 - 0
AK/CircularBuffer.cpp

@@ -213,6 +213,9 @@ ErrorOr<size_t> CircularBuffer::copy_from_seekback(size_t distance, size_t lengt
 
     auto remaining_length = length;
     while (remaining_length > 0) {
+        if (empty_space() == 0)
+            break;
+
         auto next_span = next_read_span_with_seekback(distance);
         if (next_span.size() == 0)
             break;

+ 4 - 1
Userland/Libraries/LibCompress/Deflate.cpp

@@ -208,7 +208,10 @@ ErrorOr<bool> DeflateDecompressor::CompressedBlock::try_read_more()
             m_decompressor.m_output_buffer.write({ &byte, sizeof(byte) });
         }
     } else {
-        TRY(m_decompressor.m_output_buffer.copy_from_seekback(distance, length));
+        auto copied_length = TRY(m_decompressor.m_output_buffer.copy_from_seekback(distance, length));
+
+        // TODO: What should we do if the output buffer is full?
+        VERIFY(copied_length == length);
     }
 
     return true;