test: add tests for zero sized realloc(3)

C23 declared calling realloc(3) with a non-NULL pointer and zero size
Undefined behavior.
Check that hardened_malloc handles that case sanely by free'ing the old
pointer and returning a special pointer, like `malloc(3)` called with
size zero.
This commit is contained in:
Christian Göttsche 2025-04-05 15:53:19 +02:00
parent 1d7fc7ffe0
commit 9ca3279507
6 changed files with 80 additions and 1 deletions

View file

@ -169,6 +169,20 @@ class TestSimpleMemoryCorruption(unittest.TestCase):
self.assertEqual(stderr.decode("utf-8"),
"fatal allocator error: invalid realloc\n")
def test_realloc_c23_undefined_behaviour(self):
_stdout, stderr, returncode = self.run_test("realloc_c23_undefined_behaviour")
self.assertEqual(returncode, 0)
def test_realloc_c23_undefined_behaviour_double_free(self):
_stdout, stderr, returncode = self.run_test("realloc_c23_undefined_behaviour_double_free")
self.assertEqual(returncode, -6)
self.assertEqual(stderr.decode("utf-8"),
"fatal allocator error: double free (quarantine)\n")
def test_realloc_c23_undefined_behaviour_use_after_free(self):
_stdout, stderr, returncode = self.run_test("realloc_c23_undefined_behaviour_use_after_free")
self.assertEqual(returncode, -11)
def test_write_after_free_large_reuse(self):
_stdout, _stderr, returncode = self.run_test(
"write_after_free_large_reuse")