mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-31 05:09:12 +00:00
LibGfx/JBIG2: Reject unimplemented combination operators
In practice, everything uses white backgrounds and operators `or` or `xor` to turn them black, at least for the simple images we're about to be able to decode. To make sure we don't forget implementing this for real once needed, reject other ops, and also reject black backgrounds (because 1 | 0 is 1, not 0 like our overwrite implementation will produce). This means we have to remove a test, but since this scenario doesn't seem to happen in practice, that seems ok.
This commit is contained in:
parent
5dc9ead1c5
commit
b0c73d1652
Notes:
sideshowbarker
2024-07-17 06:45:52 +09:00
Author: https://github.com/nico
Commit: b0c73d1652
Pull-request: https://github.com/SerenityOS/serenity/pull/23594
2 changed files with 7 additions and 11 deletions
|
@ -846,6 +846,11 @@ static ErrorOr<void> decode_immediate_generic_region(JBIG2LoadingContext& contex
|
|||
|| information_field.y_location + information_field.height > (u32)context.page.size.height()) {
|
||||
return Error::from_string_literal("JBIG2ImageDecoderPlugin: Region bounds outsize of page bounds");
|
||||
}
|
||||
if (information_field.external_combination_operator() != RegionSegmentInformationField::CombinationOperator::Or
|
||||
&& information_field.external_combination_operator() != RegionSegmentInformationField::CombinationOperator::Xor
|
||||
&& information_field.external_combination_operator() != RegionSegmentInformationField::CombinationOperator::Replace)
|
||||
return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot handle external combination operator other than OR, XOR, and REPLACE yet");
|
||||
|
||||
for (size_t y = 0; y < information_field.height; ++y) {
|
||||
for (size_t x = 0; x < information_field.width; ++x) {
|
||||
// FIXME: Honor segment's combination operator instead of just copying.
|
||||
|
@ -904,6 +909,8 @@ static ErrorOr<void> decode_page_information(JBIG2LoadingContext& context, Segme
|
|||
context.page.bits = TRY(BitBuffer::create(page_information.bitmap_width, height));
|
||||
|
||||
// "3) Fill the page buffer with the page's default pixel value."
|
||||
if (default_color == 1)
|
||||
return Error::from_string_literal("JBIG2ImageDecoderPlugin: Can only handle white default color for now");
|
||||
context.page.bits->fill(default_color != 0);
|
||||
|
||||
return {};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue