string-util: make sure strrepa() doesn't doubly evaluate expressions

This commit is contained in:
Lennart Poettering 2024-05-22 15:42:56 +02:00 committed by Luca Boccassi
parent 94a8a4b063
commit b22635083a

View file

@ -202,11 +202,14 @@ 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_; \
size_t _len_ = strlen(s) * n; \
_p_ = _d_ = newa(char, _len_ + 1); \
for (unsigned _i_ = 0; _i_ < n; _i_++) \
_p_ = stpcpy(_p_, s); \
for (size_t _i_ = 0; _i_ < _nnn_; _i_++) \
_p_ = stpcpy(_p_, _sss_); \
*_p_ = 0; \
_d_; \
})