diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-03-23 22:07:14 -0300 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-22 21:51:24 -0400 |
commit | 1d2db783986717c912709ccea4a18d9b8f396ee1 (patch) | |
tree | d6d3e15fd7b40e4465bd521e91b60ab640d2812d /src/shader_recompiler/object_pool.h | |
parent | 3d07cef009cf9e287744c7771c67166ef5761ce8 (diff) |
shader: Fix use-after-free bug in object_pool
Diffstat (limited to 'src/shader_recompiler/object_pool.h')
-rw-r--r-- | src/shader_recompiler/object_pool.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/shader_recompiler/object_pool.h b/src/shader_recompiler/object_pool.h index c10751b9d1..4242816344 100644 --- a/src/shader_recompiler/object_pool.h +++ b/src/shader_recompiler/object_pool.h @@ -18,7 +18,7 @@ public: } template <typename... Args> - requires std::is_constructible_v<T, Args...>[[nodiscard]] T* Create(Args&&... args) { + requires std::is_constructible_v<T, Args...> [[nodiscard]] T* Create(Args&&... args) { return std::construct_at(Memory(), std::forward<Args>(args)...); } @@ -32,12 +32,12 @@ public: const size_t total_objects{root.num_objects + new_chunk_size * (chunks.size() - 1)}; chunks.clear(); chunks.emplace_back(total_objects); - chunks.shrink_to_fit(); } else { root.Release(); chunks.resize(1); - chunks.shrink_to_fit(); } + chunks.shrink_to_fit(); + node = &chunks.front(); } private: |