alloc-util: return NULL if 0-sized allocation is requested
That would almost certainly be an error (e.g., an overflow in computing _need_), so it's better to fail.
This commit is contained in:
parent
8192548ef7
commit
c05107767b
|
@ -52,8 +52,11 @@ static inline void freep(void *p) {
|
||||||
|
|
||||||
#define _cleanup_free_ _cleanup_(freep)
|
#define _cleanup_free_ _cleanup_(freep)
|
||||||
|
|
||||||
|
/* Checks the size arguments of allocation functions for overflow in multiplication. In addition, checks if either of
|
||||||
|
* them is 0; that is almost certainly an error (e.g., an overflow in computing _need_), so it's better to fail (and
|
||||||
|
* we cannot leave this check to malloc, because the behavior of malloc(0) is impl. specific). */
|
||||||
static inline bool size_multiply_overflow(size_t size, size_t need) {
|
static inline bool size_multiply_overflow(size_t size, size_t need) {
|
||||||
return _unlikely_(need != 0 && size > (SIZE_MAX / need));
|
return _unlikely_(need == 0 || size == 0 || size > (SIZE_MAX / need));
|
||||||
}
|
}
|
||||||
|
|
||||||
_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t size, size_t need) {
|
_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t size, size_t need) {
|
||||||
|
|
Loading…
Reference in New Issue