[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