1
Fork 0
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:
Lucas CHOLLET 2023-12-27 21:17:45 -05:00 committed by Andreas Kling
parent d66a421757
commit 82d40aab18

View file

@ -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}: