From db5a3197b75c928bffb00a47c75f8db1c99f4256 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 6 Dec 2024 14:21:50 +0100 Subject: [PATCH] vkd3d-shader/ir: Validate the register index and count for signature elements. --- libs/vkd3d-shader/ir.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index a7bbcf8f..66cbfe1f 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -8061,6 +8061,12 @@ static void vsir_validate_signature_element(struct validation_context *ctx, validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE, "element %u of %s signature: Invalid zero register count.", idx, signature_type_name); + if (element->register_index != UINT_MAX && (element->register_index >= MAX_REG_OUTPUT + || MAX_REG_OUTPUT - element->register_index < element->register_count)) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE, + "element %u of %s signature: Invalid register index %u and count %u.", + idx, signature_type_name, element->register_index, element->register_count); + if (element->mask == 0 || (element->mask & ~0xf)) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE, "element %u of %s signature: Invalid mask %#x.", idx, signature_type_name, element->mask);