From 06a503975f7808bcefff8bf2ca4e9605926e1ed9 Mon Sep 17 00:00:00 2001 From: Francisco Casas Date: Mon, 17 Nov 2025 11:16:29 -0300 Subject: [PATCH] vkd3d-shader/hlsl: Avoid member access on NULL resource load (ubsan). In some scenarios this resource load is NULL, and we are still doing &load->node on it. vkd3d/libs/vkd3d-shader/hlsl.c:2195:12: runtime error: member access within null pointer of type 'struct hlsl_ir_resource_load' This happens in tests/hlsl/sampler-state.shader_test, in the following test: [pixel shader fail] Texture2D tex; float4 main(): sv_target { return tex.Sample(sampler_state {}, float2(0, 0)); } --- libs/vkd3d-shader/hlsl.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index afa7958d0..6558c4e9f 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -2199,9 +2199,12 @@ static struct hlsl_ir_resource_load *hlsl_new_resource_load(struct hlsl_ctx *ctx struct hlsl_ir_node *hlsl_block_add_resource_load(struct hlsl_ctx *ctx, struct hlsl_block *block, const struct hlsl_resource_load_params *params, const struct vkd3d_shader_location *loc) { - struct hlsl_ir_resource_load *load = hlsl_new_resource_load(ctx, params, loc); + struct hlsl_ir_resource_load *load; - if (load && load->sampling_dim == HLSL_SAMPLER_DIM_STRUCTURED_BUFFER) + if (!(load = hlsl_new_resource_load(ctx, params, loc))) + return NULL; + + if (load->sampling_dim == HLSL_SAMPLER_DIM_STRUCTURED_BUFFER) hlsl_src_from_node(&load->byte_offset, hlsl_block_add_uint_constant(ctx, block, 0, loc)); return append_new_instr(ctx, block, &load->node);