vkd3d-shader/dxbc: Validate component types in shader_parse_signature().

This commit is contained in:
Henri Verbeet
2025-02-05 17:38:21 +01:00
parent b8d740ebfc
commit f5d702b09a
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
2 changed files with 7 additions and 1 deletions

View File

@ -444,7 +444,12 @@ static int shader_parse_signature(const struct vkd3d_shader_dxbc_section_desc *s
}
e[i].semantic_index = read_u32(&ptr);
e[i].sysval_semantic = read_u32(&ptr);
e[i].component_type = read_u32(&ptr);
if ((e[i].component_type = read_u32(&ptr)) > VKD3D_SHADER_COMPONENT_FLOAT)
{
vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_DXBC_INVALID_COMPONENT_TYPE,
"Element %u has invalid component type %#x.\n", i, e[i].component_type);
fail = true;
}
e[i].register_index = read_u32(&ptr);
e[i].target_location = e[i].register_index;
e[i].register_count = 1;

View File

@ -75,6 +75,7 @@ enum vkd3d_shader_error
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_DXBC_INVALID_COMPONENT_TYPE = 10,
VKD3D_SHADER_ERROR_TPF_MISMATCHED_CF = 1000,
VKD3D_SHADER_ERROR_TPF_INVALID_REGISTER_RANGE = 1001,