mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 15:07:45 +00:00
LibGfx/PortableFormat: Propagate errors from read_magic_number()
This commit is contained in:
parent
f96b61fdd8
commit
2356b48f13
1 changed files with 10 additions and 17 deletions
|
@ -72,40 +72,33 @@ static ErrorOr<void> read_comment(TContext& context)
|
|||
}
|
||||
|
||||
template<typename TContext>
|
||||
static bool read_magic_number(TContext& context)
|
||||
static ErrorOr<void> read_magic_number(TContext& context)
|
||||
{
|
||||
if (context.state >= TContext::State::MagicNumber) {
|
||||
return true;
|
||||
}
|
||||
if (context.state >= TContext::State::MagicNumber)
|
||||
return {};
|
||||
|
||||
if (context.stream->size().release_value_but_fixme_should_propagate_errors() < 2) {
|
||||
context.state = TContext::State::Error;
|
||||
if (TRY(context.stream->size()) < 2) {
|
||||
dbgln_if(PORTABLE_IMAGE_LOADER_DEBUG, "There is no enough data for {}", TContext::FormatDetails::image_type);
|
||||
return false;
|
||||
return Error::from_string_literal("There is no enough data to read magic number.");
|
||||
}
|
||||
|
||||
Array<u8, 2> magic_number {};
|
||||
if (context.stream->read_until_filled(Bytes { magic_number }).is_error()) {
|
||||
context.state = TContext::State::Error;
|
||||
dbgln_if(PORTABLE_IMAGE_LOADER_DEBUG, "We can't read magic number for {}", TContext::FormatDetails::image_type);
|
||||
return false;
|
||||
}
|
||||
TRY(context.stream->read_until_filled(Bytes { magic_number }));
|
||||
|
||||
if (magic_number[0] == 'P' && magic_number[1] == TContext::FormatDetails::ascii_magic_number) {
|
||||
context.type = TContext::Type::ASCII;
|
||||
context.state = TContext::State::MagicNumber;
|
||||
return true;
|
||||
return {};
|
||||
}
|
||||
|
||||
if (magic_number[0] == 'P' && magic_number[1] == TContext::FormatDetails::binary_magic_number) {
|
||||
context.type = TContext::Type::RAWBITS;
|
||||
context.state = TContext::State::MagicNumber;
|
||||
return true;
|
||||
return {};
|
||||
}
|
||||
|
||||
context.state = TContext::State::Error;
|
||||
dbgln_if(PORTABLE_IMAGE_LOADER_DEBUG, "Magic number is not valid for {}{}{}", magic_number[0], magic_number[1], TContext::FormatDetails::image_type);
|
||||
return false;
|
||||
return Error::from_string_literal("Unable to recognize magic bytes");
|
||||
}
|
||||
|
||||
template<typename TContext>
|
||||
|
@ -205,7 +198,7 @@ static bool decode(TContext& context)
|
|||
context.state = TContext::State::Error;
|
||||
});
|
||||
|
||||
if (!read_magic_number(context))
|
||||
if (read_magic_number(context).is_error())
|
||||
return false;
|
||||
|
||||
if (read_whitespace(context).is_error())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue