From 922cb47a4b592dfa194a8eac33f5161d05687895 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 28 Mar 2025 10:58:16 +0100 Subject: [PATCH] vkd3d-shader/ir: Validate descriptor counts in vsir programs. --- libs/vkd3d-shader/ir.c | 6 ++++++ libs/vkd3d-shader/vkd3d_shader_private.h | 1 + 2 files changed, 7 insertions(+) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index bead481a4..ed7d030d8 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -8887,6 +8887,12 @@ static void vsir_validate_descriptors(struct validation_context *ctx) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DATA_TYPE, "Descriptor %u has invalid resource data type %#x for descriptor type %#x.", i, descriptor->resource_data_type, descriptor->type); + + if (!descriptor->count || (descriptor->count > UINT_MAX - descriptor->register_index + && descriptor->count != UINT_MAX)) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_COUNT, + "Descriptor %u has invalid descriptor count %u starting at index %u.", + i, descriptor->count, descriptor->register_index); } } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 2b8ec09de..833fed808 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -261,6 +261,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_VSIR_INVALID_RANGE = 9023, VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_TYPE = 9024, VKD3D_SHADER_ERROR_VSIR_INVALID_RESOURCE_TYPE = 9025, + VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_COUNT = 9026, VKD3D_SHADER_WARNING_VSIR_DYNAMIC_DESCRIPTOR_ARRAY = 9300,