35 lines
1.2 KiB
Diff
35 lines
1.2 KiB
Diff
From 7d644e7ba27eaadda753febf0b142faa9affbbca Mon Sep 17 00:00:00 2001
|
|
From: hongyang7 <yang.a.hong@intel.com>
|
|
Date: Thu, 16 Dec 2021 19:02:17 +0800
|
|
Subject: [PATCH] Fix segfaults on allocation failure (#4)
|
|
|
|
Throw std::bad_alloc instead of returning nullptr from
|
|
ue2::AlignedAllocator. Allocators for STL containers are expected never
|
|
to return with an invalid pointer, and instead must throw on failure.
|
|
Violating this expectation can lead to invalid pointer dereferences.
|
|
|
|
Co-authored-by: johanngan <johanngan.us@gmail.com>
|
|
|
|
fixes github issue #317 (PR #320)
|
|
---
|
|
src/util/alloc.h | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/util/alloc.h b/src/util/alloc.h
|
|
index de20c8d02..49b4a824d 100644
|
|
--- a/src/util/alloc.h
|
|
+++ b/src/util/alloc.h
|
|
@@ -76,7 +76,11 @@ class AlignedAllocator {
|
|
|
|
T *allocate(std::size_t size) const {
|
|
size_t alloc_size = size * sizeof(T);
|
|
- return static_cast<T *>(aligned_malloc_internal(alloc_size, N));
|
|
+ T *ptr = static_cast<T *>(aligned_malloc_internal(alloc_size, N));
|
|
+ if (!ptr) {
|
|
+ throw std::bad_alloc();
|
|
+ }
|
|
+ return ptr;
|
|
}
|
|
|
|
void deallocate(T *x, std::size_t) const noexcept {
|