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));
    }
This commit is contained in:
Francisco Casas
2025-11-17 11:16:29 -03:00
committed by Henri Verbeet
parent 654c96fc94
commit 06a503975f
Notes: Henri Verbeet 2025-11-18 18:02:19 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1832

View File

@@ -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);