jemalloc/test/integration
Bruno Gonçalves 7ce8b9165d Accept NULL in free_sized() and free_aligned_sized()
free_sized() and free_aligned_sized() forward straight to sdallocx(), which
expects a non-NULL pointer and asserts on it in debug builds. C23 says both
should accept NULL and do nothing, like free(NULL) does, so a NULL argument
either trips that assert or feeds NULL into the dealloc path in release builds.

It is not hard to hit. glibc 2.41 ships free_sized()/free_aligned_sized(), and
a C++ sized delete of a null pointer compiles down to a free_sized() call. Once
jemalloc is preloaded its versions take over, and that NULL call takes down the
process. I ran into it with GTK4/GLib apps under LD_PRELOAD.

Check for NULL first, the way free() already does, and add an integration test
covering the NULL case for both functions.

While here, give free_aligned_sized() its own core.free_aligned_sized.entry
and .exit logging and call je_sdallocx_impl() directly rather than the
je_sdallocx() wrapper, so it mirrors free_sized() and no longer logs under
sdallocx. The C++ sized-delete paths (sizedDeleteImpl, alignedSizedDeleteImpl)
get the same treatment: log entry/exit unconditionally and guard the call with
likely(ptr != nullptr).
2026-06-29 16:35:49 -04:00
..
cpp Replace experimental_infallible_new with compile-time flag 2026-06-06 09:50:37 -04:00
aligned_alloc.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
allocated.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
extent.c Consolidate arena_* header split into arena.h 2026-06-04 11:32:53 -04:00
extent.sh Use MALLOC_CONF rather than malloc_conf for tests. 2017-02-23 08:57:02 -08:00
free_sized.c Accept NULL in free_sized() and free_aligned_sized() 2026-06-29 16:35:49 -04:00
malloc.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
mallocx.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
mallocx.sh Use MALLOC_CONF rather than malloc_conf for tests. 2017-02-23 08:57:02 -08:00
MALLOCX_ARENA.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
overflow.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
posix_memalign.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
rallocx.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
sdallocx.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
slab_sizes.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
slab_sizes.sh Add MALLOC_CONF parsing for dynamic slab sizes. 2018-07-12 20:53:06 -07:00
smallocx.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
smallocx.sh Adapts mallocx integration tests for smallocx 2018-10-17 07:12:28 -07:00
thread_arena.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
thread_tcache_enabled.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
xallocx.c Reformat the codebase with the clang-format 18. 2026-03-10 18:14:33 -07:00
xallocx.sh Use MALLOC_CONF rather than malloc_conf for tests. 2017-02-23 08:57:02 -08:00