From a6fda3e65dfbf37a3c4776da9d39ef67741e4903 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 5 Mar 2025 16:40:17 +0100 Subject: [PATCH] vkd3d-shader/fx: Output error messages for invalid sizes. --- libs/vkd3d-shader/fx.c | 10 ++++++++-- libs/vkd3d-shader/vkd3d_shader_private.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/vkd3d-shader/fx.c b/libs/vkd3d-shader/fx.c index ff898e8f..1a64fc74 100644 --- a/libs/vkd3d-shader/fx.c +++ b/libs/vkd3d-shader/fx.c @@ -4376,7 +4376,8 @@ static int fx_4_parse(struct fx_parser *parser) 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; } @@ -4432,7 +4433,8 @@ static int fx_5_parse(struct fx_parser *parser) 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; } @@ -4465,7 +4467,11 @@ int fx_parse(const struct vkd3d_shader_compile_info *compile_info, vkd3d_string_buffer_init(&parser.buffer); 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; + } version = *(uint32_t *)parser.ptr; switch (version) diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 48176d85..3fe5959f 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -263,6 +263,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_FX_NOT_IMPLEMENTED = 11000, VKD3D_SHADER_ERROR_FX_INVALID_VERSION = 11001, VKD3D_SHADER_ERROR_FX_INVALID_DATA = 11002, + VKD3D_SHADER_ERROR_FX_INVALID_SIZE = 11003, }; enum vkd3d_shader_opcode