[libc-commits] [PATCH] D150529: [libc] Make the bump pointer explicitly return null on buffer oveerrun
Joseph Huber via Phabricator via libc-commits
libc-commits at lists.llvm.org
Sun May 14 10:07:35 PDT 2023
jhuber6 created this revision.
jhuber6 added reviewers: sivachandra, lntue, michaelrj.
Herald added subscribers: libc-commits, ecnelises, tschuett.
Herald added projects: libc-project, All.
jhuber6 requested review of this revision.
We use a simple bump ptr in the `libc` tests. If we run out of data we
can currently return other static memory and have weird failure cases.
We should fail more explicitly here by returning a null pointer instead.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D150529
Files:
libc/test/IntegrationTest/test.cpp
libc/test/UnitTest/HermeticTestUtils.cpp
Index: libc/test/UnitTest/HermeticTestUtils.cpp
===================================================================
--- libc/test/UnitTest/HermeticTestUtils.cpp
+++ libc/test/UnitTest/HermeticTestUtils.cpp
@@ -29,7 +29,8 @@
// requires. Hence, as a work around for this problem, we use a simple allocator
// which just hands out continuous blocks from a statically allocated chunk of
// memory.
-static uint8_t memory[16384];
+static constexpr uint64_t memory_size = 16384;
+static uint8_t memory[memory_size];
static uint8_t *ptr = memory;
} // anonymous namespace
@@ -68,7 +69,7 @@
s = ((s + ALIGNMENT - 1) / ALIGNMENT) * ALIGNMENT;
void *mem = ptr;
ptr += s;
- return mem;
+ return static_cast<uint64_t>(ptr - memory) >= memory_size ? nullptr : mem;
}
void free(void *) {}
Index: libc/test/IntegrationTest/test.cpp
===================================================================
--- libc/test/IntegrationTest/test.cpp
+++ libc/test/IntegrationTest/test.cpp
@@ -57,6 +57,7 @@
// which just hands out continuous blocks from a statically allocated chunk of
// memory.
+static constexpr uint64_t memory_size = 16384;
static uint8_t memory[16384];
static uint8_t *ptr = memory;
@@ -65,7 +66,7 @@
void *malloc(size_t s) {
void *mem = ptr;
ptr += s;
- return mem;
+ return static_cast<uint64_t>(ptr - memory) >= memory_size ? nullptr : mem;
}
void free(void *) {}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150529.522013.patch
Type: text/x-patch
Size: 1407 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230514/94ed86ca/attachment.bin>
More information about the libc-commits
mailing list