mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 00:37:45 +00:00
Streams: Distinguish recoverable and fatal errors.
This commit is contained in:
parent
daeb2bdc60
commit
9ce4475907
9 changed files with 75 additions and 59 deletions
|
@ -204,7 +204,7 @@ size_t DeflateDecompressor::read(Bytes bytes)
|
|||
m_input_stream >> length >> negated_length;
|
||||
|
||||
if ((length ^ 0xffff) != negated_length) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ size_t DeflateDecompressor::read(Bytes bytes)
|
|||
bool DeflateDecompressor::read_or_error(Bytes bytes)
|
||||
{
|
||||
if (read(bytes) < bytes.size()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -287,7 +287,7 @@ bool DeflateDecompressor::discard_or_error(size_t count)
|
|||
size_t ndiscarded = 0;
|
||||
while (ndiscarded < count) {
|
||||
if (eof()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -371,7 +371,7 @@ void DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Optional<Can
|
|||
|
||||
auto code_length_code_result = CanonicalCode::from_bytes({ code_lengths_code_lengths, sizeof(code_lengths_code_lengths) });
|
||||
if (!code_length_code_result.has_value()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
const auto code_length_code = code_length_code_result.value();
|
||||
|
@ -399,7 +399,7 @@ void DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Optional<Can
|
|||
ASSERT(symbol == 16);
|
||||
|
||||
if (code_lengths.is_empty()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -410,7 +410,7 @@ void DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Optional<Can
|
|||
}
|
||||
|
||||
if (code_lengths.size() != literal_code_count + distance_code_count) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ void DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Optional<Can
|
|||
|
||||
auto literal_code_result = CanonicalCode::from_bytes(code_lengths.span().trim(literal_code_count));
|
||||
if (!literal_code_result.has_value()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
literal_code = literal_code_result.value();
|
||||
|
@ -431,14 +431,14 @@ void DeflateDecompressor::decode_codes(CanonicalCode& literal_code, Optional<Can
|
|||
if (length == 0) {
|
||||
return;
|
||||
} else if (length != 1) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
auto distance_code_result = CanonicalCode::from_bytes(code_lengths.span().slice(literal_code_count));
|
||||
if (!distance_code_result.has_value()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return;
|
||||
}
|
||||
distance_code = distance_code_result.value();
|
||||
|
|
|
@ -77,12 +77,12 @@ size_t GzipDecompressor::read(Bytes bytes)
|
|||
m_input_stream >> crc32 >> input_size;
|
||||
|
||||
if (crc32 != current_member().m_checksum.digest()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (input_size != current_member().m_nread) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ size_t GzipDecompressor::read(Bytes bytes)
|
|||
m_input_stream >> Bytes { &header, sizeof(header) };
|
||||
|
||||
if (!header.valid_magic_number() || !header.supported_by_implementation()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,7 @@ size_t GzipDecompressor::read(Bytes bytes)
|
|||
bool GzipDecompressor::read_or_error(Bytes bytes)
|
||||
{
|
||||
if (read(bytes) < bytes.size()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -143,7 +143,7 @@ bool GzipDecompressor::discard_or_error(size_t count)
|
|||
size_t ndiscarded = 0;
|
||||
while (ndiscarded < count) {
|
||||
if (eof()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
|
||||
while (nread < bytes.size() && !eof()) {
|
||||
if (m_file->has_error()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ public:
|
|||
bool read_or_error(Bytes bytes) override
|
||||
{
|
||||
if (read(bytes) < bytes.size()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
ndiscarded += read({ buffer, min<size_t>(count - ndiscarded, sizeof(buffer)) });
|
||||
|
||||
if (eof()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,7 @@ public:
|
|||
void close()
|
||||
{
|
||||
if (!m_file->close())
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -153,7 +153,7 @@ public:
|
|||
size_t write(ReadonlyBytes bytes) override
|
||||
{
|
||||
if (!m_file->write(bytes.data(), bytes.size())) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,7 @@ public:
|
|||
bool write_or_error(ReadonlyBytes bytes) override
|
||||
{
|
||||
if (write(bytes) < bytes.size()) {
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ public:
|
|||
void close()
|
||||
{
|
||||
if (!m_file->close())
|
||||
m_error = true;
|
||||
set_fatal_error();
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -66,9 +66,9 @@ void LineProgram::parse_source_directories()
|
|||
#endif
|
||||
m_source_directories.append(move(directory));
|
||||
}
|
||||
m_stream.handle_error();
|
||||
m_stream.handle_recoverable_error();
|
||||
m_stream.discard_or_error(1);
|
||||
ASSERT(!m_stream.handle_error());
|
||||
ASSERT(!m_stream.has_any_error());
|
||||
}
|
||||
|
||||
void LineProgram::parse_source_files()
|
||||
|
@ -88,7 +88,7 @@ void LineProgram::parse_source_files()
|
|||
m_source_files.append({ file_name, directory_index });
|
||||
}
|
||||
m_stream.discard_or_error(1);
|
||||
ASSERT(!m_stream.handle_error());
|
||||
ASSERT(!m_stream.has_any_error());
|
||||
}
|
||||
|
||||
void LineProgram::append_to_line_info()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue