From 015e62b18d38cd3a67fea631375ebbab610274fe Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Mon, 11 Sep 2023 18:53:31 +0300 Subject: [PATCH] Remove incorrect uses of __attribute__((__malloc__)). xrealloc() is obviously incorrect, modern GCC docs even mention realloc() as an example where this attribute cannot be used. liblzma's lzma_alloc() and lzma_alloc_zero() would be correct uses most of the time but custom allocators may use a memory pool or otherwise hold the pointer so aliasing issues could happen in theory. The xstrdup() case likely was correct but I removed it anyway. Now there are no __malloc__ attributes left in the code. The allocations aren't in hot paths so this should make no practical difference. (cherry picked from commit 359e5c6cb128dab64ea6070d21d1c240f96cea6b) --- src/liblzma/common/common.c | 4 ++-- src/liblzma/common/common.h | 4 ++-- src/xz/util.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/liblzma/common/common.c b/src/liblzma/common/common.c index 8de37d00..407dd584 100644 --- a/src/liblzma/common/common.c +++ b/src/liblzma/common/common.c @@ -35,7 +35,7 @@ lzma_version_string(void) // Memory allocation // /////////////////////// -extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) +extern void * lzma_attr_alloc_size(1) lzma_alloc(size_t size, const lzma_allocator *allocator) { // Some malloc() variants return NULL if called with size == 0. @@ -53,7 +53,7 @@ lzma_alloc(size_t size, const lzma_allocator *allocator) } -extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) +extern void * lzma_attr_alloc_size(1) lzma_alloc_zero(size_t size, const lzma_allocator *allocator) { // Some calloc() variants return NULL if called with size == 0. diff --git a/src/liblzma/common/common.h b/src/liblzma/common/common.h index 671d3bc4..41754cc8 100644 --- a/src/liblzma/common/common.h +++ b/src/liblzma/common/common.h @@ -280,12 +280,12 @@ struct lzma_internal_s { /// Allocates memory extern void *lzma_alloc(size_t size, const lzma_allocator *allocator) - lzma_attribute((__malloc__)) lzma_attr_alloc_size(1); + lzma_attr_alloc_size(1); /// Allocates memory and zeroes it (like calloc()). This can be faster /// than lzma_alloc() + memzero() while being backward compatible with /// custom allocators. -extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) +extern void * lzma_attr_alloc_size(1) lzma_alloc_zero(size_t size, const lzma_allocator *allocator); /// Frees memory diff --git a/src/xz/util.h b/src/xz/util.h index a2516bf9..6e824dad 100644 --- a/src/xz/util.h +++ b/src/xz/util.h @@ -20,11 +20,11 @@ /// \brief Safe realloc() that never returns NULL extern void *xrealloc(void *ptr, size_t size) - lzma_attribute((__malloc__)) lzma_attr_alloc_size(2); + lzma_attr_alloc_size(2); /// \brief Safe strdup() that never returns NULL -extern char *xstrdup(const char *src) lzma_attribute((__malloc__)); +extern char *xstrdup(const char *src); /// \brief Fancy version of strtoull()