diff --git a/.pick_status.json b/.pick_status.json index b79a1c47583..922903d7e9f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -427,7 +427,7 @@ "description": "nir/large_constants: Eliminate out-of-bounds writes to large constants", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "1235850522cd5e7b07701f7065996430ca1514b6" }, diff --git a/src/compiler/nir/nir_opt_large_constants.c b/src/compiler/nir/nir_opt_large_constants.c index 7ed26f51127..23b30693ee5 100644 --- a/src/compiler/nir/nir_opt_large_constants.c +++ b/src/compiler/nir/nir_opt_large_constants.c @@ -118,8 +118,11 @@ handle_constant_store(void *mem_ctx, struct var_info *info, info->constant_data = rzalloc_size(mem_ctx, var_size); } - char *dst = (char *)info->constant_data + - nir_deref_instr_get_const_offset(deref, size_align); + const unsigned offset = nir_deref_instr_get_const_offset(deref, size_align); + if (offset >= info->constant_data_size) + return; + + char *dst = (char *)info->constant_data + offset; for (unsigned i = 0; i < num_components; i++) { if (!(writemask & (1 << i)))