diff --git a/test/.gitignore b/test/.gitignore index f26606c3..d37a6a7c 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -40,4 +40,5 @@ overflow_small_1_byte overflow_small_8_byte uninitialized_read_large uninitialized_read_small +realloc_init __pycache__/ diff --git a/test/Makefile b/test/Makefile index add62aee..0eb39210 100644 --- a/test/Makefile +++ b/test/Makefile @@ -66,7 +66,8 @@ EXECUTABLES := \ malloc_object_size_offset \ invalid_malloc_object_size_small \ invalid_malloc_object_size_small_quarantine \ - impossibly_large_malloc + impossibly_large_malloc \ + realloc_init all: $(EXECUTABLES) diff --git a/test/realloc_init.c b/test/realloc_init.c new file mode 100644 index 00000000..01ec5733 --- /dev/null +++ b/test/realloc_init.c @@ -0,0 +1,33 @@ +#include +#include + +static void *thread_func(void *arg) { + arg = realloc(arg, 1024); + if (!arg) { + exit(EXIT_FAILURE); + } + + free(arg); + + return NULL; +} + +int main(void) { + void *mem = realloc(NULL, 12); + if (!mem) { + return EXIT_FAILURE; + } + + pthread_t thread; + int r = pthread_create(&thread, NULL, thread_func, mem); + if (r != 0) { + return EXIT_FAILURE; + } + + r = pthread_join(thread, NULL); + if (r != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/test/test_smc.py b/test/test_smc.py index 23179ae1..2d49114b 100644 --- a/test/test_smc.py +++ b/test/test_smc.py @@ -233,6 +233,11 @@ def test_uninitialized_read_large(self): "uninitialized_read_large") self.assertEqual(returncode, 0) + def test_realloc_init(self): + _stdout, _stderr, returncode = self.run_test( + "realloc_init") + self.assertEqual(returncode, 0) + if __name__ == '__main__': unittest.main()