mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 18:28:12 +00:00
LibGfx/TIFF: Don't try to check non-existent values
We were previously only checking the first value, this is wrong for tags that accept multiple values (e.g. ExtraSamples) and can lead to crashes on malformed images containing tags with a count of 0.
This commit is contained in:
parent
d66a421757
commit
82d40aab18
1 changed files with 13 additions and 9 deletions
|
@ -407,15 +407,19 @@ def generate_tag_handler(tag: Tag) -> str:
|
|||
check_value = ''
|
||||
if tag.associated_enum is not None:
|
||||
not_in_value_list = f"({' && '.join([f'v != {v.value}' for v in tag.associated_enum])})"
|
||||
check_value = fR"""TRY(value[0].visit(
|
||||
[]({tiff_type_to_cpp(tag.types[0])} const& v) -> ErrorOr<void> {{
|
||||
if ({not_in_value_list})
|
||||
return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid value for tag {tag.name}");
|
||||
return {{}};
|
||||
}},
|
||||
[&](auto const&) -> ErrorOr<void> {{
|
||||
VERIFY_NOT_REACHED();
|
||||
}}));
|
||||
check_value = fR"""
|
||||
for (u32 i = 0; i < value.size(); ++i) {{
|
||||
TRY(value[i].visit(
|
||||
[]({tiff_type_to_cpp(tag.types[0])} const& v) -> ErrorOr<void> {{
|
||||
if ({not_in_value_list})
|
||||
return Error::from_string_literal("TIFFImageDecoderPlugin: Invalid value for tag {tag.name}");
|
||||
return {{}};
|
||||
}},
|
||||
[&](auto const&) -> ErrorOr<void> {{
|
||||
VERIFY_NOT_REACHED();
|
||||
}})
|
||||
);
|
||||
}}
|
||||
"""
|
||||
|
||||
output = fR""" case {tag.id}:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue