vkd3d-shader/fx: Output error messages for invalid sizes.

This commit is contained in:
Henri Verbeet
2025-03-05 16:40:17 +01:00
parent 18ca7affad
commit a6fda3e65d
Notes: Henri Verbeet 2025-03-06 17:32:54 +01:00
Approved-by: Nikolay Sivov (@nsivov)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1402
2 changed files with 9 additions and 2 deletions

View File

@ -4376,7 +4376,8 @@ static int fx_4_parse(struct fx_parser *parser)
if (parser->end - parser->ptr < header.unstructured_size) if (parser->end - parser->ptr < header.unstructured_size)
{ {
parser->failed = true; fx_parser_error(parser, VKD3D_SHADER_ERROR_FX_INVALID_SIZE,
"Invalid unstructured data size %u.", header.unstructured_size);
return -1; return -1;
} }
@ -4432,7 +4433,8 @@ static int fx_5_parse(struct fx_parser *parser)
if (parser->end - parser->ptr < header.unstructured_size) if (parser->end - parser->ptr < header.unstructured_size)
{ {
parser->failed = true; fx_parser_error(parser, VKD3D_SHADER_ERROR_FX_INVALID_SIZE,
"Invalid unstructured data size %u.", header.unstructured_size);
return -1; return -1;
} }
@ -4465,7 +4467,11 @@ int fx_parse(const struct vkd3d_shader_compile_info *compile_info,
vkd3d_string_buffer_init(&parser.buffer); vkd3d_string_buffer_init(&parser.buffer);
if (parser.end - parser.start < sizeof(version)) if (parser.end - parser.start < sizeof(version))
{
fx_parser_error(&parser, VKD3D_SHADER_ERROR_FX_INVALID_SIZE,
"Source size %zu is smaller than the FX header size.", compile_info->source.size);
return -1; return -1;
}
version = *(uint32_t *)parser.ptr; version = *(uint32_t *)parser.ptr;
switch (version) switch (version)

View File

@ -263,6 +263,7 @@ enum vkd3d_shader_error
VKD3D_SHADER_ERROR_FX_NOT_IMPLEMENTED = 11000, VKD3D_SHADER_ERROR_FX_NOT_IMPLEMENTED = 11000,
VKD3D_SHADER_ERROR_FX_INVALID_VERSION = 11001, VKD3D_SHADER_ERROR_FX_INVALID_VERSION = 11001,
VKD3D_SHADER_ERROR_FX_INVALID_DATA = 11002, VKD3D_SHADER_ERROR_FX_INVALID_DATA = 11002,
VKD3D_SHADER_ERROR_FX_INVALID_SIZE = 11003,
}; };
enum vkd3d_shader_opcode enum vkd3d_shader_opcode