vkd3d-shader/dxil: Do not access null code blocks on failure.

This commit is contained in:
Conor McCarthy 2023-09-14 19:00:00 +10:00 committed by Alexandre Julliard
parent 56cd609308
commit b30b95e824
Notes: Alexandre Julliard 2023-09-26 22:48:47 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/345

View File

@ -2522,11 +2522,11 @@ static enum vkd3d_result sm6_parser_function_init(struct sm6_parser *sm6, const
struct sm6_function *function) struct sm6_function *function)
{ {
struct vkd3d_shader_instruction *ins; struct vkd3d_shader_instruction *ins;
size_t i, block_idx, block_count;
const struct dxil_record *record; const struct dxil_record *record;
bool ret_found, is_terminator; bool ret_found, is_terminator;
struct sm6_block *code_block; struct sm6_block *code_block;
struct sm6_value *dst; struct sm6_value *dst;
size_t i, block_idx;
if (sm6->function_count) if (sm6->function_count)
{ {
@ -2552,12 +2552,12 @@ static enum vkd3d_result sm6_parser_function_init(struct sm6_parser *sm6, const
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
} }
if (!(function->block_count = block->records[0]->operands[0])) if (!(block_count = block->records[0]->operands[0]))
{ {
WARN("Function contains no blocks.\n"); WARN("Function contains no blocks.\n");
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
} }
if (function->block_count > 1) if (block_count > 1)
{ {
FIXME("Branched shaders are not supported yet.\n"); FIXME("Branched shaders are not supported yet.\n");
return VKD3D_ERROR_INVALID_SHADER; return VKD3D_ERROR_INVALID_SHADER;
@ -2568,6 +2568,7 @@ static enum vkd3d_result sm6_parser_function_init(struct sm6_parser *sm6, const
ERR("Failed to allocate code block.\n"); ERR("Failed to allocate code block.\n");
return VKD3D_ERROR_OUT_OF_MEMORY; return VKD3D_ERROR_OUT_OF_MEMORY;
} }
function->block_count = block_count;
code_block = function->blocks[0]; code_block = function->blocks[0];
sm6->cur_max_value = function->value_count; sm6->cur_max_value = function->value_count;