mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/dxbc: Output messages for invalid semantic name references in shader_parse_signature().
This commit is contained in:
Notes:
Henri Verbeet
2025-02-24 16:26:29 +01:00
Approved-by: Conor McCarthy (@cmccarthy) Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1371
@@ -381,7 +381,8 @@ static int shader_parse_signature(const struct vkd3d_shader_dxbc_section_desc *s
|
||||
uint32_t count, header_size;
|
||||
struct signature_element *e;
|
||||
const char *ptr = data;
|
||||
unsigned int i, j;
|
||||
bool fail = false;
|
||||
unsigned int i;
|
||||
|
||||
if (!require_space(0, 2, sizeof(uint32_t), section->data.size))
|
||||
{
|
||||
@@ -436,13 +437,10 @@ static int shader_parse_signature(const struct vkd3d_shader_dxbc_section_desc *s
|
||||
if (!(name = shader_get_string(data, section->data.size, name_offset))
|
||||
|| !(e[i].semantic_name = vkd3d_strdup(name)))
|
||||
{
|
||||
WARN("Invalid name offset %#zx (data size %#zx).\n", name_offset, section->data.size);
|
||||
for (j = 0; j < i; ++j)
|
||||
{
|
||||
vkd3d_free((void *)e[j].semantic_name);
|
||||
}
|
||||
vkd3d_free(e);
|
||||
return VKD3D_ERROR_INVALID_ARGUMENT;
|
||||
vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_DXBC_INVALID_STRING_REFERENCE,
|
||||
"Element %u has invalid semantic name reference %#zx (data size %#zx).\n",
|
||||
i, name_offset, section->data.size);
|
||||
fail = true;
|
||||
}
|
||||
e[i].semantic_index = read_u32(&ptr);
|
||||
e[i].sysval_semantic = read_u32(&ptr);
|
||||
@@ -480,6 +478,12 @@ static int shader_parse_signature(const struct vkd3d_shader_dxbc_section_desc *s
|
||||
s->elements_capacity = count;
|
||||
s->element_count = count;
|
||||
|
||||
if (fail)
|
||||
{
|
||||
shader_signature_cleanup(s);
|
||||
return VKD3D_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
return VKD3D_OK;
|
||||
}
|
||||
|
||||
|
@@ -74,6 +74,7 @@ enum vkd3d_shader_error
|
||||
VKD3D_SHADER_ERROR_DXBC_INVALID_CHUNK_SIZE = 6,
|
||||
VKD3D_SHADER_ERROR_DXBC_OUT_OF_MEMORY = 7,
|
||||
VKD3D_SHADER_ERROR_DXBC_INVALID_SIGNATURE = 8,
|
||||
VKD3D_SHADER_ERROR_DXBC_INVALID_STRING_REFERENCE = 9,
|
||||
|
||||
VKD3D_SHADER_ERROR_TPF_MISMATCHED_CF = 1000,
|
||||
VKD3D_SHADER_ERROR_TPF_INVALID_REGISTER_RANGE = 1001,
|
||||
|
Reference in New Issue
Block a user