From 34fb408f8bb0c797c6307531665f563325bb2f39 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Fri, 20 Sep 2024 21:39:15 +0200 Subject: [PATCH] basic: replace size_multiply_overflow() with MUL_ASSIGN_SAFE where applicable --- src/basic/alloc-util.c | 11 +++++------ src/basic/alloc-util.h | 14 +++++++------- src/basic/string-util.h | 23 +++++++++++------------ 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/basic/alloc-util.c b/src/basic/alloc-util.c index fc98610a0f8..96cf27dc37d 100644 --- a/src/basic/alloc-util.c +++ b/src/basic/alloc-util.c @@ -43,7 +43,7 @@ void* greedy_realloc( size_t need, size_t size) { - size_t a, newalloc; + size_t newalloc; void *q; assert(p); @@ -60,14 +60,13 @@ void* greedy_realloc( return NULL; newalloc = need * 2; - if (size_multiply_overflow(newalloc, size)) + if (!MUL_ASSIGN_SAFE(&newalloc, size)) return NULL; - a = newalloc * size; - if (a < 64) /* Allocate at least 64 bytes */ - a = 64; + if (newalloc < 64) /* Allocate at least 64 bytes */ + newalloc = 64; - q = realloc(*p, a); + q = realloc(*p, newalloc); if (!q) return NULL; diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h index c215c33f4bf..462092703aa 100644 --- a/src/basic/alloc-util.h +++ b/src/basic/alloc-util.h @@ -26,23 +26,23 @@ typedef void* (*mfree_func_t)(void *p); #define alloca_safe(n) \ ({ \ - size_t _nn_ = n; \ + size_t _nn_ = (n); \ assert(_nn_ <= ALLOCA_MAX); \ alloca(_nn_ == 0 ? 1 : _nn_); \ }) \ #define newa(t, n) \ ({ \ - size_t _n_ = n; \ - assert(!size_multiply_overflow(sizeof(t), _n_)); \ - (t*) alloca_safe(sizeof(t)*_n_); \ + size_t _n_ = (n); \ + assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t))); \ + (t*) alloca_safe(_n_); \ }) #define newa0(t, n) \ ({ \ - size_t _n_ = n; \ - assert(!size_multiply_overflow(sizeof(t), _n_)); \ - (t*) alloca0((sizeof(t)*_n_)); \ + size_t _n_ = (n); \ + assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t))); \ + (t*) alloca0(_n_); \ }) #define newdup(t, p, n) ((t*) memdup_multiply(p, n, sizeof(t))) diff --git a/src/basic/string-util.h b/src/basic/string-util.h index 0f6e0b72bfb..cc6aa183c0c 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -201,18 +201,17 @@ int strextendf_with_separator(char **x, const char *separator, const char *forma char* strrep(const char *s, unsigned n); -#define strrepa(s, n) \ - ({ \ - const char *_sss_ = (s); \ - size_t _nnn_ = (n), _len_ = strlen(_sss_); \ - assert(!size_multiply_overflow(_len_, _nnn_)); \ - _len_ *= _nnn_; \ - char *_d_, *_p_; \ - _p_ = _d_ = newa(char, _len_ + 1); \ - for (size_t _i_ = 0; _i_ < _nnn_; _i_++) \ - _p_ = stpcpy(_p_, _sss_); \ - *_p_ = 0; \ - _d_; \ +#define strrepa(s, n) \ + ({ \ + const char *_sss_ = (s); \ + size_t _nnn_ = (n), _len_ = strlen(_sss_); \ + assert_se(MUL_ASSIGN_SAFE(&_len_, _nnn_)); \ + char *_d_, *_p_; \ + _p_ = _d_ = newa(char, _len_ + 1); \ + for (size_t _i_ = 0; _i_ < _nnn_; _i_++) \ + _p_ = stpcpy(_p_, _sss_); \ + *_p_ = 0; \ + _d_; \ }) int split_pair(const char *s, const char *sep, char **l, char **r); -- 2.47.3